站长提醒:徒弟们注意了,awk要掌握,这个东西很重要的,关于shell的东西,我都汇总到了《趣谈shell》,有需要的请找我来要。

使用下面shell语句即可查看当前linux系统中并发连接数:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

给大家简单介绍一下awk的用法吧。

awk不是shell的子民,shell和awk之间是宗主国与藩属国之间的关系,犹如朝鲜属于明朝和清朝的藩属国。

awk不是命令而是编程语言,它与shell一样,有自己的语法规范,可以定义变量、定义数组,执行条件判断。

awk的操作对象是文件行,也就是说,awk是逐行处理的,处理完当前行,再处理下一行。awk把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

(1)/^tcp/:表示搜索以tcp开头的行,然后awk自动会将每行数据以空格为分隔符进行切分成列。

(2)$NF是内置变量,搜索到以tcp开头的行,awk自动会切分成列。$NF变量引用最后一列,可能是ESTABLISHED,也可能是TIME_WAIT,如下所示:

[root@root~]# netstat -n

Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 172.31.250.129:6379     47.244.242.115:56516    ESTABLISHED
tcp        0      0 127.0.0.1:52294         127.0.0.1:9200          ESTABLISHED
tcp        0      0 172.31.250.129:52378    47.244.242.115:6379     ESTABLISHED
tcp        0      0 127.0.0.1:9200          127.0.0.1:59592         ESTABLISHED
tcp        0      0 127.0.0.1:9000          127.0.0.1:45702         TIME_WAIT  
tcp        0      0 127.0.0.1:59596         127.0.0.1:9200          ESTABLISHED
tcp        0      0 127.0.0.1:9200          127.0.0.1:59650         ESTABLISHED
tcp        0      0 127.0.0.1:9200          127.0.0.1:59630         ESTABLISHED
tcp        0      0 127.0.0.1:59624         127.0.0.1:9200          ESTABLISHED
tcp        0      0 172.31.250.129:38966    47.244.242.115:6379     ESTABLISHED
tcp        0      0 127.0.0.1:9200          127.0.0.1:52348         ESTABLISHED

(3)++S[$NF]:新建数组S,此时数组的下标不是0,1,2...,而是$NF的值,也就是说,下标是ESTABLISHED、TIME_WAIT等tcp的状态。由于awk是逐行处理的,处理完当前行,再处理下一行,所以++S[$NF]的作用是累加ESTABLISHED、TIME_WAIT等tcp状态的数量。

(4)END:表示awk逐行统计完毕之后,打印出统计结果,而统计结果存放在数组S中。

(5){for(a in S) print a, S[a]}:表示打印数组s里面存放的统计结果。

总之,上述整个shell命令的执行结果如下所示:

[root@root ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

ESTABLISHED 169
TIME_WAIT 25

由此,可以查看Linux系统中并发连接数。

标签: none

添加新评论