Linux——/dev/null详解
一、 /dev/null
/dev/null属于字符特殊文件,它属于空设备,是一个特殊的设备文件,它会丢弃一切写入其中的数据,写入它的内容都会永远丢失,而且没有任何可以读取的内容;就像是黑洞一样。
我们用file命令查看下,说明类型是字符特殊文件。
[root@localhost ~]# file /dev/null /dev/null: character special
所以我们一般会把/dev/null当成一个垃圾站,不要的东西丢进去。比如来清除文件中的内容。
示例:
[root@localhost oa]# ls >> a.txt [root@localhost oa]# cat a.txt a.txt passwd time.sh [root@localhost oa]# cat /dev/null > a.txt #把空重定向写到a.txt,以前的内容被覆盖了; [root@localhost oa]# cat a.txt
也可以把一个文件内容读到/dev/null里面。不过当文件不存在的时候回报错。我们可以在前面加上数字2。
[root@localhost oa]# cat test.txt >/dev/null cat: test.txt: 没有那个文件或目录 [root@localhost oa]# cat test.txt 2>/dev/null #把文件内容重定向写到空,以前内容被丢弃了;
一般标准输出和标准错误输出都是屏幕,因此错误信息还是会在屏幕上输出。 这个数字代表的是标准输出。
0:表示标准输入流(stdin),
1:表示标准输出(stdout)。
2:表示标准错误输出(stderr)
上面就是将标准错误( 2 )输出重定向到/dev/null,所以屏幕上不会再显示错误提示了。
二、 >/dev/null 2>&1
命令: >/dev/null 2> &1 也就是命令:1>/dev/null 2> &1
这条命令的意思是将标准输出和标准错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃.
那么下command > filename 2>filename 与command > filename 2>&1 有什么不同的地方?
首先 command > file 2>file 的意思是将命令所产生的标准输出信息,和标准错误的输出信息送到file中,command > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道.
而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容
- > 代表重定向到哪里,例如:echo "123" > /home/123.txt
- /dev/null 代表空设备文件
- 2> 表示stderr标准错误输出
- & 表示 等同于的意思,标准错误输出 重定向到 标准输出
- 1 表示stdout标准输出,系统默认值是1,所以 >/dev/null 2>&1也可以写成“1> /dev/null 2> &1”
三、&>
&> 等于 2>&1 混合输出的意思;
所以上文等于&>/dev/null;
参考:https://blog.csdn.net/heybeaman/article/details/89500337等作者;