1. 程式人生 > >06 I/O重定向與管道符

06 I/O重定向與管道符

文件中 輸入輸出 行數據 cat 命令 負載 結構 系統默認 總線 .com

  首先,我們知道我們的計算機結構,在第一節的時候已經介紹過了,CPU進行數據運算,同時控制器負責指令的發送,而內存則是數據存儲的地方,CPU讀取的數據均從內存中調取。電腦除了CPU和內存外,我們還有I/O總線來關聯外部設備(外設,例如顯示器、鍵盤、硬盤、鼠標、光驅等等);

  我們知道,內存默認情況下是沒有數據的,而內存的數據都來自於外設,比如硬盤、鼠標、鍵盤等外部設備,同時,如果進程運行結束後需要將運行的結果輸出出來,也是最終通過外部設備來顯示或者存儲(不可能是內存);

  明白這點後,但是外設有很多設備,比如鍵盤、硬盤等,程序運行的時候到底從哪裏調用數據呢?顯示器、打印機等,程序到底將結果輸出到那個設備備上呢?所以,這裏我們要明白的是:計算機系統有自己默認的輸入輸出設備,這些INPUT設備和OUTPUT設備是由計算機自己定義好的;

I/O重定向

  通過上面的描述,我們知道系統輸入輸出都有自己制定的標準設備,到底哪些是呢?

  系統默認設定:

    默認輸出設備:標準輸出,STDOUT,1【1指定為標準輸出】---標準輸出來自於顯示器*

    默認輸入設備:標準輸入,STDIN,0【0指定為標準輸入】---標準輸入來自於鍵盤*

    標準錯誤輸出:STDERR,2【2指定為標準的錯誤輸出】

  【useradd user1 | passwd --stdin "123456"  #其中--stdin指定的就是標準輸入】

  知道了標準輸入輸出後,我們就能理解重定向的意思了:說白了,就是不使用計算機系統提供的默認輸入輸出設備,而自己手動指定輸出設備,這就叫做I/O重定向;

  對於Linux系統而言,重定向符號為:

    >  輸出重定向  註意,它會將文件裏面原有的內容都覆蓋掉

    >>  追加重定向  在原有的文件基礎之上再追加新內容

    <  輸入重定向  將後面的參數交給前面的命令來執行

    <<  cat 命令中的定位符號

    2>  重定向錯誤輸出  2表示標準錯誤,上面的1和0都是可以省略的

    2>>  追加重定向的錯誤輸出

    &>  不管是1正確的重定向輸出、還是2錯誤的重定向輸出,都輸出到後面文件中去

技術分享圖片

  【使用<對於文件來說非常不安全,如果將原本文件覆蓋是無法找回的,所以我們可以通過set命令來開啟或關閉重定向功能:set -C

禁止對已經存在的文件使用覆蓋重定向功能(如果要強制負載,則可以使用 >| 符號來實現),set +C 開啟覆蓋重定向功能】

技術分享圖片

  在cat命令編輯文件的是偶,我們使用“>>文件名<<EOF"的方式來進行文件的輸入:

技術分享圖片

    其中EOF符號為end of file的意思,實際上cat文件在輸入內容的時候,只需要起始符和結束符相同即可;

  下圖命令為錯誤命令,2> 錯誤重定向才能生效;

技術分享圖片

  有時候,我們需要將錯誤的輸入結果輸入到一個文件中去,而真確的輸出結果又輸入到一個文件中:(錯誤文件和正確的文件不是同一個文件)

技術分享圖片

  如果我們需要將錯誤輸出和正確輸出都重定向到同一個文件中去,則時候就使用到了 &>

管道符  |

  管道符:將前一個面對輸出內容,作為後一個命令的輸入;

  使用方式是:命令1 | 命令2 | 命令3

技術分享圖片

  【Linux系統的中心思想:組合小命令,完成復雜任務】

  tee命令:將顯示出來的內容,作為一個獨立的文件保存起來;

技術分享圖片

技術分享圖片

06 I/O重定向與管道符