Linux

命令類似於 netstat -np 但按狀態和 PID 分組?

  • June 24, 2021

是否有類似於netstat -np但按狀態PID分組的命令?

我想知道目前按程序分組的特定狀態下的伺服器連接數。

如同,

102 squid ESTABLISHED
32 httpd ESTABLISHED

我使用 RHEL5。

您可以使用您喜歡的任何格式sort重新組織輸出。netstat

$ netstat -anpt 2>&1 | tail -n +5 | sort -k7,7 -k 6,6

這將首先使用第 7 列(程序名稱/PID)對輸出進行排序,然後是狀態(ESTABLISHED、LISTEN 等)。

**注意:**命令的第一部分,netstat -anpt 2>&1 | tail -n +5 ..會將 STDOUT 上可能出現的所有輸出也定向到 STDIN,然後刪除前 5 行,它們是netstat我們不感興趣的樣板輸出。

例子

$ netstat -anpt 2>&1 | tail -n +5 | sort -k7,7 -k 6,6
tcp        0      0 192.168.1.20:49309      192.168.1.103:631       ESTABLISHED 2077/gnome-settings 
tcp        0      0 192.168.1.20:38393      204.62.14.135:443       ESTABLISHED 2260/mono           
tcp        0      0 192.168.1.20:39738      74.125.192.125:5222     ESTABLISHED 2264/pidgin         
tcp        0      0 192.168.1.20:40097      87.117.201.130:6667     ESTABLISHED 2264/pidgin         
tcp        0      0 192.168.1.20:53920      217.168.150.38:6667     ESTABLISHED 2264/pidgin         
...
tcp        1      0 192.168.1.20:50135      190.93.247.58:80        CLOSE_WAIT  24714/google-chrome 
tcp        1      0 192.168.1.20:44420      192.168.1.103:631       CLOSE_WAIT  24714/google-chrome 
tcp        0      0 192.168.1.20:36892      74.125.201.188:5228     ESTABLISHED 24714/google-chrome 
tcp        0      0 192.168.1.20:43778      74.125.192.125:5222     ESTABLISHED 24714/google-chrome 
tcp        0      0 192.168.1.20:33749      198.252.206.140:80      ESTABLISHED 24714/google-chrome 
...

您可以使用類似的方法來使用各種工具(例如wc或)來獲取計數uniq -c

改變輸出

如果您真的想獲得如下所示的輸出netstat

102 squid ESTABLISHED
32 httpd ESTABLISHED

您可以使用awk&進行進一步的切片和切塊sed。這可以變得更緊湊,但應該讓你開始並完成工作。

$ netstat -anpt 2>&1 | tail -n +5 | awk '{print $7,$6}' | sort -k1,1 -k3,3 \
   | sed 's#/# #' | column -t
2264   pidgin          ESTABLISHED
2264   pidgin          ESTABLISHED
24714  google-chrome   CLOSE_WAIT
24714  google-chrome   CLOSE_WAIT
24714  google-chrome   ESTABLISHED
24714  google-chrome   ESTABLISHED
...
24714  google-chrome   ESTABLISHED
26358  ssh             ESTABLISHED
26358  ssh             ESTABLISHED
26358  ssh             ESTABLISHED
26358  ssh             LISTEN
26358  ssh             LISTEN
26358  ssh             LISTEN

注意: column -t只需將所有輸出對齊在漂亮的列中。

計算連接數

最後在統計事件方面做你想做的事:

$ netstat -anpt 2>&1 | tail -n +5 | awk '{print $7,$6}' | sort -k1,1 -k3,3 \
   | sed 's#/# #' | column -t | uniq -c
 6 -      LISTEN
 8 -      TIME_WAIT
 1 2077   gnome-settings  ESTABLISHED
 1 2260   mono            ESTABLISHED
10 2264   pidgin          ESTABLISHED
 2 24714  google-chrome   CLOSE_WAIT
27 24714  google-chrome   ESTABLISHED
 3 26358  ssh             ESTABLISHED
 4 26358  ssh             LISTEN
 1 26359  ssh             ESTABLISHED
 4 3042   thunderbird     ESTABLISHED
 1 32472  monodevelop     ESTABLISHED
 2 32472  monodevelop     LISTEN
 1 32533  mono            ESTABLISHED
 1 32533  mono            LISTEN
 1 3284   monodevelop     LISTEN
 1 3365   mono            LISTEN
 1 4528   mono            LISTEN
 1 8416   dropbox         ESTABLISHED
 1 8416   dropbox         LISTEN

第一列代表計數。

引用自:https://unix.stackexchange.com/questions/132471