詳細理解 dev null 2 1

2021-09-08 11:59:57 字數 1491 閱讀 5712

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命令或者程式等執行中有內容輸出。

重定向,例如 echo "hello" > /root/1.txt

相同點:上面兩個命令都可是實現將執行command後的,標準及錯誤輸出重定向到file檔案中。

不同點: i/o效率上的差異

command 1>file 2>file 這樣的寫法,stdout和stderr都直接送到file中, file會被開啟兩次,這樣stdout和stderr會互相覆蓋,這樣寫相當使用了fd1和fd2兩個同時去搶占file的管道。

command 1>file 2>&1 這條命令就將stdout直接送向file, stderr 繼承了fd1管道後,再被送往file,此時,file只被開啟了一次,也只使用了乙個管道fd1,它包括了stdout和stderr的內容。從i/o 效率上,前一條命令的效率要比後面一條的命令效率要低,所以在編寫shell指令碼的時候,最多的時候我們會command 1>file 2>&1 這樣的寫法, 或 "command >file 2&1"

注意:你要是寫成這樣:command >/dev/null 2>&1 &, 則第乙個 > 的前面可以帶有空格;但是如果你寫成這樣:command 1>/dev/null 2>&1 &, 則第乙個 > 的前面最好不帶有空格,不然1會被當成command的執行引數。 但第乙個 > 的後面可帶也可不帶空格。第二個 > 的左右均不能帶有任何空格。因此比較保險的方法是所有 > 的前後都不帶有空格,準沒錯。

相關 dev null 2 1 詳解

用 dev null 2 1 這樣的寫法.這條命令的意思是將標準輸出和錯誤輸出全部重定向到 dev null中,也就是將產生的所有資訊丟棄.下面就為大家來說一下,command file 2 file與command file 2 1有什麼不同的地方.首先command file 2 file的意思...

相關 dev null 2 1 詳解

用 dev null 2 1 這樣的寫法.這條命令的意思是將標準輸出和錯誤輸出全部重定向到 dev null中,也就是將產生的所有資訊丟棄.下面就為大家來說一下,command file 2 file與command file 2 1有什麼不同的地方.首先command file 2 file的意思...

dev null 2 1 什麼意思

在unix中,標準輸入裝置 stdin是0,stdout 是1,stderr是 2。dev null 2 1這樣的寫法意思是將標準輸出和錯誤輸出全部重定向到 dev null中,也就是將產生的所有資訊丟棄.下面說說command file 2 file與command file 2 1有什麼不同的地...