0x01 測(cè)試程序
本文會(huì)用以下測(cè)試程序,來(lái)演示在bash中,如何進(jìn)行各種文件重定向:
上圖是一段rust代碼,其主要邏輯是,從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),然后將這些數(shù)據(jù)分別寫(xiě)到標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出里。
0x02 將標(biāo)準(zhǔn)輸入重定向到 /dev/null
/dev/null 是linux下的一個(gè)特殊文件,從該文件讀取數(shù)據(jù)時(shí),內(nèi)核會(huì)直接返回EOF,即讀不到任何數(shù)據(jù),所以在上圖中,stdout/stderr行的輸出都為空。
0x03 將標(biāo)準(zhǔn)輸入重定向到普通文件
上圖先用echo命令,把hello字符串寫(xiě)到stdin.log,然后執(zhí)行測(cè)試程序,把它的標(biāo)準(zhǔn)輸入重定向到stdin.log,此時(shí)stdout/stderr行就都輸出了hello字符串。
0x04 將標(biāo)準(zhǔn)輸出重定向到普通文件
上圖把標(biāo)準(zhǔn)輸出重定向到了stdout.log,所以終端只輸出了stderr行,而stdout行被寫(xiě)到了stdout.log文件中。
0x05 將標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到普通文件
這次把標(biāo)準(zhǔn)錯(cuò)誤輸出也做了重定向,所以終端上沒(méi)有任何輸出,所有輸出都保存到了各自的文件里。
因?yàn)闃?biāo)準(zhǔn)錯(cuò)誤輸出的文件描述符是2,所以上面用了 2> 這種符號(hào)重定向標(biāo)準(zhǔn)錯(cuò)誤輸出。
0x06 將標(biāo)準(zhǔn)輸出及錯(cuò)誤輸出重定向到同一文件
上圖先把標(biāo)準(zhǔn)輸出重定向到hello.log,然后再通過(guò) 2>&1 這個(gè)符號(hào),把標(biāo)準(zhǔn)錯(cuò)誤輸出的文件描述符2,指向當(dāng)前標(biāo)準(zhǔn)輸出的文件描述符1指向的文件,即hello.log,這樣標(biāo)準(zhǔn)錯(cuò)誤輸出就也指向了hello.log。
這里需要注意重定向操作符的順序,比如下面這個(gè)就是錯(cuò)的:
上圖中先通過(guò) 2>&1,把標(biāo)準(zhǔn)錯(cuò)誤輸出的文件描述符2,指向當(dāng)前標(biāo)準(zhǔn)輸出的文件描述符1指向的文件,因?yàn)楫?dāng)前文件描述符1和2都指向終端,所以這一步是沒(méi)有任何效果的。
然后,再將標(biāo)準(zhǔn)輸出重定向到hello.log
通過(guò)上述步驟,標(biāo)準(zhǔn)輸出內(nèi)容就寫(xiě)到了hello.log里,但標(biāo)準(zhǔn)錯(cuò)誤輸出內(nèi)容,還是寫(xiě)到了終端里,所以這個(gè)寫(xiě)法是不行的。
除了上述方式外,我們還可以用下面的方式,將標(biāo)準(zhǔn)輸出/錯(cuò)誤輸出都重定向到同一文件:
0x07 將標(biāo)準(zhǔn)輸出及錯(cuò)誤輸出追加到同一文件
以上介紹的,將輸出重定向到文件的方式,都會(huì)覆蓋掉原文件的內(nèi)容,如果不想覆蓋原文件的內(nèi)容,而是想把新的輸出追加到該文件,可以用下面的方式:
和覆蓋原文件使用的命令差不多,只是多了一個(gè)大于號(hào)而已。
0x08 將指定字符串作為標(biāo)準(zhǔn)輸入內(nèi)容
上面只是將單行字符串作為標(biāo)準(zhǔn)輸入內(nèi)容,如果想把多行字符串作為標(biāo)準(zhǔn)輸入內(nèi)容,可以用以下方式:
上圖中,先將各種輸出都重定向到hello.log,然后再將兩個(gè)xxx之間的內(nèi)容,作為標(biāo)準(zhǔn)輸入。
注意,xxx這個(gè)字符串是可以任意指定的。
0x09 將標(biāo)準(zhǔn)輸出及錯(cuò)誤輸出重定向到指定tcp服務(wù)器
先用ncat命令開(kāi)啟一個(gè)tcp服務(wù)器,監(jiān)聽(tīng)端口9999:
然后用以下命令,將所有輸出都重定向到該服務(wù)器:
上圖中,localhost指定的是目標(biāo)服務(wù)器的地址,9999指定的是目標(biāo)服務(wù)器的端口,其余部分是固定的。
在執(zhí)行完該命令后,查看ncat命令那張圖,就能看到對(duì)應(yīng)的輸出了。
審核編輯:劉清
-
Linux系統(tǒng)
+關(guān)注
關(guān)注
4文章
601瀏覽量
28145 -
TCP通信
+關(guān)注
關(guān)注
0文章
146瀏覽量
4409 -
bash終端
+關(guān)注
關(guān)注
0文章
7瀏覽量
2032 -
rust語(yǔ)言
+關(guān)注
關(guān)注
0文章
57瀏覽量
3086
原文標(biāo)題:bash中奇奇怪怪的文件重定向
文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論