91在线一级黄片|91视频在线观看18|成人夜间呦呦网站|91资源欧美日韩超碰|久久最新免费精品视频一区二区三区|国产探花视频在线观看|黄片真人免费三级片毛片|国产人无码视频在线|精品成人影视无码三区|久久视频爱久久免费精品

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
LinuxShell管道詳解
通過(guò)前面的學(xué)習(xí),我們已經(jīng)知道了怎樣從文件重定向輸入,以及重定向輸出到文件。Shell 還有一種功能,就是可以將兩個(gè)或者多個(gè)命令(程序或者進(jìn)程)連接到一起,把一個(gè)命令的輸出作為下一個(gè)命令的輸入,以這種方式連接的兩個(gè)或者多個(gè)命令就形成了
管道(pipe)。

成都創(chuàng)新互聯(lián)專注于寧津網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供寧津營(yíng)銷型網(wǎng)站建設(shè),寧津網(wǎng)站制作、寧津網(wǎng)頁(yè)設(shè)計(jì)、寧津網(wǎng)站官網(wǎng)定制、成都小程序開(kāi)發(fā)服務(wù),打造寧津網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供寧津網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

linux 管道使用豎線
|連接多個(gè)命令,這被稱為
管道符。Linux 管道的具體語(yǔ)法格式如下:

command1 | command2
command1 | command2 [ | commandN... ]

當(dāng)在兩個(gè)命令之間設(shè)置管道時(shí),管道符
|左邊命令的輸出就變成了右邊命令的輸入。只要第一個(gè)命令向標(biāo)準(zhǔn)輸出寫入,而第二個(gè)命令是從標(biāo)準(zhǔn)輸入讀取,那么這兩個(gè)命令就可以形成一個(gè)管道。大部分的 Linux 命令都可以用來(lái)形成管道。

為什么使用管道?

我們先看下面一組命令,使用 mysqldump(一個(gè)數(shù)據(jù)庫(kù)備份程序)來(lái)備份一個(gè)叫做 wiki 的數(shù)據(jù)庫(kù):

mysqldump -u root -p '123456' wiki > /tmp/wikidb.backup
gzip -9 /tmp/wikidb.backup
scp /tmp/wikidb.backup username@remote_ip:/backup/mysql/

上述這組命令主要做了如下任務(wù):

  • mysqldump 命令用于將名為 wike 的數(shù)據(jù)庫(kù)備份到文件 /tmp/wikidb.backup;其中-u-p選項(xiàng)分別指出數(shù)據(jù)庫(kù)的用戶名和密碼。
  • gzip 命令用于壓縮較大的數(shù)據(jù)庫(kù)文件以節(jié)省磁盤空間;其中-9表示最慢的壓縮速度最好的壓縮效果。
  • scp 命令(secure copy,安全拷貝)用于將數(shù)據(jù)庫(kù)備份文件復(fù)制到 IP 地址為 remote_ip 的備份服務(wù)器的 /backup/mysql/ 目錄下。其中username是登錄遠(yuǎn)程服務(wù)器的用戶名,命令執(zhí)行后需要輸入密碼。

上述三個(gè)命令依次執(zhí)行。然而,如果使用管道的話,你就可以將 mysqldump、gzip、ssh 命令相連接,這樣就避免了創(chuàng)建臨時(shí)文件 /tmp/wikidb.backup,而且可以同時(shí)執(zhí)行這些命令并達(dá)到相同的效果。

使用管道后的命令如下所示:

mysqldump -u root -p '123456' wiki | gzip -9 | ssh username@remote_ip "cat > /backup/wikidb.gz"

這些使用了管道的命令有如下特點(diǎn):

  • 命令的語(yǔ)法緊湊并且使用簡(jiǎn)單。
  • 通過(guò)使用管道,將三個(gè)命令串聯(lián)到一起就完成了遠(yuǎn)程 mysql 備份的復(fù)雜任務(wù)。
  • 從管道輸出的標(biāo)準(zhǔn)錯(cuò)誤會(huì)混合到一起。

上述命令的數(shù)據(jù)流如下圖所示:

重定向和管道的區(qū)別

乍看起來(lái),管道也有重定向的作用,它也改變了數(shù)據(jù)輸入輸出的方向,那么,管道和重定向之間到底有什么不同呢?

簡(jiǎn)單地說(shuō),重定向操作符>將命令與文件連接起來(lái),用文件來(lái)接收命令的輸出;而管道符|將命令與命令連接起來(lái),用第二個(gè)命令來(lái)接收第一個(gè)命令的輸出。如下所示:

command > file
command1 | command1

有些讀者在學(xué)習(xí)管道時(shí)會(huì)嘗試如下的命令,我們來(lái)看一下會(huì)發(fā)生什么:

command1 > command2

答案是,有時(shí)嘗試的結(jié)果將會(huì)很糟糕。這是一個(gè)實(shí)際的例子,一個(gè) Linux 系統(tǒng)管理員以超級(jí)用戶(root 用戶)的身份執(zhí)行了如下命令:

cd /usr/bin
ls > less

第一條命令將當(dāng)前目錄切換到了大多數(shù)程序所存放的目錄,第二條命令是告訴 Shell 用 ls 命令的輸出重寫文件 less。因?yàn)?/usr/bin 目錄已經(jīng)包含了名稱為 less(less 程序)的文件,第二條命令用 ls 輸出的文本重寫了 less 程序,因此破壞了文件系統(tǒng)中的 less 程序。

這是使用重定向操作符錯(cuò)誤重寫文件的一個(gè)教訓(xùn),所以在使用它時(shí)要謹(jǐn)慎。

Linux管道實(shí)例

【實(shí)例1】將 ls 命令的輸出發(fā)送到 grep 命令:

[c.biancheng.net]$ ls | grep log.txt
log.txt

上述命令是查看文件 log.txt 是否存在于當(dāng)前目錄下。

我們可以在命令的后面使用選項(xiàng),例如使用
-al選項(xiàng):

[c.biancheng.net]$ ls -al | grep log.txt
-rw-rw-r--.  1 mozhiyan mozhiyan    0 4月  15 17:26 log.txt

管道符
|與兩側(cè)的命令之間也可以不存在空格,例如將上述命令寫作
ls -al|grep log.txt;然而我還是推薦在管道符
|和兩側(cè)的命令之間使用空格,以增加代碼的可讀性。

我們也可以重定向管道的輸出到一個(gè)文件,比如將上述管道命令的輸出結(jié)果發(fā)送到文件 output.txt 中:

[c.biancheng.net]$ ls -al | grep log.txt >output.txt
[c.biancheng.net]$ cat output.txt
-rw-rw-r--.  1 mozhiyan mozhiyan    0 4月  15 17:26 log.txt

【實(shí)例2】使用管道將 cat 命令的輸出作為 less 命令的輸入,這樣就可以將 cat 命令的輸出每次按照一個(gè)屏幕的長(zhǎng)度顯示,這對(duì)于查看長(zhǎng)度大于一個(gè)屏幕的文件內(nèi)容很有幫助。

cat /var/log/message | less

【實(shí)例3】查看指定程序的進(jìn)程運(yùn)行狀態(tài),并將輸出重定向到文件中。

[c.biancheng.net]$ ps aux | grep httpd > /tmp/ps.output
[c.biancheng.net]$ cat /tem/ps.output
mozhiyan  4101     13776  0   10:11 pts/3  00:00:00 grep httpd
root      4578     1      0   Dec09 ?      00:00:00 /usr/sbin/httpd
apache    19984    4578   0   Dec29 ?      00:00:00 /usr/sbin/httpd
apache    19985    4578   0   Dec29 ?      00:00:00 /usr/sbin/httpd
apache    19986    4578   0   Dec29 ?      00:00:00 /usr/sbin/httpd
apache    19987    4578   0   Dec29 ?      00:00:00 /usr/sbin/httpd
apache    19988    4578   0   Dec29 ?      00:00:00 /usr/sbin/httpd
apache    19989    4578   0   Dec29 ?      00:00:00 /usr/sbin/httpd
apache    19990    4578   0   Dec29 ?      00:00:00 /usr/sbin/httpd
apache    19991    4578   0   Dec29 ?      00:00:00 /usr/sbin/httpd

【實(shí)例4】顯示按用戶名排序后的當(dāng)前登錄系統(tǒng)的用戶的信息。

[c.biancheng.net]$ who | sort
mozhiyan :0           2019-04-16 12:55 (:0)
mozhiyan pts/0        2019-04-16 13:16 (:0)

who 命令的輸出將作為 sort 命令的輸入,所以這兩個(gè)命令通過(guò)管道連接后會(huì)顯示按照用戶名排序的已登錄用戶的信息。

【實(shí)例5】統(tǒng)計(jì)系統(tǒng)中當(dāng)前登錄的用戶數(shù)。

[c.biancheng.net]$ who | wc -l
5

管道與輸入重定向

輸入重定向操作符<可以在管道中使用,以用來(lái)從文件中獲取輸入,其語(yǔ)法類似下面這樣:

command1 < input.txt | command2
command1 < input.txt | command2 -option | command3

例如,使用 tr 命令從 os.txt 文件中獲取輸入,然后通過(guò)管道將輸出發(fā)送給 sort 或 uniq 等命令:

[c.biancheng.net]$ cat os.txt
redhat
suse
centos
ubuntu
solaris
hp-ux
fedora
centos
redhat
hp-ux
[c.biancheng.net]$ tr a-z A-Z 

管道與輸出重定向

你也可以使用重定向操作符>或>>將管道中的最后一個(gè)命令的標(biāo)準(zhǔn)輸出進(jìn)行重定向,其語(yǔ)法如下所示:

command1 | command2 | ... | commandN > output.txt
command1 < input.txt | command2 | ... | commandN > output.txt

【實(shí)例1】使用 mount 命令顯示當(dāng)前掛載的文件系統(tǒng)的信息,并使用 column 命令格式化列的輸出,最后將輸出結(jié)果保存到一個(gè)文件中。

[c.biancheng.net]$ mount | column -t >mounted.txt
[c.biancheng.net]$ cat mounted.txt
proc         on  /proc                  type  proc        (rw,nosuid,nodev,noexec,relatime)
sysfs        on  /sys                   type  sysfs       (rw,nosuid,nodev,noexec,relatime,seclabel)
devtmpfs     on  /dev                   type  devtmpfs    (rw,nosuid,seclabel,size=496136k,nr_inodes=124034,mode=755)
securityfs   on  /sys/kernel/security   type  securityfs  (rw,nosuid,nodev,noexec,relatime)
tmpfs        on  /dev/shm               type  tmpfs       (rw,nosuid,nodev,seclabel)
devpts       on  /dev/pts               type  devpts      (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
tmpfs        on  /run                   type  tmpfs       (rw,nosuid,nodev,seclabel,mode=755)
tmpfs        on  /sys/fs/cgroup         type  tmpfs       (rw,nosuid,nodev,noexec,seclabel,mode=755)
#####此處省略部分內(nèi)容#####

【實(shí)例2】使用 tr 命令將 os.txt 文件中的內(nèi)容轉(zhuǎn)化為大寫,并使用 sort 命令將內(nèi)容排序,使用 uniq 命令去除重復(fù)的行,最后將輸出重定向到文件 ox.txt.new。

[c.biancheng.net]$ cat os.txt
redhat
suse
centos
ubuntu
solaris
hp-ux
fedora
centos
redhat
hp-ux
[c.biancheng.net]$ tr a-z A-Z os.txt.new
[c.biancheng.net]$ cat os.txt.new
CENTOS
FEDORA
HP-UX
REDHAT
SOLARIS
SUSE
UBUNTU

名稱欄目:LinuxShell管道詳解
網(wǎng)站網(wǎng)址:http://m.jiaoqi3.com/article/cdhhehh.html