Linux技巧(六):命令尾部的作用 | 、、|、||、;、()的区别和作用(很实用)
前言
在使用Linux命令时,&&、||、;、()这些偶尔会接触到,命令结尾单独的“&”符号,又有什么作用,这些命令之间有何区分,一起走进下文。
bin/zookeeper-server-start.sh config/zookeeper.properties &
一、命令尾部,单独“&”的作用
1.1、&的作用
作用:表示任务在后台执行,即使ssh窗口关闭,依然会持续运行。
语法格式:command1 &
注意:默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,此时可以在启动时,参数尾部加一个'&'实现这个目的。类似于docker run 命令的-d 的作用。
#docker run -d -p 8000:8080 tomcat 后台阻塞运行(如果没有-d,窗口被关闭,服务也会随之关闭)
【PS】:如果你对Docker学习:Docker命令的使用,感兴趣,点击进入。
1.2、nohup的作用
nohup是no hang up 的缩写,即:不挂断的意思。以忽略挂起信号的方式执行命令,关闭终端后进程还能继续执行,但是直接在shell中使用ctrl + c 或ctrl + z时,进程会结束。
语法格式:nohup Command [ Arg ... ] [ & ]
注意事项:
要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。 如果不将 nohup 命令的输出重定向,输出将附加到当前目录的nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out 文件中。
[root@centOS7 ~]# nohup ./startup.sh >output 2>&1 &
二、“&&”拼接命令的作用
作用:表示前一条命令执行成功时,才执行后一条命令;反之,前面的命令执行失败,则&&后面的命令不会被执行。
语法格式: command1 && command2 [&& command3 ...]
示例
[root@centOS7 ~]# data && echo hello
bash: data: 未找到命令...
[root@centOS7 ~]# date && echo hello
2022年 10月 17日 星期一 00:07:01 CST
hello
注意:它的特性是“下一条命令,依赖前一条命令是否执行成功 ”,所以前后关系较为密切的一些组合命令中,经常发现他们的身影。
比如:expect的安装,需要先安装依赖,如果合并为一条命令,此时就用上&&了。
三、“|”管道的作用
作用:| 表示管道,上一条命令的输出,作为下一条命令参数,通常用来过滤/汇总数据。
语法格式: command1 | command2 [ | command3 … ]
注:| 根据需求,可以在一条命令中连续被使用,它通常和find 、grep、wc等命令组合在一起使用 。
示例一:配合grep,完成过滤
#过滤出占用端口9092的程序(kafka)
netstat -nalpt | grep 9092
示例二:配合wc完成统计
echo 'yes' | wc -l
echo 'yes' | wc -m
示例三:连续使用管道
[root@centOS7 ~]# cat /etc/passwd | grep /bin/bash | wc -l
2
[root@centOS7 ~]#
四、“||”拼接符的作用
作用:表示上一条命令执行失败后,才执行下一条命令。一旦执行到一条成功的命令,后面用||连接的命令,就不会再被执行。
语法格式: command1 | | command2 [ | |command3 … ]
注意:只要上一条命令执行成功,则下一条命令不会被执行。
注:||后面的命令,有点儿托底的意思,类似于java中的 try,catch。
[root@centOS7 ~]# cat nofile || echo "hi,succ"
cat: nofile: 没有那个文件或目录
hi,succ
[root@centOS7 ~]# cat /etc/hostname || echo "hello succ"
centOS7
[root@centOS7 ~]#
五、“;”拼接符的作用
作用:把多条命令,拼接在一起后执行,可减少(人机)交互次数。
语法格式:command1;command2 [ ;command3 … ]
注意:用;号隔开每个命令, 每个命令按照从左到右的顺序执行, 但是彼此之间不关心是否失败, 所有命令都会执行。
[root@centOS7 ~]# data;echo 'hello';date;cat /etc/hostname
bash: data: 未找到命令...
hello
2022年 10月 17日 星期一 00:34:05 CST
centOS7
[root@centOS7 ~]#
六、“()”拼接符的作用
作用:把多个命令,当做一个整体执行,同时增强了可读性。
通常情况下,多个命令用“;”分隔后,最外层再用“()”包裹一下,通常用在稍微复杂点的shell中。
语法格式:(command1;command2;command3;...)
七、“>”连接符的作用
作用:把正确无误的信息重定向到另一个文件内
注意:如果每次都是重定向到同一个文件,它的效果是覆盖原文件信息,不是内容追加!
#切换到指定目录
cd mypackage && ls
#根据名称查找文件,并把符合条件的名称,重定向输入到tar.txt中
find -name "*.tar.*" > tar.txt
#查看
ls ; cat tar.txt
八、“&>”连接符的作用
作用:将错误信息或者普通信息都重定向输出到指定文件
注意:如果每次都是重定向到同一个文件,它的效果是覆盖原文件信息,不是内容追加!
九、“2>&1”连接符的作用
Linux常用的三个流:0:标准输入流 stdin;1:标准输出流 stdout;2:标准错误流 stderr
< test.txt 等价于 0< test.txt ;
> test.txt等价于 1> test.txt ;
2>&1 将标准错误流重定向到标准输出流中。因为标准错误(stderr)没有缓冲区,而标准输出(stdout)有
总结
本文较为全面的介绍了Linux常用连接符 &、&&、;、| 、|| 、()、>、&>的区别和作用。
尾言
有效的掌握这些连接符的使用,可以大大提升自己的内力,让你的linux日常更上一层楼。
如果觉得还不错,赶快点赞收藏吧!