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
下一篇 2016-07-26

相關推薦

  • MySQL半同步配置

    先配置主從服務器,過程見另一篇博庫 就是先搭一個主從服務器,然后 1、先在主節點上安裝半同步復制的主節點專用插件 MariaDB [(none)]> SHOW PLUGINS;這條命令可以查看有哪些插件可以用 2、從節點也一樣先裝插件 從節點上先停止線程 STOP SLAVE; 主節點上 從節點上 START SLAVE; 這里需要手動的停止一下線程,…

    Linux干貨 2016-11-21
  • rpm和yum的使用,程序包編譯安裝以及編譯apache過程中出現的問題

    一、rpm包管理          用法: rpm [選項…]              查詢/驗證軟件包選項:   &nbsp…

    Linux干貨 2016-03-19
  • find命令簡單總結

     find     字符串類查詢:            -type   //根據文件類型查找       &…

    Linux干貨 2015-09-14
  • issue設置和定時關機練習

    /etc/issue內的代碼意義 \l 顯示第幾個終端機接口(tty)\m 顯示硬件的等級 (x86_64)\n 顯示主機的網絡名稱 (zcl-domain)\r 操作系統的版本 (2.6.32-642.e16)\t 顯示本地端時間的時間(20:22:12) \d顯示本地端的日期 (2016-8-5)\s 操作系統的名稱(linux)  練習 1,…

    Linux干貨 2016-08-05
  • 運維工具

      運維工具:Operations 通過工具,實現自動化運維 運維工作: BootStraping:當拿到硬件或軟件才主機以后,安裝操作系統 Bare Metal:pxe, cobbler(pxe的二次開發版) Virtaul Machine:image files(給予模板匹配安裝) Configurati…

    Linux干貨 2016-11-01
  • N25-第五周博客作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; [root@localhost ~]# grep "^[[:space:]]\+" /boot/grub/grub.conf      root (hd0,0)…

    Linux干貨 2017-01-06
欧美性久久久久