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