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