Skip to content
On this page

Linux中的輸入和輸出

在Linux中,輸入和輸出是允許您與系統交互並處理數據的基本概念。瞭解Linux環境中輸入和輸出的工作方式對於在終端中有效工作至關重要。

標準輸入、輸出和錯誤

Linux 中有三個標準流:STDIN(標準輸入)、STDOUT(標準輸出)和 STDERR(標準錯誤)。這些流用於處理運行程序和命令時的輸入、輸出和錯誤消息。

  • STDIN 是標準輸入流,用於從鍵盤或另一個程序讀取數據。數字 0 表示 STDIN 流。
  • STDOUT 是標準輸出流,用於顯示程序或命令的輸出。數字 1 表示 STDOUT 流。
  • STDERR 是標準錯誤流,用於顯示錯誤消息和診斷信息。數字 2 表示 STDERR 流。

默認情況下,STDIN 連接到鍵盤,而 STDOUTSTDERR 連接到終端。這意味着當您在 shell 中運行命令時,輸入來自鍵盤,輸出和錯誤消息顯示在終端上。

一個良好的實踐是將錯誤消息與常規輸出分開,以便您可以輕鬆識別和處理錯誤。但有些程序可能不遵循這種約定,錯誤消息可能與常規輸出混合在一起。

輸入重定向

在Linux中,輸入重定向允許您控制輸入來自何處。默認情況下,當您在shell中運行命令時,STDIN連接到鍵盤。

輸入重定向允許您更改命令讀取其輸入的位置。您可以將輸入重定向爲來自文件而不是鍵盤。

要將輸入重定向爲來自文件,您可以使用小於符號(<)後跟文件名。例如,要從名爲input.txt的文件中讀取輸入,您可以使用以下命令:

sh
command < input.txt

以下是實際場景中輸入重定向的工作原理示例。假設您有一個名爲data.txt的文件,其中包含一組名稱,您想要使用wc命令計算文件中名稱的數量。您可以將輸入重定向爲來自文件,而不是在終端中手動輸入每個名稱。通過執行命令wc -l < data.txtwc命令將讀取data.txt的內容作爲輸入並計算行數,這代表文件中名稱的數量。這樣,您可以節省時間和精力,而不必手動輸入名稱。data.txt文件的內容可能如下所示:

John Doe
Jane Smith
Michael Johnson
Emily Brown
William Davis

在這種情況下,文件包含了一個包含5個名字的列表,每個名字佔據一行。通過將輸入重定向來自文件,wc 命令將計算文件中的行數並顯示結果。

雙小於號符號 (<<) 用於 here document,它允許您與命令進行交互式輸入。例如:

sh
command << EOF
This is some input.
EOF

在這種情況下,輸入在 <<EOF 標記之間進行交互式提供。當您需要向命令提供多行輸入時,這可能很有用。

輸出重定向

輸出重定向允許您更改命令發送其輸出的位置。您可以將輸出重定向到文件而不是終端。

要將輸出重定向到文件,您可以使用大於號符號(>)後跟文件名。例如,要將輸出重定向到名爲 output.txt 的文件,您可以使用以下命令:

sh
command > output.txt

注意:>1> 的簡化形式,它將 STDOUT 重定向到文件。如果要將 STDERR 重定向到文件,可以使用 2>

如果要將輸出附加到現有文件而不是覆蓋它,可以使用雙大於號符號(>>)而不是單大於號符號(>)。例如:

sh
command >> output.txt

和符號(&)指的是文件描述符。在輸出重定向的上下文中,1 代表 STDOUT2 代表 STDERR。通過將文件描述符與重定向符號結合使用,您可以將 STDOUTSTDERR 都重定向到同一個文件。例如:

sh
command > output.txt 2>&1

讓我們分解一下命令:

  • command 是您要運行的命令。
  • >(與 1> 相同)將 STDOUT 流重定向到文件 output.txt
  • 2>STDERR 流重定向到某個地方。
  • &1 指的是文件描述符 1,即 STDOUT

通過結合使用 2>&1,你可以將 STDERR 重定向到與 STDOUT 相同的位置,這種情況下是文件 output.txt

結合輸入和輸出重定向

您可以結合輸入和輸出重定向,同時從文件中讀取內容並將內容寫入文件。例如:

sh
command < input.txt > output.txt

通過使用輸入和輸出重定向,您可以控制輸入來自何處以及輸出去向何處,使您的 shell 命令更加靈活和強大。

使用管道連接命令

管道是 Linux 中的一個強大功能,允許您連接多個命令並創建複雜的命令序列。在終端中使用管道可以極大地提高您的生產力和效率。

管道由豎線符號 | 表示。它允許將一個命令的輸出重定向爲另一個命令的輸入。這使您能夠將多個命令鏈接在一起,並在它們之間流動的數據上執行操作。

例如,假設您有一個包含大量文本文件的目錄,您想要爲每個文件找出單詞計數。您可以使用 ls 命令列出目錄中的所有文件,然後將輸出管道到 wc 命令以計算單詞數。命令如下所示:

sh
ls | wc -w

在這個例子中,ls 命令列出目錄中的所有文件,管道符號 | 將輸出重定向到 wc 命令。然後 wc 命令計算輸入中的單詞數並顯示結果。

管道可以與任何產生輸出的命令一起使用。它們允許您創建強大的命令組合,並輕鬆執行復雜的任務。

另一個管道的常見用途是過濾和處理文本。例如,您可以使用 grep 命令在文件中搜索特定模式,然後將輸出重定向到 sort 命令以對行進行排序。然後,結果輸出可以重定向到一個新文件或顯示在屏幕上。

這裏是一個示例:

sh
grep 'error' log.txt | sort > errors.txt

在這個示例中,grep 命令在文件 log.txt 中搜索包含單詞 error 的行,管道將輸出重定向到 sort 命令。然後,sort 命令按字母順序對行進行排序,> 符號將輸出重定向到文件 errors.txt

使用管道連接命令允許您構建複雜的命令序列並自動化重複的任務。它使您能夠在將輸出傳遞給下一個命令之前對一個命令的輸出執行操作,從而使您能夠創建強大的數據管道。

結論

輸入和輸出是 Linux 中的基本概念,它們允許您與系統交互並處理數據。通過了解輸入和輸出重定向、管道和流的工作原理,您可以更有效地在終端中工作並高效地執行各種任務。