Linux 輸入輸出重定向
什麼是重定向?
重定向是 Linux 中的一項功能,因此在執行命令時,你可以更改標準輸入/輸出裝置。任何 Linux 命令的基本工作流程都是它接受輸入並提供輸出。
- 標準輸入(stdin)裝置是鍵盤。
- 標準輸出(標準輸出)裝置是螢幕。
通過重定向,可以更改上述標準輸入/輸出。
輸出重定向
>
符號用於輸出(STDOUT)重定向。
例:
ls -al > listings
這裡命令 ls -al
的輸出被重定向到檔案 listing
而不是你的螢幕。
注意:在將命令輸出重定向到檔案時使用正確的檔名。如果存在具有相同名稱的現有檔案,則重定向命令將刪除該檔案的內容,檔案被覆蓋。
如果你不希望覆蓋檔案但想要向現有檔案新增內容,則應使用 > >
操作符。
你可以將標準輸出重定向到檔案,還可以重定向到裝置!
$ cat music.mp3 > /dev/audio
cat
命令讀取檔案 music.mp3
並將輸出傳送到作為音訊裝置的 /dev/audio
。如果 PC 中的聲音配置正確,此命令將播放 music.mp3
檔案
輸入重定向
<
符號用於輸入(STDIN)重定向
比如,Linux 中的郵件程式可以幫助你從終端傳送電子郵件。
Mail -s "Subject" to-address < Filename
你可以使用標準裝置鍵盤鍵入電子郵件的內容。但是,如果要將檔案附加到電子郵件,則可以使用上面格式的輸入重定向運算子。
這會將檔案附加到電子郵件中,然後將其傳送給收件人。
上面的例子很簡單。讓我們看一下使用檔案描述符的一些先進的重定向技術。
檔案描述符(FD)
在 Linux/Unix 中,一切都是檔案。常規檔案、目錄、甚至裝置都是檔案。每個檔案都有一個稱為檔案描述符(FD)的關聯編號。
你的螢幕還有一個檔案描述符。執行程式時,輸出將被髮送到螢幕的檔案描述符,你可以在顯示器上看到程式輸出。如果輸出傳送到印表機的檔案描述符,則程式輸出將被列印。
錯誤重定向
無論何時在終端執行程式/命令,都會開啟 3 個檔案,即標準輸入、標準輸出、標準錯誤**。**
執行程式時,這些檔案始終存在。如前所述,檔案描述符與這些檔案中的每一個相關聯。
檔案 | 檔案描述符 |
---|---|
標準輸入 STDIN | 0 |
標準輸出 STDOUT | 1 |
標準錯誤 STDERR | 2 |
預設情況下,錯誤流顯示在螢幕上。錯誤重定向將錯誤路由到螢幕以外的檔案。
為什麼錯誤重定向?
錯誤重定向是 Unix/Linux 的一個非常流行的功能。
UNIX 的使用者經常會認為許多命令會給你帶來大量的錯誤。
- 例如,在搜尋檔案時,通常會獲得許可權拒絕錯誤。這些錯誤通常無助於搜尋特定檔案的人。
- 執行 shell 指令碼時,通常不希望錯誤訊息使正常的程式輸出變得混亂。
解決方案是將錯誤訊息重定向到檔案。
例 1
$ myprogram 2 > errorsfile
上面我們正在執行一個名為 myprogram
的程式,標準錯誤的檔案描述符是 2
。使用 2 >
我們將錯誤輸出重定向到名為 errorfile
的檔案
因此,程式輸出不會再有出錯資訊。
例 2
這是另一個使用 find
語句的例子 -
find . -name 'my*' 2>error.log
使用 find
命令,我們可以來搜尋當前目錄下檔名以 my
開頭的檔案。
錯誤資訊將被重定向到檔案 error.log
。
例 3
讓我們看一個更復雜的例子,
伺服器管理員經常列出目錄並將錯誤和標準輸出儲存到檔案中,以後可以進行處理。以下是命令。
ls Documents ABC> dirlist 2>&1
這裡,
- 將一個檔案的輸出寫入另一個檔案的輸入。
2 >&1
表示錯誤資訊被重定向到 STDOUT 的目標(這是檔案dirlist
) - 我們將錯誤輸出重定向到標準輸出,而標準輸出又被重定向到檔案轉向器。因此,輸出都寫入檔案
dirlist
複習
- Linux 中的每個檔案都有一個與之關聯的相應檔案描述符
- 鍵盤是標準輸入裝置,而螢幕是標準輸出裝置
>
是輸出重定向運算子。>>
將輸出附加到現有檔案<
是輸入重定向運算子>&
將一個檔案的輸出重定向到另一個檔案。- 你可以使用相應的檔案描述符
2
來重定向錯誤。