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 來重定向錯誤。