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 -