• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開(kāi)心的工作
            簡(jiǎn)單、開(kāi)放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            重定向與管道

            Posted on 2010-01-06 19:20 S.l.e!ep.¢% 閱讀(430) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++

            重定向與管道

            重定向

            Linux shell接收或發(fā)送徐磊和字符串流行是的輸入或輸出,不管實(shí)際的字符串流進(jìn)入或來(lái)自哪個(gè)文件、鍵盤(pán)、顯示窗口等設(shè)備,都使用文件I/O技術(shù)來(lái)訪問(wèn)流。Linux shell使用3種標(biāo)準(zhǔn)的I/O流,每種流都與一個(gè)文件描述符相關(guān):
            1.stdout是標(biāo)準(zhǔn)輸出流,顯示來(lái)自命令的輸出,文件描述符為1
            2.stderr是標(biāo)準(zhǔn)錯(cuò)誤流,顯示來(lái)自命令的錯(cuò)誤輸出,文件描述符為2
            3.stdin是標(biāo)準(zhǔn)輸入流,為命令提供輸入,文件描述符為0

            重定向輸出:
            >??????????? 輸出重定向到一個(gè)文件或設(shè)備,覆蓋原來(lái)的文件
            >!?????????? 輸出重定向到一個(gè)文件或設(shè)備,強(qiáng)制覆蓋原來(lái)的文件
            >>????????? 輸出重定向到一個(gè)文件或設(shè)備,追加原來(lái)的文件
            n>????????? 標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤重定向到一個(gè)文件或者設(shè)備,覆蓋原來(lái)文件(1為默認(rèn))
            n>>??????? 標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤重定向到一個(gè)文件或者設(shè)備,追加原來(lái)的文件(1為默認(rèn))
            m>&n??? 標(biāo)準(zhǔn)輸出/標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)錯(cuò)誤輸出/標(biāo)準(zhǔn)錯(cuò)誤
            m>>&n
            &>???????? 將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤重定向到同一個(gè)文件中
            &>>
            注意:
            1.以下兩個(gè)指令:
            command 2>&1 1>output.txt
            command 1>output.txt 2>&1
            這個(gè)指令是不一樣的,第一種情況中,stderr被重定向到stdout的當(dāng)前位置,然后再將stdout重定向到output.txt,但1>output.txt只影響stdout,不影響stderr。第二種情況中,stderr被重定向到stdout的當(dāng)前位置,即output.txt中。
            2.可以將選擇的流重定向到空文件/dev/null,這樣相當(dāng)于完全忽略所選的標(biāo)準(zhǔn)流。使用cat命令顯示/dev/null是空的。

            重定向輸入:
            <??????? 輸入重定向到一個(gè)程序,如tr ' ' '\n' < text
            0<????? 標(biāo)準(zhǔn)輸入重定向
            注意:
            1.輸入重定向與管道是可以互換的,例如cat file | tr ' ' '\t'使用管道命令將cat指令的標(biāo)準(zhǔn)輸出果作為tr指令的標(biāo)準(zhǔn)輸入,可以寫(xiě)成tr ' ' '\t' < file。
            2.shell存在here-document的概念,這是另一種輸入重定向的形式,它將<<和一個(gè)單詞結(jié)合構(gòu)成一個(gè)標(biāo)記,用來(lái)表示輸入端結(jié)束符,例如:
            sort -n << END
            該指令接收來(lái)自標(biāo)準(zhǔn)輸入端的字符,直到END為止,然后sort排序。當(dāng)然也可以使用sort -n以及CTRL+D來(lái)代替。

            管道

            1.在兩個(gè)命令之間使用管道|操作符將前一個(gè)命令的stdout指向第二個(gè)命令的stdin,可以通過(guò)添加更多的命令和管道操作符來(lái)構(gòu)造更長(zhǎng)的管道線。使用管道操作符后,可以使用連字符-取代文件名作為一個(gè)參數(shù),用于表述輸入來(lái)自stdin而不是文件。
            2.需要注意,管道線僅將stdout導(dǎo)向stdin,不能使用2|這樣的形式單獨(dú)到處stderr,但是可以先將stderr重定向到stdout,然后使用管道命令,例如ls y* x* z* 2>&1 | sort。
            3.管道不涉及到中間文件,第一個(gè)命令的stdout沒(méi)有寫(xiě)到一個(gè)文件中,然后再由第二個(gè)命令讀取(相當(dāng)于重定向的寫(xiě)法),例如bunzip2 -c somefile.tar.bz2 | tar -xvf -命令。

            與管道相關(guān)的一些指令

            cut -d "分割字符" [-cf] fields file
            ???????? //使用某分隔符分割并列出要求的區(qū)域
            -d??? 后面接的是分割字符,默認(rèn)是空格符
            -c??? 后面接的是第幾個(gè)字符
            -f??? 后面接的是第幾個(gè)區(qū)塊
            例子:
            cat /etc/passwd | cut -d ":" -f 1
            將passwd文件中每一行里的":"用作分隔符,列出第一個(gè)區(qū)塊。
            last | cut -d " " -f 1
            以空格作為分隔,并列出第一個(gè)區(qū)塊。

            sort [-t 分隔符] [(+起始)(-結(jié)束)] [-nru] file?????? //排序
            -t???? 分隔符,用來(lái)隔開(kāi)不同的區(qū)塊,默認(rèn)是TAB
            -n??? 使用純數(shù)字排序(默認(rèn)以字母方式排序)
            -r??? 反向排序
            -u??? 相同出現(xiàn)的一行,只列出一次
            +start -end??? 由第start區(qū)塊排序到第end區(qū)塊

            wc [-lmw] file
            -l????? 計(jì)算有多少行
            -m??? 計(jì)算有多少字符
            -w??? 計(jì)算有多少字
            wc用于統(tǒng)計(jì),例如要知道目前帳號(hào)文件里有多少帳號(hào),就是用wc -l,因?yàn)?etc/passwd里一行代表一個(gè)用戶,即:cat /etc/passwd | wc -l。

            uniq [-cdu] inputfile [outputfile]????????? //默認(rèn)用來(lái)顯示所有的行一次
            -c??? 用于計(jì)算每行出現(xiàn)的次數(shù)
            -d??? 只打印不重復(fù)的行
            -u??? 只打印重復(fù)的行
            例如:
            last | cut -d " " -f 1 | sort | uniq

            tee file
            tee命令將數(shù)據(jù)同時(shí)顯示在屏幕上和文件中,使用方式如下:
            last | tee file | cut -d " " -f 1
            last的輸出數(shù)據(jù)傳入file中,也會(huì)同時(shí)傳給stdout。

            tr [-ds] SET1 [SET2]??????????????? //從標(biāo)準(zhǔn)輸入中翻譯、刪除字符串,并寫(xiě)到標(biāo)準(zhǔn)輸出中
            -d??? 刪除SET1這個(gè)字符串
            -s??? 對(duì)SET1出現(xiàn)的字符,當(dāng)連續(xù)出現(xiàn)時(shí)僅打印一次
            例如:
            cat /etc/passwd | tr -d :
            這個(gè)命令會(huì)刪除':'這個(gè)符號(hào)并顯示輸出。
            last | tr '[a-z]' '[A-Z]'
            這個(gè)命令將小寫(xiě)改成大寫(xiě),取代原有的字符。

            split [-bl num] 輸入文件 輸出文件前導(dǎo)字符
            -b??? 以文件size來(lái)分
            -l??? 以行數(shù)來(lái)分
            該指令將某文件內(nèi)容分割成幾個(gè)子文件,子文件名字為前導(dǎo)字符+aa、ab、ac等,使用-l指定每個(gè)文件的行數(shù),使用-b指定每個(gè)文件的大小。
            例子:
            split -l 5 /etc/passwd test??? //產(chǎn)生testaa、testab等文件。

            久久免费小视频| 久久精品国产日本波多野结衣 | 国产免费福利体检区久久| 久久只有这里有精品4| 久久精品国产只有精品66| 久久久91精品国产一区二区三区| 久久91精品国产91久久小草| 久久国产一片免费观看| 久久亚洲精品人成综合网| 久久精品亚洲男人的天堂| 国产情侣久久久久aⅴ免费| 日本精品久久久久久久久免费| 久久99精品久久只有精品| 伊人久久综合无码成人网| 久久久久久国产精品美女| 99久久人妻无码精品系列蜜桃| 久久这里只有精品视频99| 青青草国产精品久久久久| 精品久久人妻av中文字幕| 亚洲乱码中文字幕久久孕妇黑人| 国产午夜精品理论片久久| 日本福利片国产午夜久久| 国产韩国精品一区二区三区久久| 狠狠色婷婷久久综合频道日韩| 久久久久亚洲AV无码去区首| 国产精品伦理久久久久久| 香蕉久久夜色精品国产小说| 精品国产乱码久久久久久1区2区| 日韩人妻无码一区二区三区久久| 国产成人无码精品久久久性色| 久久这里都是精品| 国产69精品久久久久9999APGF| 久久福利资源国产精品999| 久久人人爽人人爽人人片AV麻烦| 久久久久久曰本AV免费免费| 久久久精品人妻一区二区三区蜜桃| 午夜精品久久久久久久无码| 人人狠狠综合久久亚洲高清| 国产69精品久久久久观看软件 | 成人精品一区二区久久| 国产综合精品久久亚洲|