linux管道學(xué)習(xí)

linux管道學(xué)習(xí)

ID:32366630

大?。?9.50 KB

頁數(shù):14頁

時間:2019-02-03

linux管道學(xué)習(xí)_第1頁
linux管道學(xué)習(xí)_第2頁
linux管道學(xué)習(xí)_第3頁
linux管道學(xué)習(xí)_第4頁
linux管道學(xué)習(xí)_第5頁
資源描述:

《linux管道學(xué)習(xí)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫

1、Linux管道學(xué)習(xí)知識點:1.管道左右的命令是并行執(zhí)行的,而且是從右向左執(zhí)行的,因此就需要在執(zhí)行命令之前先對標(biāo)準(zhǔn)輸出流及錯誤流等各種流進行分析,分析清楚了之后,也就相當(dāng)于已經(jīng)制定好了計劃(打個比方,就相當(dāng)于排水管道全部已經(jīng)鋪設(shè)完成,只等著各種水流來流動),然后并行啟動程序,這里還要強調(diào)的是,這里的并行指的是“有依賴關(guān)系的并行”,反正大家不要理解成“必須前一條命令執(zhí)行完畢,出來結(jié)果之后才能送給后續(xù)的命令接著處理”就可以了。2.基本的FD只有3個,即0、1、2,其他的需要手動開啟,開啟的方法是:exec[3到255之間的數(shù)]>&[0到2之間的數(shù)];關(guān)閉的方法是:ex

2、ecnum>&-。3.還要很清楚子shell的概念,除了bash內(nèi)建的那些指令之外,其他的指令都相當(dāng)于先fork再exec,也就是用子shell來執(zhí)行的,還有shell及其他各種腳本也都是在子shell中執(zhí)行的(詳情請參考《shell編程之shell問答錄》)。子shell會繼承父shell中已經(jīng)打開的FD,注意子shell只會知道父shell中開啟了哪些FD,但并不會知道父shell中的各個FD是怎樣的一個關(guān)系,例如究竟是2>&1了呢,還是1>&2了呢,這些信息子shell都是不會知道的。4.查看當(dāng)前打開了哪些FD,有兩種方法:ls/proc/$$/fd或者l

3、sof-p$$(觀察最后幾行即可)5.任何一個FD都是指向屏幕的(用ls-l/proc/$$/fd便可以看出它們指向的是同一個設(shè)備文件),至于誰是輸入誰是輸出,是由<和>決定的,和0、1、2沒有關(guān)系6.管道

4、只接受標(biāo)準(zhǔn)輸出流;屏幕回顯使用得是標(biāo)準(zhǔn)錯誤流;s=$(lsno)這種命令也是利用標(biāo)準(zhǔn)輸出流;而一條命令的正常輸出是從FD1出來,而錯誤輸出是從FD2出來;只不過剛開始時FD1恰好與標(biāo)準(zhǔn)輸出流對接,而FD2恰好與標(biāo)準(zhǔn)錯誤流對接。7.任何一條外部命令都需要建立一個子shell,例如lsyes1>&2;lsno2>&1;這兩條命令之間沒有任何聯(lián)系,它們運行時各自建

5、立的子shell的PID肯定是不同的。8.可以把若干條語句放到()中組成一個nestedsub-shell(內(nèi)嵌的子shell),這樣就會使得()中的語句執(zhí)行后的各個流匯總到一起集中處理了,例如(lsyes;lsno)2>&1,最后的2>&對()里面的兩條語句相當(dāng)于都是有效力的9.在<或者>的左側(cè)寫FD號,在右側(cè)寫&加FD號,但需要強調(diào)一點是,對于左側(cè)不寫FD號的情況,>默認(rèn)左側(cè)寫了1,而<默認(rèn)左側(cè)寫了0下面就來將一些例子,可以參考《I/O重定向詳解及應(yīng)用實例》。首先來說一下我自己理解的有關(guān)FD的模型,只有在一條命令里(也就是同一個shell里)才可能有流的各種

6、定向問題,例如exec2>&3;ls2>&1;catfile1>&3;這幾條語句之間沒有任何關(guān)系;而lsno2>&11>&33>&2就有關(guān)系了,最終導(dǎo)致FD2和FD3均指向了標(biāo)準(zhǔn)輸出口,而FD1指向了3口(這里我將各個口依次命名為:標(biāo)準(zhǔn)輸入口,標(biāo)準(zhǔn)輸出口,錯誤輸出口,3口,4口,5口等等)。說的通俗一點,就是大家頭腦中一定要有一個各類水管(FD1、FD2、FD3等等)與各個口對接的模型,只有理解了這一點才能得心應(yīng)手的玩弄各個流于股掌之間。此外,2>&1的意思是各個口是永遠不變的,也就是它們固定,這種操作能影響的僅僅是FD指向誰的問題,含義就是FD2指向FD1所指

7、的那個口,各個FD在沒有亂指之前都指向自己對應(yīng)的口。下面就一些例子來分析一下:exec3>&1;exec4>&1;((lsyesno2>&11>&33>&-;echo'bacoo'>&4)3>&1

8、egrep*>file)4>&1

9、grepba;echo$?;catfile;exec3>&-;exec4>&-;運行結(jié)果:bacoo0ls:無法訪問no:沒有該文件或目錄yes打開FD3和FD4;FD2指向1口,F(xiàn)D1指向3口,F(xiàn)D3關(guān)閉;向4口輸出bacoo,從這個括號里流出來三股流(ls的輸出流,ls的錯誤流,echo的輸出流),由于該三股流還不能直接和硬件打

10、交道,還得受制于外界對它們的影響,因此這里就不再表現(xiàn)為三股流從哪個口出來,取而代之的是表現(xiàn)為用FD幾輸出什么東西,對這三股流的統(tǒng)一操作是讓其FD3指向1口,這下才徹底定下來了那三股流最后從哪個口出來。exec6<>file;以輸入輸出方式打開文件file,而且是通過6號通道。echo"hello">&6;echo"world!">&6;read-u6x;echo$x;#不過這里讀不出東西來,因為當(dāng)前文件指針是在file即將要寫入數(shù)據(jù)的地方,也就是在world!行的下一行,因此讀出的是空白,加入file已經(jīng)有了內(nèi)容,第一行是aaa,第二行是bbb,那么你再exec

11、6<>file;read

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。