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