Linux基礎知識之IO重定向

該博文以CentOS6.8_x86_64系統為基礎,Xshell 5遠程連接CentOS系統,以root身份登錄系統。 

什么是I/O重定向?

      所謂I/O重定向簡單來說就是一個過程,這個過程捕捉一個文件,或者命令,程序,腳本,甚至腳本中的代碼塊(codeblock)的輸出,然后把捕捉到的輸出,作為輸入發送給另外一個文件,命令,程序,或者腳本。

     輸入輸出設備:

      可用于輸入的設備:文件(鍵盤設備,文件系統上的常規文件,網卡等)

      可用于輸出的設備:文件(顯示器,文件系統上的常規文件,網卡等)

      程序的數據流有三種:

            輸入的數據流:<– 標準輸入(stdin),鍵盤

            輸出的數據流:–> 標準輸出(stdout),顯示器

            錯誤的數據流:–> 錯誤輸出(stdorr),顯示器

      fd:file description ;文件描述符

            標準輸入 0

            標準輸出 1

            錯誤輸出 2

      IO重定向:

         輸出重定向:>、>>、2>、2>>、&>、&>>

            >添加:覆蓋輸出

           >>特性:追加輸出

      a.關閉和開啟覆蓋輸出重定向:

          ①set -C :關閉覆蓋輸出重定向至已存在的文件(僅對當前shell進程有效)

     (以cat /etc/inittab > /tmp/inittab.out1 為例)

blob.png

          ②set +C :開啟覆蓋輸出重定向至已存在的文件(僅對當前shell進程有效)、

      (以cat /etc/inittab > /tmp/inittab.out1為例)

blob.png

     b.>覆蓋輸出重定向的具體的用法

           ①cat /PATH/TO/SOMEFILE > /XXX/YYY

      以cat /etc/inittab > /tmp/inittab.out為例。(cat /tmp/inittab.out 文件較大只顯示其中的一部分,即/etc/inittab文件的上半部分。 )

blob.png

          ②cat /PATH/TO/SOMEFILE > /dev/(ttyX or pts/X) X為終端號

     以cat /etc/inittab > /dev/tty1為例(不建議直接將輸出的信息發送到tty1上面)

在Xshell上面登錄的/pts/1終端,執行上面的命令

blob.png

在CentOS6.8的tty1終端上面顯示出/etc/inittab的內容(內容顯示為inittab文件的前幾行)

blob.png

          ③cat /PATH/TO/SOMEFILE > /dev/XXX 是一件非常危險的事情,輸出的數據可能直接將/dev/XXX某些數據直接擦除(由于該項操作比較危險,建議不要使用,所以本篇博文,不做演示)

          ④cat /PATH/TO/SOMEFILR > /XXX/YYY(/XXX/YYY是一個已經存在里面存在數據的文件,然后/XXX/YYY里面的數據會隨著第二次的輸入而改變)

       首先將/etc/fstab輸出至/tmp/fstab.out,查看/tmp/fstab.out已經存在/etc/fstab的內容,然后將/etc/inittab輸出至/tmp/fstab.out,再查看/tmp/fstab.out中原來的內容已經被/etc/inittab的內容所取代。blob.png

          ⑤cat /PATH/TO/SOMEFILE >| /XXX/YYY(使用set -C 將覆蓋輸出重定向關閉輸出至已存在的文件,需要強制輸出至已存在的/XXX/YYY 文件)

          以/etc/inittab > /tmp/inittab.out1為例

blob.png

          ⑥cat /PATH/TO/SOMEFILE > /XXX/YYY (/PATH/TO/SOMEFILE是一個錯誤的地址或者一個不存在的地址)

       以/etc/inittabb > /tmp/inittab.out2為例,當/etc/inittabb是一個錯誤的路徑時,覆蓋輸出至/tmp/inittab.out2,本設定應該沒有任何信息輸出,但輸出了一部分的信息,該信息不是標準輸出,是錯誤的輸出(stderr)

blob.png

       c.>>追加輸出重定向的具體的用法

        追加輸出重定向的用法等同于覆蓋輸出重定向的用法,但是稍微有一些不同,本博文就簡單的去介紹一下追加輸出重定向。

    以/etc/issue > /tmp/issue.out /etc/inittab >> /issue.out為例,將/etc/issue輸出至/issue.out中,將/etc/inittab追加輸出重定向至/issue.out中,可以發現/etc/issue和/etc/inittab兩個文件連接到一塊,可以發現追加輸出是將第一個追加到第二個的后面輸出。

blob.png

         結論:

      覆蓋輸出重定向和追加輸出重定向時,將命令執行正確的結果輸出(覆蓋輸出或者追加輸出)到要輸出的/XXX/YYY中,當命令結果執行錯誤時,直接顯示到屏幕上面,即錯誤輸出(stderr)。

         d.錯誤輸出流重定向 2>,2>> 

        cat /PATH/TO/SOMEFILE 2> /XXX/YYY

        cat /PATH/TO/SOMEFILE 2>> /XXX/YYY

      以/etc/issue 2> /tmp/error.out為例,當cat /etc/issue命令執行正確的時候,將cat命令執行的結果輸出到屏幕上面,當cat /etc/issuea(issuea文件不存在)命令執行錯誤的時候,將cat命令報錯的信息輸出到/tmp/error.out下面。

blob.png

     結論:

      該結論和輸出重定向的結論相反,當命令執行正確的時,將命令執行的結果輸出到屏幕上面來,當命令執行錯誤的時候,將命令執行錯誤的提醒輸出到/XXX/YYY文件中。

       e.合并正常輸出流和錯誤輸出流

        cat /PATH/TO/SOMEFILE &> /XXX/YYY

    以/etc/issue &> /tmp/inittab.out3 /etc/issaue &> /tmp/inittab.out3 為例,不管是正確的執行結果還是錯誤的執行結果都會輸出到/tmp/inittab.out3中

blob.png

        cat /PATH/TO/SOMEFILE &>> /XXX/YYY

    以/etc/issue &> /tmp/inittab.out3 /etc/issue &>> /tmp/inittab.out3為例,不管是正確的執行結果還是錯誤的執行結果都會輸出到/tmp/inittab.out3中

blob.png

        cat /PATH/TO/SOMEFILE >> /XXX/YYY 2>&1

    以cat /etc/inittab >> /tmp/inittab.out4 2>&1為例,不管是正確的執行結果還是錯誤的執行結果都會輸出到/tmp/inittab.out4中

blob.png

   結論:

    無論是執行結果的正確與否,都會輸出到指定的文檔之中。

      f.輸入輸出重定向

         cat << EOF

    將字符輸入給cat,當輸入EOF結尾之后,cat直接將輸入的字符輸出到屏幕上面。

         cat > /PATH/TO/SOMEFILE << EOF

     將字符輸入給cat,當輸入EOF結尾之后,cat直接將輸入的字符輸出重定向到/PATH/TO/SOMEFILE中。

blob.png

原創文章,作者:sjsir,如若轉載,請注明出處:http://www.www58058.com/26029

(0)
sjsirsjsir
上一篇 2016-07-26 16:38
下一篇 2016-07-26 16:40

相關推薦

  • 一起學DHCP系列(二)三種途徑

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/162176 《一起學DHCP》系列第二節。      和WINS服務類似,DHCP大體上也由兩部分組成,DHC…

    Linux干貨 2015-03-25
  • Linux發展史

    Linux發展史 一、歷史 (一)、Unix 1、Unix操作系統是一個強大的多用戶、多任務操作系統,支持多種處理器架構。 2、最早由KenThompson(湯普遜)、Dennis Ritchie(丹尼斯·里奇,C語言之父,Unix之父)和Douglas McIlroy(麥克羅伊,程式設計師)于1969年在AT&T的貝爾實驗室開發。 3、目前它的商標…

    Linux干貨 2016-10-14
  • Linux磁盤管理

    一、磁盤簡介 機械硬盤的組成部件主要有:盤片、機械手臂、磁頭與主軸馬達;盤片又可以細分為扇區(Sector)和磁道(Track),所有盤片的同一個磁道稱之為柱面(Cylinder) 目前主流的磁盤接口有SCSI、SATA、SAS、USB等 Linux一切皆文件,硬件設備也有對應的文件,linux訪問設備,其實就是訪問與其對應的文件系統接口 設備文件: &nb…

    Linux干貨 2016-06-01
  • linux文件查找工具 — find

    簡述:   linux中find命令是一種強大的實時查找工具,它通過用戶給出的路徑,在該路徑下的文件系統中進行文件查找。因此在遍歷一個較大的文件系統時會比較花費時間,而且find命令占用資源也是比較大的,所以它的工作特點是,查找的速度略慢,但是可以實現精確查找和實時查找。由于用戶權限的問題,可能只搜索用戶具備讀取和執行權限的目錄。由于fi…

    Linux干貨 2016-08-18
  • grep、egrep、fgrep 正則表達式詳解

    大綱一、grep分類       –1.1基本定義       –1.2常用選項       –1.3不常用選項二、正則表達式       –2.1基本…

    Linux干貨 2015-07-01
  • 馬哥linux運維26期開班感悟

         今天的收獲,有以下幾點      1.自己的公眾演說能力很弱,要多多練習,給自己更多的機會。     2.自己想提升自己的心很強,但是自己卻不知道該怎么做?     3.即便學完了也只是一個開始,希望自己有一顆歸零的心態。

    Linux干貨 2017-07-10
欧美性久久久久