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