Linux技巧(六):命令尾部&的作用 &&、|、||、;、()、&>、 2>&1 的用法和区别,很实用

这篇具有很好参考价值的文章主要介绍了Linux技巧(六):命令尾部&的作用 &&、|、||、;、()、&>、 2>&1 的用法和区别,很实用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在使用Linux命令时,&&、||、;、()这些偶尔会接触到,命令结尾单独的“&”符号,又有什么作用,这些命令之间有何区分,一起来学习一下吧。

bin/zookeeper-server-start.sh config/zookeeper.properties &

 【PS】:如果你对Zookeeper学习:ZK下载安装和真/伪集群搭建感兴趣,点击进入。

一、命令尾部,单独“&”的作用

1.1、&的作用

作用:表示任务在后台执行,即使ssh窗口关闭,服务依然会在后台持续运行。

语法格式:command1 &

注意:默认情况下,进程是前台进程,这时就把Shell给占据了,此时Shell窗口无法进行其他操作。通常情况下,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,此时可以在启动时,参数尾部加一个'&'或者'-d'实现这个目的。

#docker run -d -p 8000:8080 tomcat 后台阻塞运行(如果没有-d,窗口被关闭,服务也会随之关闭)

当然,两者也可以混合式使用,比如:./MediaServer -d & 

扩展:单独使用-d&参数启动服务时的区别和联系
1、-d参数启动服务时,服务会以守护进程的形式在后台运行,并且会将输出重定向到系统日志或指定的日志文件中,便于后续查看;
2、使用&启动服务时,服务会以后台进程的形式在后台运行,并且会将输出重定向到终端之外的标准输出中,服务进程的输出信息只能在终端关闭前查看,之后无法再次查看;

3、-d参数启动服务时,可以使用service命令来查看和管理服务,包括查看服务状态、重启服务等;
4、使用&启动服务时,如果需要查看服务状态或停止服务,需要使用ps命令和kill命令,较为繁琐。 

【PS】:如果你对Docker学习:Docker命令的使用,感兴趣,点击进入。 

1.2、nohup的作用

nohup是no hang up 的缩写,即:不挂断的意思,关闭终端界面后,进程继续后台运行。

语法格式:nohup Command [ Arg ... ] [ &

注意事项:

1)使用nohup命令时,需添加 &( “and”符号)到命令的尾部。

2)使用nohup命令时,如果直接在shell中使用ctrl + c 或ctrl + z时,进程会结束!!!

3)nohup命令默认输出重定向目录,是当前目录的nohup.out文件中;如果当前目录的 nohup.out 是只读的,则自动重定向输出到$HOME/nohup.out 文件中。 


[root@centOS7 ~]# nohup ./startup.sh >output 2>&1 & 

拓展:tomcat、nginx等都是通过startup.sh启动服务的。

二、“&&”命令的作用

作用:表示前一条命令执行成功时,才执行后一条命令;反之,前面的命令执行失败,则&&后面的命令不会被执行。

语法格式:  command1 && command2  [&& command3 ...]

示例 

[root@centOS7 ~]# data && echo hello
bash: data: 未找到命令...
[root@centOS7 ~]# date && echo hello
2022年 10月 17日 星期一 00:07:01 CST
hello

linux &&,# Linux攻略,linux,java,运维

注意:它的特性是“下一条命令,依赖前一条命令是否执行成功 ”,所以前后关系较为密切的一些组合命令中,经常发现他们的身影。

比如:expect的安装,需要先安装依赖,如果合并为一条命令,此时就用上&&了。 

三、“|”管道的作用

作用:| 表示管道,上一条命令的输出,作为下一条命令参数,通常用来过滤/汇总数据。

语法格式:  command1 |  command2  [ | command3 … ]

注:| 根据需求,可以在一条命令中连续被使用,它通常和find grepwc等命令组合在一起使用 。

示例一:配合grep,完成过滤

#过滤出占用端口9092的程序(kafka)
netstat -nalpt | grep 9092

linux &&,# Linux攻略,linux,java,运维

示例二:配合wc完成统计

 echo 'yes' | wc -l
 echo 'yes' | wc -m

 linux &&,# Linux攻略,linux,java,运维 

示例三:连续使用管道

[root@centOS7 ~]# cat /etc/passwd | grep /bin/bash | wc -l
2
[root@centOS7 ~]# 

linux &&,# Linux攻略,linux,java,运维  

四、“||”拼接符的作用

作用:表示上一条命令执行失败后,才执行下一条命令。一旦执行到一条成功的命令,后面用||连接的命令,就不会再被执行。

语法格式:  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 ~]# 

linux &&,# Linux攻略,linux,java,运维

五、“;”拼接符的作用

作用:把多条命令,拼接在一起后执行,可减少(人机)交互次数。

语法格式: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 ~]# 

 linux &&,# Linux攻略,linux,java,运维

六、“()”拼接符的作用 

作用:把多个命令,当做一个整体执行,同时增强了可读性。

通常情况下,多个命令用“;”分隔后,最外层再用“()”包裹一下,通常用在稍微复杂点的shell中。

语法格式:(command1command2command3...)

七、“>”连接符的作用

作用:把正常信息(剔除错误信息)重定向到另一个文件内

 注意:如果每次都是重定向到同一个文件,它的效果是覆盖原文件信息,不是内容追加!

#切换到指定目录
cd mypackage && ls
#根据名称查找文件,并把符合条件的名称,重定向输入到tar.txt中
find -name "*.tar.*" > tar.txt
#查看
ls ; cat tar.txt

注:如果每次都需要把内容追加到文件中,则需要用>> 

linux &&,# Linux攻略,linux,java,运维

八、“&>”、“>” 作用和区别 

> 或1> 作用:  仅正常信息(非异常信息,非报错信息),重定向输出到指定文件;

2>作用:仅将错误信息重定向输出到指定文件中;

&>或2>&1作用:同时将错误信息、普通信息一并重定向输出到指定文件。

[root@CentOs7]# lll
-bash: lll: command not found   //由于Linux没有lll这个命令所以会显示错误信息,这个就是stderr输出的错误信息
[root@CentOs7]# lll >test.txt
-bash: lll: command not found  //由于这个是错误信息  所以不能使用标准输出>将信息重定向到test.txt文件中
[root@CentOs7]# lll&>test.txt  //使用&>重定向 ,会一并把错误信息、正确信息,一并重定向到了test.txt文件
[root@CentOs7]# cat test.txt
-bash: lll: command not found  //通过cat命令确实看到了  保存的错误信息 

注意:如果每次都是重定向到同一个文件,以上两个命令的效果都是覆盖原文件信息,不是内容追加! 

说明:可把错误、异常信息同时输出到两个不同的文件。

make xxx 1> normal.txt  2> error.txt

1.深入了解&>和2>&1

简而言之,&>>&的作用相同,都是把标准信息+错误信息重定向到指定位置,它们都是2>&1的简写写法

但是在日常开发、学习过程中,习惯上更偏向于使用&>

虽然它们的效果相同,然而在使用上,还是略有差异的,强烈建议直接使用&>即可。

注意:如果你偏向于使用2>&1,则它需要写在重定向文件的后面,否则达不到你想要的效果,示例(须知:date是正确命令,data是故意制造的错误命令):

1)错误用法:(data;echo "hello";date;cat /etc/hosts)  2>&1 >a.txt   #写在前面

linux &&,# Linux攻略,linux,java,运维

2)正确用法:(data;echo "hello";date;cat /etc/hosts) > b.txt  2>&1   #写在后面

linux &&,# Linux攻略,linux,java,运维

3)简写示例

linux &&,# Linux攻略,linux,java,运维

注意事项:简写模式&>只能放在文件前面,不能放后面,否则会提示语法错误!

linux &&,# Linux攻略,linux,java,运维

九、linux重定向

9.1、Linux常用的三个流

名称   代码  操作符 Java中表示 Linux 下文件描述符
标准输入(stdin)  0 < 或 <<  System.in  /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
标准输出(stdout)  1 >, >>, 1> 或 1>>  System.out /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
标准错误输出(stderr)  2  2> 或 2>>   System.err  /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0 

0 是标准输入stdin,一般是从键盘获得输入

1 是标准输出stdout,一般是输出到屏幕了

2 是标准错误输出stderr,一般是输出到屏幕,重定向到文件中后,屏幕就看不到它了 

9.2、常用的重定向符号

>   将正常的信息,重定向到某个文件/设备中(会覆盖文件原有信息)

>>  将正常的信息,重定向到某个文件/设备中(不会覆盖文件原有信息,只会追加)

&> 将正常+异常信息,一并重定向到某个文件/设备中(会覆盖文件原有信息)

&>>将正常+异常信息,一并重定向到某个文件/设备中(不会覆盖文件原有信息,只会追加)

2> 只输出错误信息到某个文件/设备中

还有一些较少会用到的,比较烧脑,n<&- 和>&n以及<&-感兴趣,可以单独去了解一下。

记忆小妙招:

看到有两个尖括号的,代表是内容追加,单个尖括号,之前的内容都会被覆盖!!!

9.3、/dev/null 黑洞 

/dev/null 是一个特殊的设备文件,这个文件接收到任何数据都会被丢弃,俗称“黑洞”

它非常等价于一个只写文件,所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到,然而,/dev/null对命令行和脚本都非常的有用。 

黑洞的使用场景:

如果不想把正确/错误信息,输出到屏幕时,就可以把这部分信息输出到黑洞中。 

 1> /dev/null 经将正常信息出入到黑洞

 echo "httpd server is running" >> /dev/null  #如果不希望将信息打印到屏幕,可以输出到黑洞

2> /dev/null意思就是把错误输出到“黑洞” ,不会显示在屏幕上。

总结

本文较为全面的介绍了Linux常用连接符 &、&&、;、| 、|| 、()、>、&>的区别和作用。

尾言

有效的掌握这些连接符的使用,可以大大提升自己的内力,让你的linux日常更上一层楼。

如果觉得相当不错,整理不易,赶快点赞收藏吧!

附注

猜你可能感兴趣

1、RHEL7/8、CentOS7/8的下载 | Yum源配置

2、RHEL7/Centos8 | 配置动/静态IP| ping: unknown host www.baidu.com 详解

3、临时修改主机名 | 永久修改主机名 | 详解

4、查看系统内核/操作系统版本详解_查看内核版本_血煞长虹的博客-CSDN博客

5、seq命令 / mkdir -p 批量创建/删除文件夹 详解

6、Linux sort命令深入解析 | sort -k M.m,N.n 命令详解

7、用head tail sed 查看第N行到最后一行 | m,n行区间/固定行 | 前/后N行(以外)的内容

8、开启/关闭网卡(混合模式) | 设置网卡队列长度/最大传输单元 | 修改/删除eth0默认网关 |设置/删除默认路由 | 根据域名查看DNS地址(网卡 | IP 篇)

9、shell脚本实战 | 6个入门级shell脚本(CPU负载、监控、计划任务)

10、Shell编程:/bin/bash和/bin/sh的区别_/bin/bash /bin/sh的区别文章来源地址https://www.toymoban.com/news/detail-791327.html

到了这里,关于Linux技巧(六):命令尾部&的作用 &&、|、||、;、()、&>、 2>&1 的用法和区别,很实用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux实用篇】Linux常用命令(1)

    目录 1.1 Linux命令初体验 1.1.1 常用命令演示 1.1.2 Linux命令使用技巧 1.1.3 Linux命令格式 1.2 文件目录操作命令 1.2.1 ls 1.2.2 cd 1.2.3 cat 1.2.4 more 1.2.5 tail 1.2.6 mkdir 1.2.7 rmdir 1.2.8 rm 1.1 Linux命令初体验 1.1.1 常用命令演示 在这一部分中,我们主要介绍几个常用的命令,让大家快速感受以下

    2024年01月21日
    浏览(37)
  • Linux常用(实用)命令大全

    pwd 显示当前工作路径 shutdown 关闭系统 /halt 关闭系统 shutdown -r now 重启 /reboot 重启 systemctl stop firewalld 关闭防火墙 ip addr 查看ip地址. 1、cd命令:用于切换当前目录(可以是绝对路径,也可以是相对路径)如: cd /home 进入根目录下面的home目录 cd home 进入当前目录下的home目录

    2024年02月09日
    浏览(33)
  • Linux实用命令

    1. Linux的用户与用户组 添加用户 useradd aaa 为新增用户设置密码 passwd aaa 切换用户 su 用户名 su -c ls root(通过root账户执行ls命令) 删除用户 userdel userdel test 删除test用户(不会删除home目录) userdel -r test 删除用户以及home目录 修改用户名称: usermod -l 新名称 aaa(使用前退出用户) 退出

    2024年02月02日
    浏览(35)
  • Linux实用命令手册

    提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! curl ipinfo.io 或者 curl icanhazip.com curl ifconfig.me curl curlmyip.com curl ip.appspot.com curl ipinfo.io/ip curl ipecho.net/plain curl www.trackip.net/i 表单post提交: 示例一: curl localhost:8765/open/credit/moresale -X POST -d ‘mobile=15261915041sinceDa

    2024年02月09日
    浏览(43)
  • linux中dnf实用命令简记

    DNF (全称为Dandified yum)是新一代的rpm软件包管理器,他首先出现在 Fedora 18 这个发行版中。而最近,它取代了yum,正式成为 Fedora 22 的包管理器。使用DNF需要管理员权限,本章所有命令需要在管理员权限下执行。 安装: dnf install 包名 卸载: dnf remove 包名 列出所有可安装的软

    2024年02月11日
    浏览(34)
  • Linux中软链接与硬链接的作用、区别、创建、删除

    软链接是Linux中常用的命令,它的功能是某一文件在另外一个位置建立一个同步的链接,相当于C语言中的指针,建立的链接直接指向源文件所在的地址,软链接不会另外占用资源,当同一文件需要在多个位置被用到的时候,就会使用到软连接。 硬链接在是另外一个位置创建源

    2024年02月07日
    浏览(43)
  • Linux命令200例专栏导读:实用指南助你成为Linux大师

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过 具体的系统的命令讲解 加上 鲜活的实操案

    2024年02月13日
    浏览(31)
  • 实用技巧:Linux上实现OpenGauss数据库远程连接,方便的跨网络数据操作

    openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性. 结合cpolar 内网穿透工具,即可实现远程访问本地openGauss,实现远程访问,下面介绍从Linux安装到远程访问的方式

    2024年02月08日
    浏览(42)
  • Linux内核显示、加载、卸载等超实用命令

    内核模块是 Linux 系统中一种特殊的可执行文件,它可以在运行时动态地加载到内核中或卸载出内核,从而实现内核的扩展和优化。内核模块操作相关的命令主要有以下几种: 列出当前已加载的内核模块及其依赖关系和使用情况。 将指定的内核模块加载到内核中,需要提供完

    2024年02月08日
    浏览(47)
  • linux实用技巧:ubuntu18.04安装samba服务器实现局域网文件共享

    主要是这一句 原文链接:https://blog.csdn.net/u010037542/article/details/108579650 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之

    2024年01月25日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包