在Linux中所謂的標準輸入(stdin 代碼為 0)是指使用者透過鍵盤輸入命令至電腦上,這些輸入命令經過執行後會將結果顯示在螢幕的終端機上,如果執行結果正常的話,稱為標準輸出(stdout代碼為1)。如果執行結果發生錯誤,錯誤訊息會被送到標準錯誤輸出,稱為標準錯誤(stderr代碼為2)。
而所謂的重定向即是透過 >、>>、< 重定向符號和代碼數字,更改預設行為(所謂預設行為是指使用鍵盤和螢幕作為輸入與輸出介面),將電腦處理執行後的輸出重新導向至檔案或文件內,或是將檔案內容作為輸入的來源。透過重定向可以將輸入改為從檔案讀取,將輸出重定向到檔案中,或者將錯誤訊息捨棄不顯示在螢幕上。
以下是重定向的詳細說明和使用範例介紹
• 標準輸入(stdin,standard input,channel/stream 0):這是從鍵盤讀取數據的輸入流。
• 標準輸出(stdout,standard output,channel/stream 1):這是向螢幕輸出數據的輸出流。
• 標準錯誤(stderr,standard error output,channel/stream 2):這是向螢幕輸出錯誤訊息的輸出流。
>:將標準輸出重定向到文件,將指令執行結果輸出至文件。
Command1 > output.txt
將 command1的指令執行結果輸出寫入到output.txt文件中,如果文件不存在則新建,如果存在則覆蓋。
>>:將標準輸出結果附加到文件中,把程式的輸出放在原本的檔案內容之後,不覆蓋原有資料。
command1 >> output.txt
將 command1的指令執行結果輸出增加到output.txt文件的檔案內容之後,不覆蓋原有資料。
<:將文件作為標準輸入,將指定的檔案設定為程式的標準輸入,從檔案中讀取資料。
command2 < input.txt
將 input.txt文件的內容作為command2的輸入,取得 input.txt 檔案中的資料,並且顯示在螢幕。
2>:將標準錯誤重定向到文件
command 2> error.txt
將 command的錯誤消息寫入error.txt文件。
2>>:將標準錯誤附加到文件
command 2>> error.txt
將 command的錯誤訊息增加到error.txt文件的檔案內容之後,不覆蓋原有資料。
2>&1:將標準錯誤輸出(stderr,編號 2)重定向到與標準輸出(stdout,編號 1),將錯誤訊息一併輸出到與正常訊息相同的位置,將一個命令的正常輸出和錯誤輸出都保存到一個文件中,便於處理資料內容。
command > output.log 2>&1
將標準輸出和標準錯誤輸出都寫入到名為 output.log 的文件中。
範例用法:
ls > filelist.txt
cat < fileinput.txt
command 2> error.txt
mycommand > output.txt 2>&1
上述命令將mycommand標準錯誤(2)重定向到與標準輸出(1)相同的地方 output.txt 文件。這樣可以在 output.txt 文件中找到 mycommand 的正常輸出和錯誤消息,可將錯誤消息與正常輸出合併處理或記錄。