Linux 中如何將輸出和錯誤重定向到 /dev/null
假如有這樣一個場景:我們運行了一個 Linux 命令,它有很多的輸出信息,但是我們并不需要這些輸出信息。
或者,我們在腳本中使用了某些 Linux 命令,并且不希望它在終端屏幕上顯示任何輸出或錯誤。
對于這種情況,我們可以利用輸出和錯誤重定向,將它們發送到 /dev/null。
將標準輸出發送到 /dev/null 的命令如下:
將錯誤發送到 /dev/null 的命令如下:
將輸出和錯誤發送到 /dev/null:
/dev/null 可以被認為是 Linux 文件系統中的一個黑洞,無論你往里面仍什么,都不會看到有任何回應。
下面我們來詳細了解一下。
將輸出重定向到 /dev/null
我們在終端中輸入一個命令,可以被認為就是我們的輸入(假設我們執行了 sudo apt update)。
這樣,我們給了我們的系統輸入,然后系統會顯示正在更新的存儲庫以及現在可以更新的包等過程信息,如下圖所示:
也就是說,系統給出的輸出信息,顯示的是它對命令的操作。下面是每個標準數據流的編號:
- 標準輸入(stdin)指定為 0;
- 標準輸出(stdout)為 1;
- 標準錯誤(stderr)為 2。
所以,將標準輸出重定向到 /dev/null 的命令為:
比如,我們使用 find 命令,該命令會顯示一部分錯誤的輸出信息,然后我將標準輸出重定向到 /dev/null,但是對錯誤信息不做任何處理,仍讓其正常顯示,如下圖所示:
從上圖可以看到,當我沒有將輸出重定向時,其顯示的輸出信息為1807行。然后當重定向輸出時,它只顯示錯誤信息。
將錯誤重定向到 /dev/null
我們前文提到了,錯誤信息的數據流編號為 2,所以只需將上面命令的數據流編號改為 2,就可以將錯誤信息重定向到 /dev/null。
上述命令中的大于號 > 用于重定向數據流,數字 2 表示在標準錯誤時將其重定向。
比如,我們在 Ubuntu 上運行命令 sudo dnf updte,當然會·報錯。然后在第二個窗口中,將錯誤進行重定向,如下圖所示:
將輸出和錯誤均重定向到 /dev/null 下面我們來看一下如何將輸出和錯誤都重定向到 /dev/null。該任務的基本語法如下:
或者也可以使用精簡的版本:
作為演示,我們使用 find 命令在 etc 目錄中查找文件。在這個路徑下訪問某些子目錄需要有 sudo 權限才可以,如果沒有使用 sudo,就會拋出一個錯誤,如下圖所示:
以上就是本次分享全部內容。如果想了解更多關于重定向數據流的信息,可以閱讀我們之前的文章:Linux中的輸入、輸出和錯誤重定向