如何正确监控 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 地址和数字端口号。
awk
和 cut
是仅提取一列的工具。 (或者,好吧,Awk 本身就是一种简单的编程语言,所以它确实可以做更多的事情。)这可能应该重构为单个 Awk 脚本;
awk '{ split(, n, /:/); print n[1] }'
这会在输出的第五列中提取冒号之前的内容,即 netstat
输出中不带尾随端口号的 IP 地址。
(你的例子中美元符号前的反斜杠是必需的,因为 watch
命令在双引号中。如果你想 运行 this inside watch
,放回反斜杠。)
sort | uniq | sort -n
是按出现次数排序的常用习惯用法。第一个 sort
只是将相同的行并排放置,以便 uniq
可以正常工作(它需要排序的输入)。使用 -c
,uniq
显示有多少相邻行合并为一条,然后我们根据该数字排序。
因此,总而言之,您会得到一个 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
我运行跨越这个命令
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 地址和数字端口号。
awk
和 cut
是仅提取一列的工具。 (或者,好吧,Awk 本身就是一种简单的编程语言,所以它确实可以做更多的事情。)这可能应该重构为单个 Awk 脚本;
awk '{ split(, n, /:/); print n[1] }'
这会在输出的第五列中提取冒号之前的内容,即 netstat
输出中不带尾随端口号的 IP 地址。
(你的例子中美元符号前的反斜杠是必需的,因为 watch
命令在双引号中。如果你想 运行 this inside watch
,放回反斜杠。)
sort | uniq | sort -n
是按出现次数排序的常用习惯用法。第一个 sort
只是将相同的行并排放置,以便 uniq
可以正常工作(它需要排序的输入)。使用 -c
,uniq
显示有多少相邻行合并为一条,然后我们根据该数字排序。
因此,总而言之,您会得到一个 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