Linux命令列使用之命令列輸入與輸出
與DOS類似,Shell 程式通常自動開啟3個標準文件:標準輸入文件(stdin)、標準輸出文件(stdout)和標準錯誤輸出文件(stderr)。其中 stdin 一般對應終端鍵盤,stdout 和 stderr 對應終端螢幕。程序從 stdin 獲取輸入內容,將執行結果輸出到stdout,如果有錯誤資訊,同時輸出到 stderr。多數情況下使用標準輸入輸出作為命令的輸入輸出,但有時可能要改變標準輸入輸出,這就涉及到重定向和管道。
1.輸入重定向
主要用於改變命令的輸入源,讓輸入不要來自鍵盤,而來自指定檔案。基本用法:
命令 < 檔名
例如,wc 命令用於統計指定檔案包含的行數、字數和字元數,直接執行不帶引數的 wc 命令,將等待使用者輸入內容之後,按<Ctrl>+<D>結束輸入後才對輸入的內容進行統計。而執行下列命令通過檔案為 wc 命令提供統計源。
2.輸出重定向
主要用於改變命令的輸出,讓標準輸出不要顯示在螢幕上,而是寫入到指定檔案中。基本用法:
命令 > 檔名
例如,ls 命令在螢幕上列出檔案列表,不能儲存列表資訊。要將結果儲存到指定檔案,就可使用輸出重定向,下列命令將當前目錄中的檔案列表資訊寫到所指定的檔案中。
ls > /home/nnp/myml.list
如果要寫入已有檔案,則將該檔案重寫(覆蓋)。要避免重寫破壞原有資料,可選擇追加功能,將 > 改為 >>,下列命令將當前目錄中的檔案列表追加到指定檔案的末尾。
ls >> /home/nnp/myml.list
以上是對標準輸出來講的,至於標準錯誤輸出的重定向,只需要換一種符號,將 > 改為 2> ,將 >> 改為 2>>。將標準輸出和標準錯誤輸出重定向到同一檔案,則使用符號 &>。
3.管道
管道用於將一個命令的輸出作為另一個命令的輸入,使用符號 “|” 來連線命令。可以將多個命令依次連線起來,前一個命令的輸出作為後一個命令的輸入。基本用法:
命令1 | 命令2 ....... | 命令n
在Linux命令列中,管道操作非常實用。例如,以下命令將 ls 命令的輸出結果提交給 grep 命令進行搜尋。
ls | grep "ab"
在執行輸出內容較多的命令時可以通過管道使用 more 命令進行分頁顯示,例如:
cat /etc/log/message | more
4.命令替換
命令替換與重定向有些類似,不同的是命令替換將一個命令的輸出作為另一個命令的引數,常用命令格式如下:
命令1 '命令2'
其中命令2的輸出作為命令1的引數,注意這裡的符號是指反引號,被它括起來的內容作為命令執行,執行的結果作為命令1的引數。例如以下命令將 pwd 命令列出的目錄作為 cd 命令的引數,結果仍停留在當前目錄下。
cd 'pwd'