常常關注linux腳本的人,必定看到過 2>&1 這樣的用法,最初必定不明白其中的含義以及爲何是這樣的一種組合。昨天偶然間再次看到了這個 2>&1 的寫法,遂下決心搞明白其中的含義。linux
其實要弄清楚 2>&1 的含義,首先應當知道linux中有三種標準輸入輸出,分別是STDIN,STDOUT,STDERR,對應的數字是0,1,2。STDIN就是標準輸入,默認從鍵盤讀取信息;STDOUT是標準輸出,默認將輸出結果輸出至終端,也就是顯示器之類的東西;STDERR是標準的錯誤信息,默認也會顯示在終端上。因爲STDOUT與STDERR都會默認顯示在終端上,爲了區分兩者的信息,就有了編號的0,1,2的定義,用1表示STDOUT,2表示STDERR。less
下面舉個例子:以rhce中的例子爲例。test
一、在系統中建立一個普通用戶test;登錄
二、以普通用戶登陸,或者以root登陸 su -test 切換至普通用戶test;後臺
三、執行 find /etc -name passwd 命令,默認會將命令的執行結果(STDOUT)與錯誤信息(STDERR)都輸出至終端顯示器。終端
四、體驗一下編號1,2的做用,find /etc -name passwd >find.out 2>find.err,這裏會將STDOUT與STDERR分別存放至find.out和find.err中,該命令也能夠寫成下面三種形式,你們能夠體會一下編號的意義。分頁
find /etc -name passwd 1>find.out 2>find.err腳本
find /etc -name passwd 2>find.err >find.out重定向
find /etc -name passwd 2>find.err 1>find.out文件
我我的理解就是find /etc -name passwd的命令的執行結果輸出正確的輸出(STDOUT)被1接收,錯誤的信息(STDERR)被2接收。
五、若要將全部的輸出及錯誤信息都顯示出來,能夠用&表示所有1和2的信息,例如:
find /etc -name passwd &>find.all
六、有時候但願將錯誤的信息從新定向到輸出,就是將2的結果重定向至1中就有了"2>1"這樣的思路,若是按照上面的寫法,系統會默認將錯誤的信息(STDERR)2重定向到一個名字爲1的文件中,而非所想的(STDOUT)中。所以須要加&進行區分。就有了 2>&1 這樣的用法,舉例:
find /etc -name passwd 2>&1 |less
七、有時候還能看到這樣的用法:
find /etc -name passwd &2>&1 |less
這裏能夠分解成
find /etc -name passwd & 表示前面的命令放到後臺執行。
2>&1 |less 表示將錯誤信息重定向至標準輸出,並用less進行分頁顯示。