内容: 查看自己当前系统tcp连接各个状态的数量
查看我们系统的tcp连接命令:netstat
可选的参数:
-a 显示所有socket,包括正在监听的。
-c 每隔1秒就重新显示一遍,直到用户中断它。
-i 显示所有网络接口的信息,格式同“ifconfig -e”。
-n 以网络IP地址代替名称,显示出网络连接情形。
-r 显示核心路由表,格式同“route -e”。
-t 显示TCP协议的连接情况。
-u 显示UDP协议的连接情况。
-v 显示正在进行的工作。
我们查看的是tcp的连接,那么我们选择atn三个:
接下来我们需要对各个状态进行统计,使用命令如下:
netstat -atn|awk '/^tcp/{++count[$NF]} END {for(a in count) print a,count[a]}'
命令解析:
1、awk是进行流编辑的命令,使用它对数据流进行编辑,是一个很强大的命令,这里主要用到awk的数组
2、awk的模式是对匹配的内容进行操作,其中/^tcp/是选择tcp(其实前面如果有t选项也可以不过滤)
3、count[]数组其实是awk适配使用的,我们以状态名字为键,数量为值。所以print的时候,打印键,再
打印值就呈现出我们看到的结果了。这个用法就像c++的哈希容器一样。NF
4、NF的含义,NF其实是最后一列的意思,$NF就是取最后一列的值。因为awk是以行为处理大单元,可以
细致到列这个小单元。NF是一行有列数,$n是取第几列的意思,所以$NF就是取最后一列。而nerstat
查询结果最后一列就是状态名字
命令结果:跟我们netstat -atn查询结果一一致: