linux shell小试牛刀之一——统计服务器上的网络连接数
程序员文章站
2022-03-01 17:17:44
...
今天发现一台linux服务器上的网络连接数比较多,使用ss -s
看一下,发现有差不多存在2000个连接,接下来我会通过管道并组合使用多个linux命令,统计一下哪些哪些ip与当前服务器建立的连接比较多。
1、使用ss -a
打印出所有连接
# ss -a
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
......
nl UNCONN 768 0 tcpdiag:kernel *
nl UNCONN 4352 0 tcpdiag:ss/25880 *
......
nl UNCONN 0 0 genl:kernel *
nl UNCONN 0 0 scsi-trans:kernel *
p_raw UNCONN 0 0 *:eth0 *
u_str LISTEN 0 100 public/pickup 13732 * 0
u_str LISTEN 0 100 public/cleanup 13736 * 0
......
tcp ESTAB 0 0 ::ffff:10.39.46.4:d-s-n ::ffff:10.4.106.149:46830
tcp ESTAB 0 0 ::ffff:10.39.46.4:d-s-n ::ffff:10.4.106.161:45138
tcp ESTAB 0 0 ::ffff:10.39.46.4:d-s-n ::ffff:10.4.106.132:57338
tcp ESTAB 0 0 ::ffff:10.39.46.4:d-s-n ::ffff:10.4.82.29:33724
tcp ESTAB 0 0 ::ffff:10.39.46.4:d-s-n ::ffff:10.4.106.132:49730
......
会打印出非常多连接细节
2、使用grep筛选处理ESTAB状态的tcp连接
# ss -a |grep tcp |grep ESTAB
tcp ESTAB 0 0 ::ffff:10.39.46.4:d-s-n ::ffff:10.4.95.183:55187
tcp ESTAB 0 0 ::ffff:10.39.46.4:d-s-n ::ffff:10.4.82.29:33742
tcp ESTAB 0 0 ::ffff:10.39.46.4:ddi-tcp-1 ::ffff:10.4.93.21:51003
有些上面的数据后,我想把最右面的那些ip筛选出来,从而可以对他们进行计数统计并按照连接的数量排序打印出来
3、使用cut
截取后面的部分
# ss -a |grep tcp |grep ESTAB | cut -c70-
::ffff:10.39.10.7:59182
::ffff:10.4.95.183:55187
::ffff:10.4.82.29:33742
-c
参数是指按照字符顺序来截取,-c70-
表示截取第70个字符及其后面的所有内容
4、使用grep
+正则表达式把ip地址抓出来
# ss -a |grep tcp |grep ESTAB | cut -c70- |grep -Eo ':[1234567890].*:'
:10.4.95.183:
:10.4.82.29:
:10.4.93.21:
-E
参数用来使用正则表达式,-o
参数表示我只显示匹配到的内容
5、使用tr
去掉冒号
# ss -a |grep tcp |grep ESTAB | cut -c70- |grep -Eo ':[1234567890].*:' |tr ':' ' '
10.4.95.183
10.4.82.29
10.4.93.21
6、使用sort
和uniq
进行排序和计数
# ss -a |grep tcp |grep ESTAB | cut -c70- |grep -Eo ':[1234567890].*:' |tr ':' ' '| sort |uniq -c
2 10.11.65.191
11 10.39.10.7
151 10.39.10.90
2 10.39.10.94
uniq
命令的-c
参数用来计数
7、再次使用sort
排序
# ss -a |grep tcp |grep ESTAB | cut -c70- |grep -Eo ':[1234567890].*:' |tr ':' ' '| sort |uniq -c |sort -nr
217 10.39.46.22
151 10.39.10.90
89 10.4.106.141
76 10.4.106.132
sort
命令的-n
参数表示按照数字顺序来排序,-r
参数标识逆序排列,也就是从大到小排列
这个结果就是我想要的网络连接数量统计了
下面是我写的几篇关于某个具体命令的用法
上一篇: 8.9最长的可整合子数组的长度