如何正确监控 VPS linux 命令

How to properly monitor VPS linux command

我运行跨越这个命令

watch -n 30 "netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n"

它列出了连接到我的服务器的 IP,不是吗?有人可以在这里分解所有管道命令并告诉我其他可能与服务器流量监控类似的命令吗?

watch 运行 重复执行一系列命令,-n 50 每 50 秒一次,因此您可以看到输出随时间的变化。

netstat显示网络连接、接口等信息,选项-n选择数字输出,-t选择TCP连接,-u选择UDP。因此,您将获得 table 个活动的 TCP 和 UDP 连接,标准化为仅 IP 地址和数字端口号。

awkcut 是仅提取一列的工具。 (或者,好吧,Awk 本身就是一种简单的编程语言,所以它确实可以做更多的事情。)这可能应该重构为单个 Awk 脚本;

 awk '{ split(, n, /:/); print n[1] }'

这会在输出的第五列中提取冒号之前的内容,即 netstat 输出中不带尾随端口号的 IP 地址。

(你的例子中美元符号前的反斜杠是必需的,因为 watch 命令在双引号中。如果你想 运行 this inside watch,放回反斜杠。)

sort | uniq | sort -n 是按出现次数排序的常用习惯用法。第一个 sort 只是将相同的行并排放置,以便 uniq 可以正常工作(它需要排序的输入)。使用 -cuniq 显示有多少相邻行合并为一条,然后我们根据该数字排序。

因此,总而言之,您会得到一个 IP 地址列表,这些地址已向您的主机开放连接,并按升序排列。 (对于这个特定的用例,降序可能更有意义——sort -rn 以相反的顺序对数字进行排序。)

如果你想学习这些东西,将任务分成两部分是有意义的 -- 一半是理解 netstat 和相关的网络工具,另一半是一般文本处理以提取人类-来自潜在大量计算机可读数据的可读信息。对于前者,可能会看一本网络管理手册。对于后者,也许先看看 GNU coreutils documentation,特别关注文本处理实用程序。

出于娱乐价值,这里将整个管道重构为主要是 Awk。

netstat -ntu |
awk '{ split(, n, /:/); a[n]++ }
    END { for (ip in a) print a[ip], ip }' |
sort -rn