天天看點

重定向

    I/O重定向;

    程式:指令+資料 讀入資料:Input 輸出資料:Output  

    打開的檔案都有一個fd: file descriptor (檔案描述符)

    Linux給程式提供三種I/O裝置  

    标準輸入(STDIN)-0 預設接受來自鍵盤的輸入  

    标準輸出(STDOUT)-1 預設輸出到終端視窗  

    标準錯誤(STDERR)-2 預設輸出到終端視窗  

    I/O重定向:改變預設位置

定向輸出 ">"

    STDOUT和STDERR可以被重定向到檔案: 指令 操作符号 檔案名 支援的操作符号包括:

     > 把STDOUT(标準輸出)重定向到檔案 

    2> 把STDERR(标準錯誤)重定向到檔案 

    &> 把所有輸出重定向到檔案

    > 檔案内容會被覆寫

    # set -C: 禁止将内容覆寫已有檔案,但可追加

    強制覆寫:>|

    # set +C: 允許覆寫 

    >>  原有内容基礎上,追加内容

  标準輸出和錯誤輸出各自定向至不同位置: 

       COMMAND > /path/to/file.out 2> /path/to/error.out 

  ():合并多個程式的STDOUT ( cal 2007 ; cal 2008 ) > all.txt

定向輸入 "<"

     使用<來重定向标準輸入

比如說,我們執行一些指令的時候需要添加一些參數,但是參數太多,不能一條條去寫太浪費時間,這時,我們把這些參數寫到一個文本當中,用到定向輸入"<"會非常的友善,

假設a.txt中沒有資料,b.txt中有資料,那我們用下邊這個指令,就可以吧b中的資料,寫入到a中

    cat > a.txt < b.txt 

重定向和标準輸入/出、标準錯誤的結合用法;

首先, 什麼叫标準輸出,就是說,執行指令後出現的正常參數或者說資料,例如;執行ls 就會列出我目前目錄下的檔案,

或者cat一個檔案,讓其顯示出來文本的内容,這些正常出現的,就叫做标準輸出,我們如果需要把資料定向到某個地方,可以用">"

如果是錯誤的提示資訊,就叫做标準錯誤,例如

那我們有的時候不想看到那些錯誤的輸出,也可以定向到某個地方;但是格式不一樣了

這個指令在 ">" 符号之前多了一個 "2","2>" 表示将标準錯誤輸出重定向

如果,我想把标準輸出和标準錯誤都定向到一個檔案中,怎麼辦?用以下指令

這裡的&表示讓shell了解我們是要把标準錯誤當成标準輸出,寫入到flie中

如果那些資訊都不重要,那就都扔掉

commend > /dev/null

另外一個非常有用的重定向操作符是 "-",請看下面這個例子

$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)

該指令表示把 /source/directory 目錄下的所有檔案通過壓縮和解壓,快速的全部移動到 /dest/directory 目錄下去,這個指令在 /source/directory 和 /dest/directory 不處在同一個檔案系統下時将顯示出特别的優勢。

下面還幾種不常見的用法:

n<&- 表示将 n 号輸入關閉 <&- 表示關閉标準輸入(鍵盤) n>&- 表示将 n 号輸出關閉 >&- 表示将标準輸出關閉

重定向标準輸入

   cat指令可以接受一組檔案為參數,将這些檔案複制到标準輸出。我們前面的例子中已經多次使用到cat指令來将文本檔案的内容讀取到螢幕上。cat還有一個很重要的功能:接受一組檔案,然後通過重定向将他們重新組合到一個檔案中。我們看一個例子

這個指令将ls1和ls2檔案中的内容合并到ls檔案中了。cat指令的這種功能不僅僅适用于文本檔案,同樣對二進制檔案有效。這個場景主要在将多個壓縮封包件合并到一個壓縮包中用到。

繼續閱讀