1. 程式人生 > >Linux 文本流與重定向

Linux 文本流與重定向

定向 soc 文件導入 輸入 tro .com mage 文件 系統

Linux有句話叫萬物皆文件,就像Java萬物皆對象一樣。

我們通過ssh連接Linux上執行shell終端bash就是通過指向文件並執行的。如圖,當前進程會生成一個fd文件,其中一些數字表示如下

  • 0:標準輸入
  • 1:標準輸出
  • 2:標準錯誤輸出

技術分享圖片

我們就是通過ssh調用bash從而將標準輸入輸入到系統系統屏幕的。

重定向又是什麽意思?

從定向是指我們可以人為的幹預標準輸入輸出的位置。簡而言之,輸入重定向是指把文件導入命令中,而輸出重定向則是把原本要輸出到屏幕的數據信息寫入到指定文件中。

標準輸出:

命令 作用
命令 1> 文件 將標準輸出重定向到一個文件中(清空源文件的數據)
命令 > 文件 同 1> 將標準輸出重定向到一個文件中(清空源文件的數據)
命令 2> 文件 將錯誤輸出重定向到一個文件中(清空源文件的數據)
命令 1>> 文件 將標準輸出重定向到一個文件中(追加到原有內容的後面)
命令 >> 文件 同 1>> 將標準輸出重定向到一個文件中(追加到原有內容的後面)
命令 2>> 文件 將錯誤輸出重定向到一個文件中(追加到原有內容的後面)
命令 >> 文件 2>&1 將標準輸出、錯誤輸出一同重定向到文件
命令 &>> 文件 同上
命令 1> 文件1 2> 文件2 將標準輸出沖重定向到一個文件,錯誤輸出重定向到另外一個文件

示例:

1.summer文件不存在,會報錯。我們將標準輸出重定向到aaa.out文件,錯誤輸出到bbb.out文件:

技術分享圖片

2.將標準輸出、錯誤輸出重定向到同一個文件ccc.out:

技術分享圖片

我們發現明明正確的在前,錯誤的在後,為什麽到文件中卻是錯誤的在前面呢?

因為,bash執行命令是先輸出錯誤信息的,如下圖所示:

技術分享圖片

標準輸入:

命令 作用
命令 < 文件 將文件作為命令的標準輸入
命令 << 分界符 從標準輸入讀入,遇到分界符停止【註意對換行符敏感】
命令 <<< 內容 從字符串讀數據
命令 < 文件一 1>文件二 將文件一作為命令的標準輸入,並將標準輸出重定向到文件二

示例:

1.如圖將sh01.sh作為標準輸入,wc -l來執行查看行數等同於下面的通道模式:

技術分享圖片

2.如圖aaa文件裏面就寫了個“/”,將aaa文件作為標準輸入,然後將結果輸出到bbb文件:

技術分享圖片

3.使用read命令來讀取aaa變量
技術分享圖片

二、重定向之socket案例

exec 8<> /dev/tcp/www.baidu.com/80
echo -e "GET / HTTP/1.0\n" >& 8

技術分享圖片

cat <& 8

技術分享圖片

Linux 文本流與重定向