一、標準輸入輸出
- linux會為每一個打開的文件分配一個fd(file descriptor墙贱,文件描述符)
- linux提供三種輸入輸出(I/O)設備
- 標準輸入 (STDIN),0贱傀, 默認鍵盤輸入
- 標準輸出 (STDOUT)惨撇,1,默認輸出終端窗口
- 標準錯誤輸出 (STDERR)府寒,2魁衙,默認輸出終端窗口
- I/O重定向指改變標準輸入、標準輸出株搔、標準錯誤輸出的默認位置
二纺棺、標準輸出、標準錯誤輸出重定向
- 語法:
> file <!--將標準輸出重定向至file-->
2 > file <!--將標準錯誤輸出重定向至file-->
&> file <!--將標準輸出和標準錯誤輸出一起重定向至file-->
- 實驗:
1.標準輸出和標準錯誤輸出重定向
2.標準輸出和標準錯誤輸出一起重定向邪狞,其實質(zhì)是將標準錯誤輸出重定向至標準輸出祷蝌,再一起輸出至文件
注意:上圖中的兩種方法是等價的,但是注意使用第一種方法時要注意順序帆卓,
2>&1
必須放在標準輸出重定向后面巨朦,否則會報錯
-
>
和>>
的區(qū)別:前者會覆蓋文件內(nèi)容,后者在原有內(nèi)容后追加-
set -C
禁止覆蓋文件操作剑令,set +C
允許覆蓋文件操作 -
>|
強行執(zhí)行覆蓋操作糊啡,即使已經(jīng)set -C
狀態(tài)下也執(zhí)行
-
- 多條命令結果合并重定向
(command1 ; command2) > file
-
> linkfile
會將軟鏈接指向的源文件清空,而軟鏈接文件本身不變
三吁津、tr 轉(zhuǎn)換和刪除字符
- 語法:
tr [OPTION]... SET1 [SET2]
- 選項意義:
-c -C <!--取SET1字符集的補集-->
-s <!--合并連續(xù)重復的字符>
-d <!--刪除SET1字符集中的字符-->
-t <!--按順序位將SET1字符集精確替換成SET2字符集中的字符-->
- 實驗:理解
-t
選項的意義
- 解釋:當SET1位數(shù)大于SET2時棚蓄,默認SET1找不到對應位的字符會自動使用SET2最后一位替換;當使用
-t
時碍脏,只會精確匹配到SET2的位數(shù)梭依,SET1多出的位數(shù)不再替換。
四典尾、標準輸入重定向
1.從文件輸入STDIN役拴,使用<
將文件內(nèi)容重定向為命令的標準輸入
tr 'a-z' 'A-Z' < /etc/issue <!--將/etc/issue內(nèi)容中的所有小寫字母變?yōu)榇髮戄敵龅浇K端-->
tr 'a-z' 'A-Z' < /etc/issue > a.out <!--將上一個命令的結果重定向輸出至文件a.out-->
tr 'a-z' 'A-Z' > b.out < /etc/issue <!--效果與上一命令相同-->
2.使用<< 終止詞
多行重定向至標準輸入
- 實驗:使用多行重定向發(fā)送郵件
五、| 管道
- 語法:
command1 | command2 | command3
- 管道將上一個命令的標準輸出傳給下一個命令作為標準輸入钾埂,從而能組合使用多個工具河闰。
- 標準錯誤輸出無法通過管道傳輸給下一個命令,需要將上一個命令的標準錯誤轉(zhuǎn)換為標準輸出褥紫,再使用管道傳輸姜性。具體實現(xiàn)可以采用如下兩種方式:
command1 2>&1 | command2
command1 |& command2
- 管道中的
-
符號:可以使用-
代替管道命令中可能存在的臨時文件
tar -cvf - /home | tar -xvf - <!--將/home文件打包后解包,打包文件是臨時文件髓考,用"-"代替-->
- tee 重定向至多個目標
command1 | tee [-a ] file | command2
<!--command1的標準輸出一方面?zhèn)鬏斨羉ommand2的標準輸入部念,另一方面重定向至文件file-->
tee
命令默認覆蓋文件,若要追加內(nèi)容到文件,增加-a
選項實驗:列出
/root
和/err
目錄下的文件印机,將輸出結果重定向為文件a.out
矢腻,同時將結果中的小寫字母轉(zhuǎn)為大寫,然后重定向為文件b.out
射赛。/err
目錄不存在多柑。
- 本實驗需要注意將標準錯誤輸出轉(zhuǎn)為標準輸出,這樣才能使用管道命令楣责。