奇淫巧技总结篇之让命令行运行的更好

/ 奇淫巧技 / 没有评论 / 1365浏览

关于命令组合

&&

  1. 命令之间使用 && 连接,实现逻辑与的功能。
  2. 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
  3. 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。

||

  1. 命令之间使用 || 连接,实现逻辑或的功能。
  2. 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
  3. 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。

两个案例:

案例1

killall php-fpm &&  /usr/local/php/sbin/php-fpm 

上面这个命令是 杀死php所有进程,并重新启动 php ,但是php进程要是很多,killall 不能立刻杀死所有的进程,后面的php开启也不会执行,这样可能酿成大问题,所以,要想确保万无一失,就用kill -9 杀死pid,再重启,像这样

ps -ef |grep php  |grep -v grep |awk '{print $2}'|xargs kill -9 && /www/web/php/sbin/php-fpm

案例2

rm ~/Desktop/1.txt && echo "success" || echo "fail"

如果 ~/Desktop 目录下存在文件 1.txt,将输出 success 提示信息;否则输出 fail 提示信息

;

  1. 命令之间使用;,不论前面的命令是否成功,;后面的依旧会执行
  2. 一条命令需要独占一个物理行,如果需要将多条命令放在同一行,命令之间使用命令分隔符(;)分隔。执行的效果等同于多个独立的命令单独执行的效果

{}

  1. 表示在当前 shell 中将多个命令作为一个整体执行。需要注意的是,使用 () 括起来的命令在执行前面都不会切换当前工作目录,也就是说命令组合都是在当前工作目录下被执行的,尽管命令中有切换目录的命令。

示范:

[root@pa1 tmp]#\rm ~/Desktop/1.txt || {cd ~/Desktop/;ls -a;echo "fail"}
rm: cannot remove ‘/root/Desktop/1.txt’: No such file or directory
-bash: cd: /root/Desktop/: No such file or directory                            #没有这个文件,执行||后面的
.                                                   header.html          php-fpm.sock
..                                                  hsperfdata_root      sess_fc6cleqmbkejpsje96t40q7o86  #ls -a 
fail                                    #输出 fail

()

1 括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格

====================我是分隔符====================我是分隔符============

关于后台运行

&

窗口关闭后台运行会取消

nohup command &

窗口关闭后台运行继续,会输出一个文件 nohup.out

screen

窗口关闭后台继续运行,比nohup稳定

查看当前有多少在后台运行的命令

jobs   #列出由ctrl+z,&,nohup命令调到后台的程序

screen -ls  #列出当前所有由screen调到后台的程序

后台命令拉到前台继续

拉到前台继续看输出的话,得看你是怎么放到后面的,解铃还需系铃人 有的是& 有的是 nohup 还有screen ,除了screen,这些后台的东西,都可以用fg加 序号继续在前台执行

screen -r yourname # 回到yourname这个进程

fg                 #将后台中的命令调至前台继续运行

bg                 #将一个在后台暂停的命令,变成继续执行

怎么杀死后台运行的

jobs

jobs -l #显示后台挂起的程序pid及状态 (kill pid)

screen

screen -ls  #列出当前所有由screen调到后台的程序
screen -r pid (直接ctrl+c退出)
或者直接命令行找到pid ,kill掉  

查看某个进程开启的时间

ps -o lstart -p  pid 

查看这个命令会运行多久?

time command 

查看这个命令在执行前会做什么?

maybe

[root@pa2 ~]# !maybe
maybe rm -f root.txt 
maybe has prevented rm -f root.txt from performing 1 file system operations:

  delete /root/root.txt

Do you want to rerun rm -f root.txt and permit these operations? [y/N] y

关于命令行操作

Ctrl + a 跳转到当前命令行行首

Ctrl + e 跳转到当前命令行行尾

!+上次使用的命令行第一个单词 快速调用上次使用的命令行全部内容

Ctrl + r 搜索最近使用的命令并调用

ctrl - k 清除光标右边的内容 ctrl + h 清除光标左边(之前)的内容

mac用户 Ctrl 换为 control