Linux的數據流重導向,和管線命令
數據流重導向(redirect)
名稱 簡稱 代碼 使用方式
標准輸入(standard input) stdin 0
<,將文件的數據作為其他命令的輸入
<<,設定輸入結束的字符串
標准輸出(standard output) stdout 1
>,覆蓋方式將正確的數據輸出
>>,累加方式將正確的數據輸出
標准錯誤輸出(standard error output) stderr 2
2>,覆蓋方式將錯誤的數據輸出
2>>,累加方式將錯誤的數據輸出
數據流重導向,可以將命令的stdout或stderr分別輸出到其他的文件或設備中去。
也可以將文件或設備作為stdin輸入,作為命令的輸入。
多條命令的執行順序
$?代表命令執行結果,其值為0表示成功。
cmd1;cmd2 分號兩邊的命令沒有相關性,只是按順序執行
cmd1&&cmd2
1若cmd1執行完畢且正確執行($?=0),則執行cmd2
2若cmd1執行完畢且為錯誤($?<>0),則不執行cmd2
cmd1||cmd2
1若cmd1執行完畢且正確執行($?=0),則不執行cmd2
2若cmd1執行完畢且為錯誤($?<>0),則執行cmd2
cmd1&&cmd2||cmd3
1若cmd1的($?=0),則執行cmd2
2若cmd1的($?<>0),則執行cmd3
管線命令(pipe)
cmd1|cmd2 cmd1的stdout,作為cmd2的stdin
管線命令僅會處理stdout,對於stderr會予以忽略
管線命令必須能夠接受前一個命令的數據成為stdin繼續處理才行,也就是說cmd2是有限制的
具體管線命令
cut 從每行中,取出符合條件的部分
grep
在一行中,若有符合條件的部分,則輸出此行。
支持正則表達式。
sort 對文件中的多行進行排序
uniq 若有重復的多行,只輸出第一個
wc 統計文件中的行,單詞,字符,字節的數量
tee 從stdin讀取,並同時輸出到stdout和文件
tr 替換或刪除一段文字
col tab轉換成多個空格,或man page轉換為文本
join 將兩個文件中相同數據的兩行,連接成一行
paste 直接將兩個文件的兩行,合並成一行,並以tab分割
expand 將tab轉換成空格
split
將一個大文件分割成幾個小文件
可用 cat pieces* >> file 來恢復
xargs
從stdin中,以空格或換行來分割出多個參數,給其他命令
許多命令不支持管線,可以通過xargs提供參數
減號- 代表stdin或stdout
將/home裡面的文件都打包,打包的數據輸出到stdout,第一個“-”代表stdout。
經過管線後,解壓包的數據從stdin而來,第二個“-”代表stdin
Linux代碼
$ tar -cvf - /home | tar -xvf -