2021-05-12 14:32:11
Linux基礎知識之 IO重定向
通常在 Shell 中執行命令的時候,我們會在輸入命令的下方看到執行結果,作業系統預設將命令的執行結果輸出到顯示器上。當然,我們也可以手動的指定輸出路徑,或者輸入路徑,這就是 I/O 重定向。
1.標準輸出重定向
使用 cat 命令,命令的執行結果將會列印在螢幕中。
我們使用 > 來進行輸出重定向,此時螢幕上不再列印命令執行結果了,而是將執行結果儲存到了 ./target.xxx 檔案中。
來看一下 ./target.xxx 檔案中的內容:
2.標準輸入重定向
tr 命令可以從鍵盤上讀取標准輸入,然後列印出命令的執行結果:
底下的游標表示 tr 命令在等待使用者的輸入,然後將它們列印在螢幕上。ctrl + c 可以終止此命令執行。預設情況下,tr 從鍵盤上讀取內容輸出,如果我們要在其他檔案中讀取內容,就要使用標准輸入重定向。
3. >> 和 <<
在使用 > 進行輸出重定向的時候,後一次的輸出會覆蓋前一次的輸出,如果我們不想進行覆蓋,就使用 >> 進行追加重定向。
和 >> 不同的是, << 並不表示追加重定向,而是進行文件輸入,或者多行輸入。使用 << 的時候需要使用定界符標誌,關於這個命令,學過 PHP 的同學應該比較了解了。定界符可以任意取名,只要兩端保持一致即可。
輸入重定向和輸出重定向也可以連線配合使用,這裡使用 << 和 >> 舉例:
4.標準錯誤輸出流(STDERR)
除了標出輸入流(STDIN),標準輸出流(STDOUT),還有標準錯誤輸出流(STDERR)。標準錯誤輸出流和標準輸出流是不同的資料流。
如果命令發生了錯誤,螢幕上會列印錯誤資訊,由於 STDERR 和 STDOUT 屬於不同的資料流,因此該錯誤資訊並不會輸出到 ./result 中。
標準錯誤輸出流使用 2>(覆蓋) 或者 2>> (追加)進行重定向:
螢幕上沒有列印錯誤資訊,將錯誤資訊輸出到 ./result 檔案中。
如果我們想將命令執行的結果(正常結果和出錯資訊)一併輸出到某個檔案中,可以使用 >> 和 2>> 連線進行操作,也可以使用 &> 或者 &>> 重定向 STDOUT 和 STDERR 到同一個檔案中:
5.管道
管道表示資料的流向:資料在某處進行處理後,通過管道傳輸到另一處進行處理。Linux 中使用 | 作為管道連線符,表示將上一次命令的執行結果作為下一次命令的輸入。下面是管道的兩個範例用法:
6.set 命令
set 是 bash 中的一個內建命令,可以進行一些功能的開啟或者關閉。為了安全起見,我們一般是不允許進行覆蓋重定向的,這是可以使用 set -C 表示禁止覆蓋重定向。
使用 set +C 命令表示允許覆蓋重定向。
如果在使用 set -C 禁止覆蓋重定向之後,我們還是想執行這樣的操作呢?我們可以使用 COMMAND >| FILE,通過在 > 後加一個豎線,可以實現此操作。
7.總結
本文介紹了 Linux 中的 I/O 重定向的實現,包括標準輸入、輸出重定向,以及標準錯誤輸出重定向,還有覆蓋重定向和追加重定向的區別。最後介紹了 Linux 中的管道,我們使用管道對命令進行連線,前一個命令的輸出作為後一個命令的輸入。內容比較簡單,作為一個單獨的知識點,還是將其獨立成文,方便以後查閱。這篇文章會介紹 grep 命令和正規表示式,學會使用 grep 命令之後,我們在 Linux 上處理檔案將會非常的方便快捷。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-10/136252.htm
相關文章