<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          bash中奇奇怪怪的文件重定向

          共 2125字,需瀏覽 5分鐘

           ·

          2023-08-31 08:26


                     


          0x01 測試程序


          本文會用以下測試程序,來演示在bash中,如何進(jìn)行各種文件重定向:



          上圖是一段rust代碼,其主要邏輯是,從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),然后將這些數(shù)據(jù)分別寫到標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出里。


          有關(guān)什么是標(biāo)準(zhǔn)輸入/輸出/錯誤輸出,請閱讀我之前寫的一篇文章:到底什么是標(biāo)準(zhǔn)輸入輸出


          0x02 將標(biāo)準(zhǔn)輸入重定向到 /dev/null



          /dev/null 是linux下的一個特殊文件,從該文件讀取數(shù)據(jù)時,內(nèi)核會直接返回EOF,即讀不到任何數(shù)據(jù),所以在上圖中,stdout/stderr行的輸出都為空。


          0x03 將標(biāo)準(zhǔn)輸入重定向到普通文件



          上圖先用echo命令,把hello字符串寫到stdin.log,然后執(zhí)行測試程序,把它的標(biāo)準(zhǔn)輸入重定向到stdin.log,此時stdout/stderr行就都輸出了hello字符串。


          0x04 將標(biāo)準(zhǔn)輸出重定向到普通文件



          上圖把標(biāo)準(zhǔn)輸出重定向到了stdout.log,所以終端只輸出了stderr行,而stdout行被寫到了stdout.log文件中。


          0x05 將標(biāo)準(zhǔn)錯誤輸出重定向到普通文件



          這次把標(biāo)準(zhǔn)錯誤輸出也做了重定向,所以終端上沒有任何輸出,所有輸出都保存到了各自的文件里。


          因?yàn)闃?biāo)準(zhǔn)錯誤輸出的文件描述符是2,所以上面用了 2> 這種符號重定向標(biāo)準(zhǔn)錯誤輸出。


          0x06 將標(biāo)準(zhǔn)輸出及錯誤輸出重定向到同一文件



          上圖先把標(biāo)準(zhǔn)輸出重定向到hello.log,然后再通過 2>&1 這個符號,把標(biāo)準(zhǔn)錯誤輸出的文件描述符2,指向當(dāng)前標(biāo)準(zhǔn)輸出的文件描述符1指向的文件,即hello.log,這樣標(biāo)準(zhǔn)錯誤輸出就也指向了hello.log。


          這里需要注意重定向操作符的順序,比如下面這個就是錯的:



          上圖中先通過 2>&1,把標(biāo)準(zhǔn)錯誤輸出的文件描述符2,指向當(dāng)前標(biāo)準(zhǔn)輸出的文件描述符1指向的文件,因?yàn)楫?dāng)前文件描述符1和2都指向終端,所以這一步是沒有任何效果的。


          然后,再將標(biāo)準(zhǔn)輸出重定向到hello.log


          通過上述步驟,標(biāo)準(zhǔn)輸出內(nèi)容就寫到了hello.log里,但標(biāo)準(zhǔn)錯誤輸出內(nèi)容,還是寫到了終端里,所以這個寫法是不行的。


          除了上述方式外,我們還可以用下面的方式,將標(biāo)準(zhǔn)輸出/錯誤輸出都重定向到同一文件:



          0x07 將標(biāo)準(zhǔn)輸出及錯誤輸出追加到同一文件


          以上介紹的,將輸出重定向到文件的方式,都會覆蓋掉原文件的內(nèi)容,如果不想覆蓋原文件的內(nèi)容,而是想把新的輸出追加到該文件,可以用下面的方式:



          和覆蓋原文件使用的命令差不多,只是多了一個大于號而已。


          0x08 將指定字符串作為標(biāo)準(zhǔn)輸入內(nèi)容



          上面只是將單行字符串作為標(biāo)準(zhǔn)輸入內(nèi)容,如果想把多行字符串作為標(biāo)準(zhǔn)輸入內(nèi)容,可以用以下方式:



          上圖中,先將各種輸出都重定向到hello.log,然后再將兩個xxx之間的內(nèi)容,作為標(biāo)準(zhǔn)輸入。


          注意,xxx這個字符串是可以任意指定的。


          0x09 將標(biāo)準(zhǔn)輸出及錯誤輸出重定向到指定tcp服務(wù)器


          先用ncat命令開啟一個tcp服務(wù)器,監(jiān)聽端口9999:



          然后用以下命令,將所有輸出都重定向到該服務(wù)器:



          上圖中,localhost指定的是目標(biāo)服務(wù)器的地址,9999指定的是目標(biāo)服務(wù)器的端口,其余部分是固定的。


          在執(zhí)行完該命令后,查看ncat命令那張圖,就能看到對應(yīng)的輸出了。


          0x0a 其他


          更多信息,請查看bash的man文檔。



          最近很多小伙伴找我要一些程序員必備資料,于是我翻出了壓箱底的寶藏,免費(fèi)分享給大家!


          掃描海報二維碼免費(fèi)獲取。


          瀏覽 633
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  北条麻妃人妻中文字幕91影视 | 国产女人操逼视频 | 91九色麻豆 | 亚洲阿v天堂 | 中国女人性爱毛片 |