命令类似于 netstat -np 但按状态和 PID 分组?

命令类似于 netstat -np 但按状态和 PID 分组?

netstat -np是否有类似于但分组的命令状态PID

我想知道按程序分组的特定状态下服务器连接的当前计数。

如同,

102 squid ESTABLISHED
32 httpd ESTABLISHED

我用的是RHEL5。

答案1

您可以使用您喜欢的任何格式来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

第一列表示计数。

答案2

维基百科

在 Linux 上,netstat(“net-tools”的一部分)是已弃用ss应使用, (iproute2 的一部分)来代替。

网络工具软件包已经十多年没有在 Linux 上发布过。对于一个旨在管理和监控不断发展的内核通信接口的程序套件来说,如果没有更新,这将是一个很长的时间——特别是当你谈论实际运行互联网的内核时。

不过值得庆幸的是,有积极维护的ip路由2包 - 包括ss实用程序。

有了ss你就可以做你要求的事情,比如:

ss -np state ESTABLISHED

man ss

#USAGE EXAMPLES
   ss -t -a
#          Display all TCP sockets.
#
   ss -t -a -Z
#          Display all TCP sockets with process SELinux
#          security contexts.
#
   ss -u -a
#          Display all UDP sockets.
#
   ss -o state established '( dport = :ssh or sport  =   :ssh )'
#          Display all established ssh connections.
#
   ss -x src /tmp/.X11-unix/*
#          Find  all  local  processes  connected  to X server.
#
   ss -o state fin-wait-1 '( sport = :http or sport  = :https )' dst 193.233.7/24
#          List all the tcp sockets in state FIN-WAIT-1
#          for our apache to network  193.233.7/24  and
#          look at their timers.

答案3

您可以使用 netstat、column 和 awk:

netstat -anpt | column -t | awk '{print $1,$6,$7}'

这将打印第一、第六和第七列。

tcp LISTEN -
tcp LISTEN -
tcp ESTABLISHED 2084/firefox
tcp ESTABLISHED 2084/firefox
tcp6 LISTEN -

答案4

我真的很感谢这种帮助,所以是时候合作了:

netstat -tun | grep 1521 | awk '{print $6}' | uniq -c

结果: 在此输入图像描述

相关内容