歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux基礎知識之 IO重定向

Linux基礎知識之 IO重定向

日期:2017/2/28 13:47:57   编辑:Linux教程

通常在 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 上處理文件將會非常的方便快捷。

Copyright © Linux教程網 All Rights Reserved