我可以获取端口上的单个 TIME_WAIT 计数,
netstat -nat | grep :11300 | grep TIME_WAIT | wc -l;
但是如何基于所有端口执行此操作例如:
11300 2900 connection
3306 1200 connection
80 890 connection
答案1
这些天我发送了sed
用于此类事物的信息。
$ netstat -nt | sed -r -n 's/^tcp +[0-9]+ +[0-9]+ [0-9\.]+(:[0-9]+).+TIME_WAIT/\1/p' | sort | uniq -c | sort -n
5 :443
8 :80
这里我们感兴趣的是一行看起来特别,但实际上只是其中的一部分。所以我们用匹配组为该部分定义正则表达式,然后只打印我们关心的匹配行。我还没有找到更好的解决方法sort | uniq -c
。最后一种排序是为了美观和实用。
答案2
我确信有一种更简洁的方法可以做到这一点,而无需重复使用 double- awk
'ing 和 double- grep
'ing。(希望有人可以详细说明这一点)
基于 Shell 的(ksh
和bash
)For 循环
for x in $ (netstat -nat | grep TIME_WAIT | awk '{print $4}' | \
awk -F":" '{print $2}' | sort -u) ; do
printf "TIME_WAIT on Port $x : `netstat -nat|grep ":$x"|grep TIME_WAIT|wc -l`\n"
done
输出
TIME_WAIT on Port 42489 : 1
TIME_WAIT on Port 80 : 9