Linux 檔案重定向

zhuachen發表於2010-04-29

在 Linux 系統中:
標準輸入(stdin)預設為鍵盤輸入;標準輸出(stdout)預設為螢幕輸出;標準錯誤輸出(stderr)預設也是輸出到螢幕。
Linux Shell 環境中用 "" 表示標準輸出

0、1、2分別表示: 標準輸入,標準輸出,標準錯誤資訊輸出

如 2>a.txt 表示將錯誤資訊輸出到檔案a.txt中 。
還可以在這三個標準輸入、輸出之間實現重定向,

如將錯誤資訊重定向到標準輸出,可以用 2>&1 來實現。

***************************************************************************
常用檔案重定向命令

command > filename 把標準輸出重定向到一個新檔案中
command 1 > fielname 把標準輸出重定向到一個檔案中
command 2 > filename 把標準錯誤重定向到一個檔案中
command > filename 2>&1 把標準輸出和標準錯誤一起重定向到一個檔案中
command &> filename 把標準輸出和標準錯誤一起重定向到一個檔案中
command >& filename 把標準輸出和標準錯誤一起重定向到一個檔案中

"&"在這裡代表標準輸出和標準錯誤,這裡無論是正常輸出還是錯誤資訊都寫到filename檔案中。

command >> filename 把標準輸出重定向到一個檔案中(追加)
command 2 >> filename 把標準輸出重定向到一個檔案中(追加)
command >> filename 2>&1 把標準輸出和標準錯誤一起重定向到一個檔案中(追加)

command < filename >filename2 把command命令以filename檔案作為標準輸入,以filename2檔案作為標準輸出
command < filename 把command命令以filename檔案作為標準輸入
command << delimiter 把從標準輸入中讀入,直至遇到delimiter分界符

command command >&m 把標準輸出重定向到檔案描述符m中
command command >&- 關閉標準輸出
command ncommand n>&- 表示將 n 號輸出關閉

***************************************************************************
Linux下還有一個特殊的檔案/dev/null,它就像一個無底洞,所有重定向到它的資訊都會消失得無影無蹤。
這一點非常有用,當我們不需要回顯程式的所有資訊時,就可以將輸出重定向到/dev/null。

如果想把正常輸出和錯誤資訊都不顯示,則要把標準輸出和標準錯誤都重定向到/dev/null, 例如:
# ls 1>/dev/null 2>/dev/null

還有一種做法是將錯誤重定向到標準輸出,然後再重定向到 /dev/null,例如:
# ls >/dev/null 2>&1

注意:此處的順序不能更改,否則達不到想要的效果,此時先將標準輸出重定向到 /dev/null,然後將標準錯誤重定向到標準輸出,
由於標準輸出已經重定向到了/dev/null,因此標準錯誤也會重定向到/dev/null 。

>log 表示把標準輸出重新定向到檔案log中
>& log 表示把標準輸出和錯誤輸出產生的任何資訊都定向到檔案log中,相當於 >log 2>&1

>>log 將命令執行的結果追加到指定的檔案log中。
>>log 2>&1 將命令執行時螢幕上所產生的任何資訊追加到指定的檔案log中。

將所有的輸出都儲存到檔案all_result中:
$ find /home -name lost* > all_result 2>& 1
先將標準錯誤輸出也重定向到標準輸出中,再將標準輸出重定向到 all_result 這個檔案中。
還有一種簡便的寫法如下:
$ find /home -name lost* >& all_result

看看以下命令會有什麼結果?
$ find /home -name lost* > all_result 1>& 2
$ find /home -name lost* 2> all_result 1>& 2
$ find /home -name lost* 2>& 1 > all_result

[@more@]

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

相關文章