1、文件描述符
Linux系統預留可三個文件描述符:0、1和2,他們的意義如下所示:
0——標準輸入(stdin)
1——標準輸出(stdout)
2——標準錯誤(stderr)
標準輸出——stdout
假設:在當前目錄下,有且只有一個文件名稱爲123.txt的文件,這時我們運行這個命令【ls 123.txt】,就會獲得一個標準輸出stdout的輸出結果:123.txt
錯誤輸出——stderr
按照上面的假設,我們運行另一條命令【ls abc.txt】,這樣我們就會獲得一個標準錯誤stderr的輸出結果“ls:無法訪問abc.txt:沒有那個文件或目錄”。
2、重定向
重定向的符號有兩個:>或>>,兩者的區別是:前者會先清空文件,然後再寫入內容,後者會將重定向的內容追加到現有文件的尾部。舉個例子:
(a)重定向標準輸出stdout
如上圖所示,對比沒有添加重定向的操作,這條命令在使用之後並沒有將123.txt打印到屏幕。在緊接的cat操作後,可以發現本來應該被輸出的內容被記錄到stdout.txt中。
(b)重定向標準輸出
(c)可以將stderr單獨定向到一個文件,stdout重定向到另一個文件
cmd 2> stderr.txt 1>stdout.txt
(d)也可以將stderr和stdout重定向到同一個文件
cmd > output.txt 2>&1
或採用下面的方法,可以少寫幾個字,能達到同樣的效果
cmd &> output.txt
cmd >& output.txt #兩個表達式效果一樣的
3、Linux特殊文件
/dev/null是一個特殊的設備文件,這個文件接收到任何數據都會被丟棄。因此,null這個設備通常也被稱爲位桶(bit bucket)或黑洞。
所以,2>/dev/null的意思就是將標準錯誤stderr刪掉。
原文地址:https://www.zhihu.com/question/53295083