1、管道符介紹
管道符|
,也是Shell命令。
管道符的作用是連結多個命令,把命令1的結果作為命令2的操作物件。
命令格式:命令1 | 命令2
命令1的正確輸出作為命令2的操作物件
提示:
管道符的基本作用和之前說過的-exec
選項的基本作用是一樣的。命令1的結果作為命令2的操作物件的這種操作稱為文字流操作
(就相當於流水線,第一個人操作完流水線轉給第二個人操作)。但是find
命令不支援文字流操作,在find
命令中加入管道符,輸出的結果是不正確的,所以在find
命令中新增了-exec \;
模擬管道符的作用。
2、管道符應用
(1)例子1:
舉個例子,我們經常需要使用ll
命令檢視檔案的長格式,不過在有些目錄中檔案眾多,比如/etc/
目錄,使用ll
命令顯示的內容就會非常多,只能看到最後的內容,而不能看到前面輸出的內容。
這時我們馬上想到more
命令可以分屏顯示檔案內容,可是怎麼讓more
命令分屏顯示命令的輸出呢?
注意:
more
命令是分屏顯示檔案中的資料,是顯示字串。而ll
命令是輸出的是命令的結果(也就是輸出的是檔名)。
我想到了一種笨辦法:
#用輸出重定向,把ll命令的輸出儲存到/root/testfile檔案中
[root@localhost ~]# ll -a /etc/ >> /root/testfile
#既然testfile是檔案,當然可以用more命合分屏顯示了
[root@localhost ~]# more /root/testfile
總用量1784
drwxr-xr-x.105 root root 12288 10月 21 12:49.
dr-xr-xr-x.26 root root 4096 6月 5 19:06..
.…首路部分輸出…
-rwxr-xr-x.1 root root 687 6月22 2012 auto.smb
--More--(7%)
可是這樣操作實在不方便,這時就可以利用管道符了。
命令如下:
[root@localhost ~]# ll -a /etc/ | more
因為管道符是文字流操作,管道符把前邊 ll
命令的結果轉換成文字,然後供more
命令分屏顯示。
(2)例子2:
通過ll命令
,在顯示/etc/
資料夾裡檔案的結果中,搜尋yum
的檔名,應該使用find
命令還是grep
命令?
通過上邊的提示,find
命令是搜尋檔名,grep
命令是搜尋文字內容的,管道符是文字流操作,之後都是文字結果(也就是字串),所以需要用grep
命令。還有就是find
命令也不支援管道符操作。
[root@localhost ~ ] #ll -a /etc/ | grep yum
(3)例子3:
netstat
命令(CentOS 7
中,需要安裝net-snmp.x86_64
,net-tools.x86_64
兩個包才有此命令。7.5系統中已經自動安裝)格式如下:
netstat
命令是一個非常重要和常見的查詢網路狀態的網路命令。
netstat
命令格式:
[root@localhost ~]# netstat [選項]
選項:
-a:列出所有網路狀態,包括 Socket程式
-c秒數:指定每隔幾秒重新整理一次網路狀態
-n:使用Ip地址和埠號顯示,不使用域名與服務名
-p:顯示PID和程式名
-t:顯示使用TCP協議埠的連線狀況-u:顯示使用UDP協議埠的連線狀況
-1:僅顯示監聽狀態的連線
-r:顯示路由表
示例:
# 需求:檢視當前遠端登陸有多少人
[root@localhost ~]# netstat -an | grep "ESTABLISHED" | wc -l
# 網路中為ESTABLISHED狀態的,表示是遠端連結。
# wc -l :統計有多少行。
# 查詢系統中所有開啟的埠。
[root@DevOps ~]# netstat -tuln