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等作者;

posted @ 2020-08-26 14:33  Eric-Shen  阅读(2833)  评论(0编辑  收藏  举报