Ict-創新/LPI/103.4
考生應該能夠重定向流並將它們連線起來,以便有效地處理文字資料。任務包括重定向標準輸入、標準輸出和標準錯誤,將一個命令的輸出管道到另一個命令的輸入,使用一個命令的輸出作為另一個命令的引數,並將輸出傳送到標準輸出和檔案。
關鍵知識領域
- 重定向標準輸入、標準輸出和標準錯誤。
- 將一個命令的輸出管道到另一個命令的輸入。
- 將一個命令的輸出作為另一個命令的引數。
- 將輸出傳送到標準輸出和檔案。
UNIX 程序使用流來獲取輸入(標準輸入流)、傳送輸出(標準輸出流)以及傳送錯誤訊息的流(標準錯誤流)。這些流可以被任何程序重定向。在大多數情況下,標準輸入(stdin)是鍵盤,而兩個輸出描述符,標準輸出(stdout)和標準錯誤(stderr),都發送到螢幕。有時,將這些標準流重定向以便程序從檔案中接收輸入和/或將輸出傳送到檔案會很方便。
| stdin | 0 |
| stdout | 1 |
| stderr | 2 |
在重定向或與這些流互動時,我們用它們的數值來引用它們。
標準輸出重定向
例如,要將標準輸出從螢幕重定向到檔案,您將使用“>”符號。
例如
|
$ find / -iname *.txt > textfiles.txt |
這將執行find 實用程式並將結果輸出到 textfiles.txt 檔案。螢幕上沒有輸出可見。如果 textfiles.txt 檔案不存在,則會先建立它,否則會覆蓋它。要追加到檔案而不是建立新檔案,可以使用“>>”運算子。
標準錯誤重定向
標準錯誤重定向使用與標準輸入重定向相同的格式,但您需要指定要重定向的是 stderr 流而不是 stdout。這可以透過將 stderr 流 ID 放在重定向符號之前來完成。
|
$ myapp 2> error.txt |
與上面的 stdout 示例一樣,這將建立一個新檔案。要追加到現有檔案,您將使用“2>>”重定向標準錯誤。
重定向 stdout 和 stderr
要同時重定向 stdout 和 stderr,您將使用“&>”或“&>>”運算子。這將把標準輸出和標準錯誤都定向到同一個檔案。
標準輸入重定向
要讓程序從檔案中讀取輸入而不是從鍵盤獲取輸入,您將使用“<' 符號,如下例所示
|
$ mysql -u root -p < createtable.sql |
在這裡,mysql 命令列介面被告知從名為 createtable.sql 的檔案中獲取其標準輸入,而不是從鍵盤讀取輸入。此檔案將包含用於建立表的 SQL 語句,例如。
管道命令用於將一個程序的標準輸出重定向到另一個程序的標準輸入。
program1 | program2
管道由“|”符號表示。資料流從左到右。下圖說明了如何將一個程序的 stdout 重定向到另一個程序的 stdin。
|
# ls-l | less |
tee 命令
command | tee FILENAME
此命令在管道之後使用,並以檔名作為引數。來自之前命令的標準輸出將被髮送到作為引數給定的檔案,但tee 也允許流透過到stdout。stdout 已經透過這種方式被複制。
xargs
此工具通常被認為是find 的配套工具。事實上,xargs 會將標準輸出的每一行作為另一個工具的引數 進行處理。我們可以使用xargs 來刪除屬於某個使用者的所有檔案,方法如下:
|
$ find / -type f -user 502 | xargs rm –f |
如果檔名列表很長,xargs 將將其拆分為多個部分,並多次呼叫 rm 命令,每個部分一個。如果引數列表過長而無法處理,這有時很有用。
|
$ ls |xargs rm -f |
使用過的檔案、術語和實用程式
- tee
- xargs