『學了就忘』Linux基礎命令 — 33、管道符的使用

繁華似錦Fighting發表於2021-11-09

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_64net-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

相關文章