linux shell - msforest/notebook GitHub Wiki

shell 命令

sed

# 替换
sed '2s/dog/cat/' data.txt # 只替换第二行的dog
sed '2,3s/dog/cat/' data.txt # 只替换第二、三行的dog
sed '2,$s/dog/cat/' data.txt # 替换第二行到最后一行的dog

sed '/word/s/dog/cat/' data.txt # 替换包含word单词的行中的dog

# 命令组合
sed '3,${s/dog/cat/ s/firfox/chrome/}' data.txt

# 删除
sed '1d' data.txt # 删除第一行;前面没有数字时,表示删除所有行;
sed '1,2d' data.txt # 删除第一、二行;
sed '2,$d' data.txt # 删除第二行到最后一行;
sed '/num/d' data.txt # 删除包含num的行

# 插入
sed 'i\insert word' data.txt # 在第一行前插入'insert word'字符
sed 'a\insert word' data.txt # 在第一行后插入'insert word'字符

# 修改
sed '3c\this is change line' data.txt # 替换第三行字符
sed '/word/c\this is change line'

awk

调度命令

crontab

*    *      *     *   *    *
min  hour  day  month week cmd
0-59 0-23  1-31 1-12  0-6

at

一次性调度

[root@localhost ~]# at 5pm+3 days # 三天后的下午 5 点锺执行
at> /bin/ls
at> <EOT>
job 7 at 2013-01-08 17:00

可通过 atq 查看列表,atrm 删除调度

batch

batch 命令用于在指定时间,当系统不繁忙时执行任务,用法与 at 相似。

ssh

远程登录

ssh-copy-id root@ip # 发送本地ssh文件到服务器,第一次需要输入密码,以后就可以不用输密码

ssh root@ip "ls ~" # 在服务器上执行命令

远程端口转发

  • 本地端口转发
# 本地主机103执行命令,本地主机9906端口转发到101服务器的3306端口
ssh -fN -L 9906:192.168.58.101:3306 user@192.168.58.101
# -f指定ssh在执行命令前转入后台运行,-L指定远程主机的登录名,-N告诉ssh无需执行命令,只进行端口转发
  • 远端端口转发
# 远端主机103执行命令,103服务器的9906端口的所有数据都会被转发到101服务器的3306端口上
ssh -fN -R 9906:192.168.58.101:3306 192.168.58.103
⚠️ **GitHub.com Fallback** ⚠️