commond > /dev/null 2>&1 命令详解

要点分解

为了能理解commond > /dev/null 2>&1命令的具体意思,我们将分三个要点进行介绍。

part 1 伪设备

在类Unix系统上的设备节点不一定必须与物理设备相对应。缺少此对应关系的节点构成伪设备组。它们提供操作系统处理的各种功能。一些最常用(基于字符的)伪设备包括:

  • /dev/null - 接受并丢弃所有输入; 不产生输出(总是在读取时返回文件结束指示)
  • /dev/zero - 接受并丢弃所有输入; 产生连续的NUL(零值)字节流
  • /dev/full - 读取时产生连续的NUL(零值)字节流,并在写入时返回“磁盘已满”消息
  • /dev/random/dev/urandom -它们产生的一个可变长度的数据流的伪随机数。

part 2 文件描述符

在类unix系统中,当系统启动时就已经有三个标准文件流以及三个文件描述符被预先占用了,其对应关系如下。

名称文件描述符缩写设备
标准输入0STDIN键盘
标准输出1STDOUT屏幕
标准错误输出2STDERR屏幕

当我们执行某个命令时,如果该命令执行正确并且有输出,则该命令的输出是在标准输出设备。如果该命令执行失败,类unix系统则会给出提示,该提示在标准错误设备输出。

例如:

[root@li1544-92 ~]# pwd 
/root

[root@li1544-92 ~]#  pwddd
-bash: pwddd: command not found

part 3 重定向

重定向是把输出定向到文件或者标准流,重定向符有两个:

  1. > 以覆盖的方式重定向输出到文件
  2. >>以追加的方式重定向输出到文件
将pwd的结果输出到pwd.log
[root@li1544-92 ~]# pwd > pwd.log
查看结果
[root@li1544-92 ~]# cat pwd.log 
/root
追加的方式重定向
[root@li1544-92 ~]# pwd >> pwd.log
[root@li1544-92 ~]# cat pwd.log 
/root
/root

在之前也说过,若命令执行错误,标准错误输出也给出打印,若想要将标准错误输出不在屏幕输出,则需要使用重定向技术,将标准错误输出重定向到标准输出 2>&1

&是用来告诉系统1这里指的是标准输出,而不是文件
在这里插入图片描述
下面例子展示了如何将错误信息也重定向到文件。

将正确输出和错误输出都重定向到pwd.log日志中。

[root@li1544-92 ~]# pdwd > pwd.log 2>&1
[root@li1544-92 ~]# cat pwd.log 
-bash: pdwd: command not found
command > /dev/null 2>&1

通过以上三部分介绍该语句的函数就是将标准输出和标准错误输出重定向到伪设备/dev/null,它的作用就是执行某个命令将不会有任何日志输出

例如:

第二个&是后台运行,这样arping命令就不会干扰我们的继续工作。
[root@li1544-92 ~]# arping 192.168.1.1 > /dev/null 2>&1 &
[2] 20212

非法命令,屏幕没有提示信息
[root@li1544-92 ~]# arpingaaa 192.168.1.1 > /dev/null 2>&1 &
[2] 20212

查看后台影响任务状态信息
[root@li1544-92 ~]# jobs -l
[1]- 20229 Running                 arping 192.168.1.1 > /dev/null 2>&1 &
[2]+ 20232 Exit 127                arpingaaa 192.168.1.1 > /dev/null 2>&1

以上命令不管执行正确还是非法命令 屏幕都将不会有任何信息提示,也就是说它们将没有任务日志输出。

参考资料:

https://en.wikipedia.org/wiki/Device_file#Pseudo-devices
https://stackoverflow.com/questions/818255/in-the-shell-what-does-21-mean

  • 13
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值