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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM