我遇到了这个命令
watch -n 30 "netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -n"
它列出了连接到我的服务器的 IP,不是吗?有人可以在这里分解所有管道命令并告诉我其他可能类似于服务器流量监控的命令吗?
我遇到了这个命令
watch -n 30 "netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -n"
它列出了连接到我的服务器的 IP,不是吗?有人可以在这里分解所有管道命令并告诉我其他可能类似于服务器流量监控的命令吗?
watch
每 50 秒一遍又一遍地运行一系列命令,-n 50
这样您就可以看到输出随时间的变化。
netstat
显示有关网络连接、接口等的信息。该选项-n
选择数字输出、-t
选择 TCP 连接和-u
选择 UDP。因此,您将获得一个活动 TCP 和 UDP 连接表,标准化为仅 IP 地址和数字端口号。
awk
并且cut
是仅提取一列的工具。(或者,好吧,Awk 本身就是一种简单的编程语言,所以它确实可以做更多的事情。)这可能应该重构为单个 Awk 脚本;
awk '{ split($5, n, /:/); print n[1] }'
这会在输出的第五列中提取冒号之前的内容,即输出中没有尾随端口号的 IP 地址netstat
。
(示例中美元符号前的反斜杠是必需的,因为watch
命令用双引号括起来。如果要在内部运行watch
,请放回反斜杠。)
sort | uniq | sort -n
是按出现次数排序的常用习语。第一个sort
只是将相同的行放在一起,以便uniq
可以正常工作(它需要排序输入)。使用-c
,uniq
显示有多少相邻的行合并为一个,然后我们对该数字进行排序。
因此,总而言之,您会按升序获得与您的主机打开连接的 IP 地址列表。(对于这个特定的用例,降序可能更有意义——sort -rn
以相反的顺序对数字进行排序。)
如果你想学习这些东西,把任务分成两部分是有意义的——一半是理解netstat
和相关的网络工具,另一半是一般的文本处理,从潜在的大量计算机中提取人类可读的信息- 可读数据。对于前者,大概看看网络管理手册。对于后者,也许可以先查看GNUcoreutils
文档,特别关注文本处理实用程序。
为了娱乐价值,这里将整个管道重构为主要是 Awk。
netstat -ntu |
awk '{ split($5, n, /:/); a[n]++ }
END { for (ip in a) print a[ip], ip }' |
sort -rn