Linux學(xué)習(xí):管道和重定向
---- 在Linux系統(tǒng)當(dāng)中,大多數(shù)命令都很簡(jiǎn)單,很少有復(fù)雜功能的命令。每個(gè)命令往往只實(shí)現(xiàn)一個(gè)或幾個(gè)很簡(jiǎn)單的功能。
---- 我們可以通過(guò)將不同功能的命令組合在一起使用,以達(dá)到完成某個(gè)復(fù)雜功能的目的。
---- Linux中,幾乎所有命令的返回?cái)?shù)據(jù)都是純文本的(因?yàn)槊疃际沁\(yùn)行在CLI - Command line Interface命令行界面下),而純文本
形式的數(shù)據(jù)又是絕大多數(shù)命令的輸入格式,這就讓多命令協(xié)作稱(chēng)為可能。
---- Linux的命令行為我們提供了管道和重定向機(jī)制,多命令協(xié)作就是通過(guò)管道和重定向完成的。
---- 命令行Shell的數(shù)據(jù)流有以下定義:?
名稱(chēng)
說(shuō)明
編號(hào)
默認(rèn)
STDIN
標(biāo)準(zhǔn)輸入
0
鍵盤(pán)
STDOUT
標(biāo)準(zhǔn)輸出
1
終端
STDERR
標(biāo)準(zhǔn)錯(cuò)誤
2
終端
命令通過(guò) STDIN 接收參數(shù)或數(shù)據(jù),通過(guò) STDOUT 輸出結(jié)果或通過(guò) STDERR 輸出錯(cuò)誤。
通過(guò)管道和重定向,我們可以控制CLI的數(shù)據(jù)流。
---- 重定向
關(guān)鍵字
定義
>(1>)
將STDOUT重定向到文件(覆蓋)
>>
將STDOUT重定向到文件(追加)
2>
將STDERR重定向到文件(覆蓋)
2>&1
將STDERR與STDOUT結(jié)合
(標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出)
<
重定向STDIN
在csh環(huán)境下:
> 和 2>: 如果目標(biāo)文件不存在,則創(chuàng)建文件。如果存在,則覆蓋。
將/etc/passwd的內(nèi)容作為輸入給grep命令,來(lái)查找root所在的行。
---- 管道
關(guān)鍵字
定義
|
將一個(gè)命令的STDOUT作為另一個(gè)命令的STDIN
?
[yanxia.dong@eslruntime07?exercise]$?ls file??out??outfile [yanxia.dong@eslruntime07?exercise]$?ls?-l?|?grep?out -rw-r--r--?1?yanxia.dong?users?29?Apr?15?15:12?out -rw-r--r--?1?yanxia.dong?users??6?Apr?15?15:22?outfile [yanxia.dong@eslruntime07?exercise]$?find?.?-user?yanxia.dong?|?grep?file ./file ./outfile [yanxia.dong@eslruntime07?exercise]$?find?.?-user?yanxia.dong?>?myout?|?grep?file [yanxia.dong@eslruntime07?exercise]$?cat?myout? . ./out ./file ./outfile ./myout [yanxia.dong@eslruntime07?exercise]$?find?.?-user?yanxia.dong?|?grep?file?>?myout [yanxia.dong@eslruntime07?exercise]$?cat?myout? ./file ./outfile
管道通常用來(lái)組合不同的命令,以實(shí)現(xiàn)一個(gè)復(fù)雜的功能。
重定向通常用來(lái)保存某命令的輸出信息或錯(cuò)誤信息。可以用來(lái)記錄執(zhí)行結(jié)果或保存錯(cuò)誤信息到一個(gè)指定的文件。(保存log等)
---- script 多個(gè)命令的輸出都需要記錄,可以用script
[yanxia.dong@eslruntime07?~]$?script Script?started,?file?is?typescript.
我們?cè)趩?dòng) script 時(shí)沒(méi)有指定文件名,它會(huì)自動(dòng)記錄到當(dāng)前目錄下一個(gè)名為 typescript 的文件中。也可以用 -a 參數(shù)指定文件名
[yanxia.dong@selruntime07?~]$?script?-a?my.txt Script?started,?file?is?my.txt
此時(shí)終端的輸出內(nèi)容被記錄到 my.txt 這個(gè)文件中。
退出 script 時(shí),用 exit 命令。