1. 程式人生 > >Linux技術學習:Io重定向 Redirection 詳解

Linux技術學習:Io重定向 Redirection 詳解

雲計算 Io重定向 Redirection

文件描述符在bash中比較少用,從0開始用戶表示進行的數據流,0表示標準輸入,1表示標準輸出,2表示標註錯誤輸出,其他從3開始。最為常用的場景是將錯誤消息輸出到某個文件,可以加上2>file到我們的命令中。

我們來看下面一個腳本的例子:

command > logfile 2>&1 &

  >logfile,表示command的標準輸出重定向至文件logfile中,2>&1,匹配n>&m,表示文件描述字2(command的標準錯誤輸出)將copy一份采用文件描述字1(即標準輸出),由於標準輸出已經重定向logfile,這份copy也見將重定向至文件lofgile。我們可以用“abcd > logfile 2>&1 &”來驗證這個效果。最後&表示後臺運行的方式。這樣命令表示在後臺運行command,而它的標準輸出和錯誤輸出均重定向到logfile文件中。下面可達到類似的效果:

command 2>&1 | tee logfile &

錯誤輸出同樣適用標準輸出,通過pipe方式,見他們作為輸入執行tee logfile。tee命令將它的標準輸入copy至他的標準標準輸出以及參數所帶的文件中。和上面的命令不一眼這裏即會在stdout和logfile中同時輸出。

其他文件描述字的重定向,例如<&n,通常用於從多個文件中讀入或者寫出。

<&- ,表示強制關閉標準輸入>&- ,表示強制關閉標準輸出1> ,等同於> 0< ,等同於<linux shell數據重定向(輸入重定向與輸出重定向)詳細分析,在了解重定向之前,我們先來看看linux 的文件描述符。

linux文件描述符:可以理解為linux跟蹤打開文件,而分配的一個數字,這個數字有點類似C語言操作文件時候的句柄,通過句柄就可以實現文件的讀寫操作。 用戶可以自定義文件描述符範圍是:3-num,這個最大數字,跟用戶的:ulimit –n 定義數字有關系,不能超過最大值。

linux啟動後,會默認打開3個文件描述符,分別是:標準輸入standard input 0,正確輸出standard output 1,錯誤輸出:error output 2

以後打開文件後。新增文件綁定描述符可以依次增加。 一條shell命令執行,都會繼承父進程的文件描述符。因此,所有運行的shell命令,都會有默認3個文件描述符。

一個命令執行了:

先有一個輸入:輸入可以從鍵盤,也可以從文件得到

命令執行完成:成功了,會把成功結果輸出到屏幕:standard output默認是屏幕

命令執行有錯誤:會把錯誤也輸出到屏幕上面:standard error默認也是指的屏幕

文件輸入輸出由追蹤為一個給定的進程所有打開文件的整數句柄來完成。這些數字值就是文件描述符。最為人們所知的文件米描述符是stdin, stdout和stderr,文件描述符的數字分別是0,1和2。這些數字和各自的設備是保留的。一個命令執行前,先會準備好所有輸入輸出,默認分別綁定(stdin,stdout,stderr),如果這個時候出現錯誤,命令將終止,不會執行。命令解析過程,可以參考:Linux Shell 通配符、元字符、轉義符使用實例介紹

這些默認的輸出,輸入都是linux系統內定的,我們在使用過程中,有時候並不希望執行結果輸出到屏幕。我想輸出到文件或其它設備。這個時候我們就需要進行輸出重定向了。

Linux技術學習:Io重定向 Redirection 詳解