你背單詞時
阿拉斯加的鱈魚正躍出水面
你算數學時
太平洋彼岸的海鷗振翅掠過城市上空
你晚自習時
極圖中的夜空散漫了五彩斑斕
但是少年你別著急
在你為自己未來踏踏實實地努力時
那些你感覺從來不會看到的景色
那些你覺得終身不會遇到的人
正一步步向你走來。
——網易云熱評《Something Just Like This》
還未深刻地了解Linux。知道的不多,那這次我們淺談一下Linux中的I/O重定向和管道問題(讓我不禁想到了馬里奧),運行環境還如上次博客:CentOS6和CentOS7,工具為SecureCRT
SecureCRT是一款支持SSH(SSH1和SSH2)的終端仿真程序,簡單的說是Windows下登錄UNIX或Linux服務器主機的軟件。SecureCRT支持SSH,同時支持Telnet和rlogin協議。SecureCRT是一款用于連接運行包括Windows、UNIX和VMS的理想工具。百科得到的,總之SecureCRT是一個偽終端,我們在這上面解決問題。
一、I/O重定向(輸入輸出重定向),首先我們了解一下Linux終端里面的輸入和輸出,輸入輸出來自/dev/fd (fd是一個符號文件/軟鏈接文件,不是固定存儲在硬盤當中,而是隨著終端的創建產生的臨時目錄。產生對應鏈接。)
Linux給程序提供三種I/O設備,分別為:
標準輸入:Standard input (STDIN)
標準正確輸出:Standard output (STDOUT)
標準錯誤輸出:Standard error (STDERR)
Linux命令執行過程:
(1)我們可以把標準輸出重新定向到文件
格式:Command >/>> filename
使用 > 命令
>把STDOUT重定向到文件 (默認)
2>把STDERR重定向到文件
&>把所有輸出重定向到文件 (新式方法CentOS6以后)
2>&1把所有輸出重定向到文件 (老式方法CentOS6之前)
舉個栗子
眾所周知,存在/etc/app,不存在/dev/app,則:
此外使用 > 文件內容會被覆蓋,為了防止誤操作可以使用命令set -C:禁止將內容覆蓋已有文件,但可以追加,使用后想要偶爾覆蓋文件,可以使用 >|file 來強制覆蓋。相反set+C可以允許覆蓋
(2)使用 >> 命令重定向
一言不合就上圖
標準正確輸出和錯誤輸出還可以各自定向至不同位置,方便信息的查看。
Command > /path/to/file.out 2> /path/to/error.out
():合并多個輸出到目的文件
二、 使用 < 來重定向標準輸入
格式:Command < filename
某些命令能夠接受從文件中導入的STDIN
tr ‘a-z’ ‘A-Z’ < filename
該命令會把輸入文件中的小寫字符都轉換成大寫字符
tr -d abc < filename
該命令會刪除輸入文件中的所有abc中任意字符
當然,還可以使用文件來代替鍵盤的輸入
cat > filea < fileb
除了文本文件,其余也可以比如執行文件
把多行發送給STDIN
使用“<<終止詞”命令從鍵盤把多行重導向給STDIN,多數使用EOF或END
輸入時直到 終止詞 位置的所有文本都發送給STDIN,文本有時被稱 為就地文本(heretext)。
接下來重點來了,在實際工作中我們常用管道來轉發各種標準輸出
管道(Pipe)
管道(使用符號“| ”表示)用來連接命令
Command1 | Command2 | Command3 | …
將Command1 的STDOUT 發送給Command2 的STDIN ,Command2的STDOUT 發送Command3 的STDIN
STDERR 默認是不能通過管道轉發,可利用2>&1 或 |& 實現
管道可以無限接續下去直到把文件處理滿意
示例:獲取root目錄所在分區的可用空間(百分比)
獲取本機的IP地址
重定向到多個目標(tee)
Command1 | tee [-a] filename | Command2
可以把Command1的STDOUT保存在文件中,此外做為Command2的輸入
-a 可以追加內容
原創文章,作者:Mozart,如若轉載,請注明出處:http://www.www58058.com/81952