I/O重定向和管道

1、標準輸入和標準輸出
git

    1.程序:指令+數據;
shell

        數據:
centos

            讀入數據:Input
ide

            輸出數據:Output
centos7

    2.打開的文件都有一個fd:file descriptor(文件描述符)
spa

    3.Linux給程序提供的三種I/O設備:
3d

        標準輸入:0,默認接受來自鍵盤的輸入;
orm

        標準輸出:1,顯示器(默認輸出到終端窗口)
blog

        標準錯誤輸出:2,顯示器(默認輸出到終端窗口)
進程

2、把標準輸出和標準錯誤輸出重定向到文件

    1.標準輸出和標準錯誤輸出能夠被重定向到文件:

        格式:命令 操做符號 文件名;

        支持的操做符號:

            >:把標準輸出重定向到文件;

            2>:把標準錯誤輸出重定向到文件;

            &>:把標準輸出和標準錯誤輸出重定向到文件;

    2.輸出重定向:COMMAND > NEW_POS,COMMAND >> NEW_POS;

        >:覆蓋重定向:文件不存在,則會自動建立;文件若是有內容,則會覆蓋;

            eg:ls > /testdir/is.log

                wKiom1l8FvHRCe3wAAA1ac471CE438.png-wh_50

        >>:追加劇定向,在原有內容基礎上,追加內容;新內容會追加至目標文件尾部;

            eg:uname -r >> /testdir/is.log

                wKiom1l8FxehHjtDAAAy2JMOrrU644.png-wh_50

        set -C:禁止將內容覆蓋已有文件,但可追加;強制覆蓋:>|;

        set +C:容許覆蓋;

        2>:覆蓋重定向標錯誤輸出數據流;

            eg:aaaaa 2> /testdir/is.log

                wKioL1l8F1ySWAIuAAA-FSpnVxE314.png-wh_50

        2>>:追加劇定向錯誤輸出數據流;

            eg:bbbbb 2>> /testdir/is.log

                wKiom1l8F4iDv1IZAAA0gTODWHo691.png-wh_50

        標準輸出和錯誤輸出各自定向至不一樣位置:

            COMMAND > /path/to/somfile 2> /path/to/err.out

            eg:ls /boot /ddddd /testdir/f1 2> /testdir/f2

                wKioL1l8GKriXKt-AACwgWzoHas486.png-wh_50

        合併標準輸出和錯誤輸出爲同一個數據流進行重定向:

            &>:覆蓋重定向;

            &>>:追加劇定向;

                COMMAND &> /path/to/file.out;

                    eg:ls /boot /ddddd &> /testdir/all.log

                wKioL1l8GQeATfn3AACzKobZKB0940.png-wh_50

                COMMAND &>> /path/to/dile.out

                    eg:ls /boot /ddddd &>> /testdir/all.log

    3.():合併多個程序的標準輸出

          eg:(pwd;ls) > /testdir/all.log

                wKioL1l8GULhtVZAAAA1rCpZ1HQ173.png-wh_50

3、輸入重定向:<

    1.tr命令

        tr:轉換或刪除字符;

        語法:tr [OPTION]...SET1 [SET2]

        字符集1:指定要轉換或刪除的原字符集。當執行轉換操做時,必須使用參數「字符集2」指定轉換的目標字符集。但執行刪除操做時,不須要參數「字符集2」;

         字符集2:指定要轉換成的目標字符集。

    OPTION:

        -c:取字符集的補集(也就是取反);

        -d:刪除全部屬於第一字符集的字集;

        -s:把連續重複的字符以單獨一個字符表示;也能夠用-s來轉換字符(等同於tr [a-z] [A-Z] < /etc/issue);

        -t:將第一個字符集對應字符轉化爲第二字符集對應的字符;

    字符集表示方法:

        [:lower:]:任意小寫字母;

        [:upper:]:任意大寫字母;

        [:alpha:]:任意大小寫字母(不區分大小寫);

        [:alnum:]:任意數字和字母;

        [:blank:]:水平空白字符;

        [:space:]:水平或垂直空白字符;

        [:punct:]:標點符號;

        [:print:]:可打印字符;

        [:cntrl:]:控制(非打印)字符;

        [:graph:]:圖形字符;

        [:xdigit:]:十六進制字符;   

    速記符含義八進制方式

        \b Ctrl-H 退格符\010

        \f Ctrl-L 走行換頁\014

        \n Ctrl-J 新行\012

        \r Ctrl-M 回車\015

        \t Ctrl-I tab鍵\011


    eg1:tr 'abc' 'xyz':這裏不是將abc轉換成xyz,是對應轉換,a轉換成x,b轉換成y,c轉換成z;

                wKiom1l8CFyiTBhFAAAjO3Ok3XM929.png-wh_50

    eg2:tr 'abc' 'xy':a轉換成x,b轉換成y,c轉換成z;因爲c沒有對應轉換項,會在xy後自動加個y來造成對應關係;

                wKiom1l8CTuQN3DNAAAaqUEiisc401.png-wh_50

    eg3:tr 'ab' 'xyz'::a轉換成x,b轉換成y,c轉換成z;因爲沒有與z造成對應關係的項,它不會自動添加項;

                wKioL1l8CoeBhZoRAAAiQH-58bQ374.png-wh_50

    eg4:tr 'a-z' 'A-Z' < /etc/issue;將文件中的小寫字母轉換成大寫字母;

                wKiom1l8C0zR0435AAArtbVp8-0090.png-wh_50

    eg5:tr 'a-z' 'A-Z' < /etc/issue > f1;將文件中的小寫字母轉換成大寫字母並重定向到f1文件中;

                wKioL1l8C92Qnel5AABRlBG78yg549.png-wh_50

    eg5:tr -s

                wKioL1l8EDrADv_7AAAhGJJa3WY112.png-wh_50

                wKiom1l8RWaAE4_LAAAsaqMzdGE883.png-wh_50

    eg6:tr -d

                wKiom1l8EPzw9-9sAAAjMoIuNcc289.png-wh_50

                wKiom1l8EmOxzN5wAAAikUAd9RY925.png-wh_50

                wKiom1l8SsyBhZEtAABFFWNmMpM581.png-wh_50

    【注意】這裏,凡是在file文件中出現的'S','n','a','i','l'字符都會被刪除!而不是牢牢刪除出現的"Snail」字符串。

    eg7:tr -c

                wKiom1l8E7uCeXRYAAArsJD676o491.png-wh_50

                

                

4、多行標準輸入重定向

    1.使用「<<終止詞」命令從鍵盤把重導向給標準輸入;

        eg1:

                wKiom1l8BS_ALvn7AABnC5ZMlEk528.png-wh_50

        eg2:用來發郵件

                wKioL1l8BjvhZLSvAAAuWsszsj8459.png-wh_50

            

                 

5、管道

    1.管道(使用符號「|」表示)用來鏈接命令;

        命令1 | 命令2 | 命令3 | ...

            1.1.將命令1的標準輸出送給命令2的標準輸入,命令2的標準輸出送給命令3的標準輸入;

                注:最後一個命令會在當前shell進程的子shell進程中執行;

                    eg1:ls | tr 'a-z' 'A-Z'

                wKiom1l8FPvC6rc0AABKZM5WohU857.png-wh_50


                    eg2:echo centos7 | passwd --stdin wu > /dev/null


            1.2.標準錯誤輸出默認不能經過管道轉發,可利用2>&1或|&實現;

                    eg: ls aaaaa |& tr 'a-z' 'A-Z'

                wKioL1l8FaqDmyzwAAAvry8MpSQ501.png-wh_50

                

6、重定向到多個目標(tee)

    tee命令:從標準輸入讀取並寫入標準輸出和文件

    1.命令1 | tee 文件名 | 命令2

        把命令1的標準輸出保存在文件名中,而後管道輸入給命令2;

    2.使用:

        2.1.保存不一樣階段的輸出;

        2.2.同時查看和記錄輸出

    eg:who | tee f1 | tr 'a-z' 'A-Z'

                wKiom1l8FK6jseANAAAzqlLa024194.png-wh_50

相關文章
相關標籤/搜索