利用Linux所提供的管道符“|”將兩個(gè)命令隔開,管道符左邊命令的輸出就會(huì)作為管道符右邊命令的輸入。 連續(xù)使用管道意味著第一個(gè)命令的輸出會(huì)作為 第二個(gè)命令的輸入,第二個(gè)命令的輸出又會(huì)作為第三個(gè)命令的輸入,依此類推。下面來看看管道是如何在構(gòu)造一條Linux命令中得到應(yīng)用的。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了自貢免費(fèi)建站歡迎大家使用!
注意:
1、管道命令只處理前一個(gè)命令正確輸出,不處理錯(cuò)誤輸出。
2、管道命令右邊命令,必須能夠接收標(biāo)準(zhǔn)輸入流命令才行。
這條命令使用一個(gè)管道符“|”建立了一個(gè)管道。管道將rpm -qa命令的輸出(包括系統(tǒng)中所有安裝的RPM包)作為grep命令的輸入,從而列出帶有l(wèi)icq字符的RPM包來。
這條命令使用了兩個(gè)管道,利用第一個(gè)管道將cat命令(顯示passwd文件的內(nèi)容)的輸出送給grep命令,grep命令找出含有“/bin /bash”的所有行;第二個(gè)管道將grep的輸出送給wc命令,wc命令統(tǒng)計(jì)出輸入中的行數(shù)。這個(gè)命令的功能在于找出系統(tǒng)中有多少個(gè)用戶使用bash。
區(qū)別是:
1、左邊的命令應(yīng)該有標(biāo)準(zhǔn)輸出 | 右邊的命令應(yīng)該接受標(biāo)準(zhǔn)輸入
左邊的命令應(yīng)該有標(biāo)準(zhǔn)輸出 右邊只能是文件
左邊的命令應(yīng)該需要標(biāo)準(zhǔn)輸入 右邊只能是文件
2、管道觸發(fā)兩個(gè)子進(jìn)程執(zhí)行"|"兩邊的程序;而重定向是在一個(gè)進(jìn)程內(nèi)執(zhí)行
這些都是網(wǎng)上總結(jié)很多的,其實(shí)只要多加清楚用法,也一定有自己的一份不同描述。
簡單來說就是,一個(gè)命令的結(jié)果作為另外一個(gè)命令(結(jié)果)的輸入,管道是linux提供的一種常見的進(jìn)程通信工具,也是很多shell命令能夠靈活組合產(chǎn)生強(qiáng)大用途的一個(gè)重要工具。
管道是Linux由Unix那里繼承過來的進(jìn)程間的通信機(jī)制,它是Unix早期的一個(gè)重要通信機(jī)制。其思想是,在內(nèi)存中創(chuàng)建一個(gè)共享文件,從而使通信雙方利用這個(gè)共享文件來傳遞信息。由于這種方式具有單向傳遞數(shù)據(jù)的特點(diǎn),所以這個(gè)作為傳遞消息的共享文件就叫做“管道”。
在管道的具體實(shí)現(xiàn)中,根據(jù)通信所使用的的文件是否具有名稱,有“匿名管道”和“命名管道”。
管道命令符 " | " 的作用是將前一個(gè)命令的標(biāo)準(zhǔn)輸出當(dāng)作后一個(gè)命令的標(biāo)準(zhǔn)輸入,格式為"命令A(yù)|命令B"。
例如:
搜索rsyslogd進(jìn)程: $ ps -ef | grep rsyslogd
用反野形式查看/etc 目錄中有哪些文件: $ ls -l /etc/ | more
bash解釋器支持多種文本通配符,包括:
我們之前在學(xué)文本查詢搜索命令時(shí)就用到了通配符,例如,在 /etc 目錄下搜索所有的以host開頭的文件:
$ find /etc -name "host*"
另外,bash解釋器還支持很多的特殊字符擴(kuò)展:
例如:
先定義名稱為PRICE的變量值為5
$ PRICE=5
輸出“價(jià)格是5”:
輸出“價(jià)格是$5”,但因?yàn)槊涝?hào)與代表變量取值的$符號(hào)沖突,所以需要用到轉(zhuǎn)義字符:
使用單引號(hào),變量將不再被取值:
執(zhí)行 uname -a 后可以查看到本機(jī)內(nèi)核的版本與架構(gòu)信息(反引號(hào)里面的命令會(huì)被執(zhí)行):