如何理解">/dev/null 2>&1"

来源:互联网 发布:kali linux入门教程 编辑:程序博客网 时间:2024/05/17 20:30

如何理解">/dev/null 2>&1",可以拆开来理解:

> :重定向,例如 echo "Hello" > /root/1.txt
1> stdout:表示标准输出,默认是1
2> stderr:表示标准错误
& :表示等同于,2>&1,表示标准错误重定向,等同于标准输出

/dev/null :表示空设置文件,类似于Win系统中的垃圾箱

因此,“>/dev/null 2>&1”也可以写成“1>/dev/null 2>&1”
那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,就是不显示任何信息。
2>&1 :接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

比如说:

  • command > file 2>file
  • command > file 2>&1

相同点:上面两个命令都可是实现将执行command后的,标准及错误输出重定向到file文件中。

不同点: I/O效率上的差异
command 1>file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file的管道。
command 1>file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。从I/O效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,最多的时候我们会command 1>file 2>&1 这样的写法, 或 "command >file 2&1"


原文地址:http://www.linuxidc.com/Linux/2014-08/105203.htm


0 0
原创粉丝点击