在你的ssh客户端机器(例如从你的PC登录服务器,那么就是在你的PC上)
创建~/.ssh文件夹
mkdir ~/.ssh
cd ~/.ssh
vi config
# config的文件中,内容为:
host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
此后,第一次登录,还是要输入密码,第二次再打开一个终端登录,就不用再输入密码了!
[......]
在你的ssh客户端机器(例如从你的PC登录服务器,那么就是在你的PC上)
创建~/.ssh文件夹
mkdir ~/.ssh
cd ~/.ssh
vi config
# config的文件中,内容为:
host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
此后,第一次登录,还是要输入密码,第二次再打开一个终端登录,就不用再输入密码了!
[......]
sudo add-apt-repository ppa:marutter/rrutter
sudo apt-get update sudo apt-get install r-base r-base-dev
执行
R
[......]
在Linux中,除了进程外,还有一个进程组的概念:
一个进程所创建的子进程,都会被包含到一个进程组中。
所以,我们可以用进程组杀死某个进程及其fork出的所有子进程。
1、跟进进程pid查看某个进程所属的进程组
ps -o pgid 19843
PGID
977
2、kill 某个进程组的所有进程
kill -- -977
注意上面的--和空格和-都不能少哦!
[......]
Shell中的二次引用:
a=b
b=123
echo $a # is b
echo ${!a} # is 123
如上所属,使用${!var},就可以获得变量var中存储的变量的变量了~[......]
参考stackoverflow的例子,改了一个出来:
while IFS='= ' read var val
do
if [[ $var == \[*] ]]
then
section=$(echo $var | sed 's/^\[\(.*\)\]$/\1/')
elif [[ $val ]]
then
if [ -z $section ];then
declare "${var}=$val"[......]