通常在 Shell 中執行命令的時候,我們會在輸入命令的下方看到執行結果,操作系統預設將命令的執行結果輸出到顯示器上。當然,我們也可以手動的指定輸出路徑,或者輸入路徑,這就是 I/O 重定向。 1.標準輸出重定向 使用 cat 命令,命令的執行結果將會列印在屏幕中。 我們使用 > 來進行輸出重定向, ...
通常在 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 上處理文件將會非常的方便快捷。
作者:Charleylla 轉載請註明出處:http://www.cnblogs.com/charleylla/p/5988213.html