Shell命令中的/dev/null 与2>&1

在Unix/Linux系统中有三个特别文件,代表着三种不同的输出流:
1.stdin
在/dev/stdin 上,在shell中的代号为0,代表了所有的标准输入。一般指的是来自于键盘的输入。
2.stdout
在/dev/stdout上,在shell中代号为1,代表了所有的的标准输出,一般是在终端上的输出。
3.stderr
在/dev/stderr上,在shell中代号为2,但是却是表示的所有错误的输出,同样也是在终端上的输出。
所以现在可以简单的解释一下标题中所提到的那些字符:
1.> 这就是一个所谓的重定向符,表示重定向到哪里,比如说echo test > /root/Desktop test.txt就是把echo的输出当作输入到桌面上的test.txt文件上。
2.&简单的说,这个符号就是表示等同于的意思,2>&1也就是表示错误输出等同于标准输出(之前已经解释过标号了)
3./dev/null这个目录在很多教材里都解释为空设备,也可以理解为这个目录就像个黑洞一样丢进去就不见了。

通常我们在linux初期学习的时候都会碰到这样问题:
1./dev/null 2>&1表示的是什么
首先第一步,/dev/null就可以将标准输出流重定向到空设备,所以也就是说在终端上并没有什么输出。
接下来错误输出等同于标准输出,但是已经重定向到了空设备,也就是标准错误输出也被重定向到了空设备上。
简而言之,这条命令导致标准输出和错误输出都定向到了空设备,所以在终端上并无输出。

2.2>&1 >/dev/null 表示的是什么
这条命令看起来和上面的命令并无太大区别,但是结果却完全不一样。其实命令行的重定向是在运行之前就已经准备好了的,解释的顺序就是从左到右,所以说应该是在2>&1时,错误信息2已经被打印到屏幕上,后头紧跟着的其实是1>/dev/null,所以就是说在执行完错误输出当作标准输出显示之后,标准输出就被丢到了空设备里头。所以这个命令的最终结果就是输出了所有错误的信息,而正确的信息被屏蔽掉了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值