Linux下" >/dev/null 2>&1 "相關知識說明

haoge0205發表於2019-08-27

一些終端命令或者程式中有">/dev/null 2>&1 "出現

0:表示鍵盤輸入(stdin)

1:表示標準輸出(stdout),系統預設是1 
2:表示錯誤輸出(stderr)

command >/dev/null 2>&1 &  == command 1>/dev/null 2>&1 &

1)command:表示shell命令或者為一個可執行程式
2)>:表示重定向到哪裡 
3)/dev/null:表示Linux的空裝置檔案 
4)2:表示標準錯誤輸出
5)&1:&表示等同於的意思,2>&1,表示2的輸出重定向等於於1
6)&:表示後臺執行,即這條指令執行在後臺執行

 

1>/dev/null:表示標準輸出重定向到空裝置檔案,也就是不輸出任何資訊到終端,不顯示任何資訊。
2>&1:表示標準錯誤輸出重定向等同於標準輸出,因為之前標準輸出已經重定向到了空裝置檔案,所以標準錯誤輸出也重定向到空裝置檔案。


這條命令的意思就是在後臺執行這個程式,並將錯誤輸出2重定向到標準輸出1,然後將標準輸出1全部放到/dev/null檔案,也就是清空.
所以可以看出" >/dev/null 2>&1 "常用來避免shell命令或者程式等執行中有內容輸出。

I/O重定向

重定向  的作用是把一個命令的輸出結果傳送到另一個地方。

例如,使用   cat  命令檢視一個檔案,檔案內容會被列印到螢幕 :

$ cat foo.txtfoo
bar
baz

此時,螢幕就是命令的標準輸出( standard output 【stdout】)位置。

我們可以把檔案內容傳送到別的地方,例如,重定向到   output.txt  檔案中 :

$ cat foo.txt > output.txt$ cat output.txtfoo
bar
baz

其中第一個   cat  使用   >  stdout  的位置改為了另一個檔案。

再看一個例子,檢視一個不存在的檔案:

$ cat nop.txt > output.txtcat: nop.txt: No such file or directory

這裡的錯誤提示資訊為什麼顯示到了螢幕,而不是傳送到   output.txt  呢?

這就涉及到了另一個位置:標準錯誤輸出 standard error 【stderr】

$ cat nop.txt > output.txt

這個命令是把   stdout  定位到了檔案,而沒有定義   stderr  的位置,所以錯誤資訊顯示到了預設的位置:螢幕。

檔案描述符

Linux 中一切皆檔案,每個檔案都有一個檔案描述符,值是個正整數。

所以,標準輸出 stdout與 標準錯誤輸出 stderr也有自己的檔案描述符:

  • stdout 為 1

  • stderr 為 2

綜合

$ cat foo.txt > output.txt

實際上就是這樣的:

$ cat foo.txt 1> output.txt

就是把   stdout  指向了   output.txt>  是   1>  的簡寫。

所以重定向錯誤資訊的輸出就應該是這樣的:

$ cat nop.txt 2> error.txt$ cat error.txtcat: nop.txt: No such file or directory

連個命令連起來就是:

$ cat foo.txt > output.txt 2> error.txt

同時重定向了標準輸出 stdout與標準錯誤輸出 stderr

回顧開頭的那個命令:

ls foo > /dev/null 2>&1

現在基本上已經可以理解了:

  • stdout 重定向到   /dev/null

  • stderr 重定向到   &1

/dev/null  是空裝置的意思,重定向到空裝置,也就是輸出資訊不要了。

&1 表示:檔案描述符1 的值,也就是標準輸出的值,那麼  2>&1 就是 標準錯誤輸出 與 標準輸出 一樣,也是重定向到空裝置。

所以這個命令的意思是:正確資訊和錯誤資訊都不顯示了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-2655080/,如需轉載,請註明出處,否則將追究法律責任。

相關文章