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