一、重定向簡介
在Linux系統中,所有程序(包括命令行工具和圖形化應用程序)都通過標準輸入(stdin)、標準輸出(stdout)和標準錯誤(stderr)與系統進行通信。通常情況下,標準輸入和輸出都與終端設備相關聯,程序可以通過這些標準設備與用戶交互。
但是,有時候我們需要將程序的標準輸出或標準錯誤輸出到文件中,或者將一個程序的輸出傳遞給另一個程序進行處理。Linux提供了重定向和管道兩種機制,可以很方便地實現這些功能。
二、輸出重定向
輸出重定向是指將一個程序的標準輸出或標準錯誤輸出到文件中,而不是直接輸出到終端設備。在Linux系統中,可以使用「>」和「>>」運算符實現輸出重定向。
「>」運算符用於將一個程序的標準輸出輸出到指定文件中,如果這個文件不存在,則會創建它;如果文件已存在,則會覆蓋原有內容。例如:
$ ls > files.txt
這個命令將當前目錄下的文件列表輸出到files.txt文件中。
「>>」運算符也用於將一個程序的標準輸出輸出到指定文件中,但是它不會覆蓋原有內容,而是追加到文件末尾。例如:
$ echo "Hello, world!" >> greeting.txt
這個命令會將「Hello, world!」字元串追加到greeting.txt文件的末尾。
三、標準錯誤重定向
除了標準輸出外,一個程序的標準錯誤輸出也可以重定向到文件中。在Linux系統中,可以使用「2>」和「2>>」運算符實現標準錯誤重定向。
「2>」運算符用於將一個程序的標準錯誤輸出輸出到指定文件中,如果這個文件不存在,則會創建它;如果文件已存在,則會覆蓋原有內容。例如:
$ ls /root 2> error.txt
這個命令會將訪問/root目錄的錯誤信息輸出到error.txt文件中。
「2>>」運算符也用於將一個程序的標準錯誤輸出輸出到指定文件中,但是它不會覆蓋原有內容,而是追加到文件末尾。例如:
$ rm /etc/passwd 2>> error.log
這個命令會將訪問/etc/passwd文件的錯誤信息追加到error.log文件末尾。
四、管道
管道是指將一個程序的輸出傳遞給另一個程序進行處理的機制。在Linux系統中,可以使用「|」運算符實現管道。
例如,我們可以使用管道將一個程序的輸出過濾掉一些內容,然後將結果傳遞給另一個程序進行處理。下面的命令使用管道將ls命令輸出的文件列表中的.html文件過濾掉,然後將結果傳遞給grep命令進行處理:
$ ls | grep -v .html
這個命令會輸出當前目錄下的文件列表,但是過濾掉了.html文件。
管道也可以用來對一個程序的輸出進行排序、去重等處理。例如,下面的命令使用管道將ls命令輸出的文件列表進行排序,並去重後輸出:
$ ls | sort | uniq
這個命令會輸出當前目錄下的文件列表,並將相同的文件名合併為一個。
五、保存命令輸出結果
除了將命令的輸出重定向到文件中或者通過管道傳遞給其他程序處理外,還可以將命令的輸出結果保存到變數中供後續使用。在Linux系統中,可以使用反引號(`)或$(命令)的形式將命令的輸出保存到變數中。
例如,下面的命令將當前目錄下的文件列表保存到FILES變數中:
$ FILES=`ls`
這個命令會將當前目錄下的文件列表保存到變數FILES中。
另外,也可以使用$(命令)的形式將命令的輸出保存到變數中。例如:
$ FILES=$(ls)
這個命令與上面的命令作用相同,將當前目錄下的文件列表保存到FILES變數中。
六、總結
Linux系統提供了輸出重定向和管道兩種機制,可以很方便地對命令的輸出結果進行處理。通過重定向可以將命令的輸出重定向到文件中,或者將標準錯誤輸出重定向到文件中;通過管道可以將一個程序的輸出傳遞給另一個程序進行處理;通過將命令的輸出保存到變數中,可以在後續操作中使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/230252.html