监控服务器连接 - Netstat 格式问题
Monitoring Server Connections - Netstat formatting issue
我最近在服务器上遇到了一些问题。
所以我只想留下一个 window 来显示连接设备的唯一性和 IP。
我一直在使用:
watch -n 5 "netstat -tn 2>/dev/null | grep :80 | awk '{print }' | sed 's/.*::ffff://' | sort | uniq -c | sort -nr"
这工作正常,但我有一个我无法解决的格式问题,似乎是在出现本地连接时。
输出示例(屏幕截图)
不带管道的 Netstat 示例
混淆的原因是我正在使用 awk '{print }'
仅打印第 5 列
我假设它是因为我正在尝试使用带点的手表,但有些东西与另一个不一致。
任何人都可以建议对 one liner 进行调整,
或者任何人都可以建议另一种工具来监视与服务器的活动连接(对本地连接不感兴趣)
已编辑
这是我现在正在使用的。
由于格式问题的数量,我决定不使用 Watch。
RED='3[00;31m'
RESTORE='3[0m'
YELLOW='3[00;33m'
PURPLE='3[00;35m'
LCYAN='3[01;36m'
BLUE='3[00;34m'
LIGHTGRAY='3[00;37m'
while true
do
echo -e ${RED}"Connection Script"
echo -e ${YELLOW}"Current Active Connections to the Server Port 80"
netstat -tn 2>/dev/null | awk '/:80 / {print }' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr
echo -e ${RESTORE}
echo -e ${PURPLE}"FTP Connections: 21"
netstat -tn 2>/dev/null | awk '/:21 / {print }' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr
echo -e ${RESTORE}
echo -e ${LCYAN}"SSH/'SFTP' Connections: 22"
netstat -tn 2>/dev/null | awk '/:22 / {print }' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr
echo -e ${RESTORE}
echo -e ${RED}"Yellowfin Connections: 8181"
netstat -tn 2>/dev/null | awk '/:8181 / {print }' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr
echo -e ${RESTORE}
MySQLCon=$(netstat -tn 2>/dev/null | awk '/:3306 /' | sort | uniq -c | sort -nr | wc -l)
echo -e ${RESTORE}
echo -e $LIGHTGRAY"MySQL Active Connections on port 3306 =" $MySQLCon
echo -e ${RESTORE}
sleep 5
clear
done
感谢此处提供的反馈,这是一条有趣的学习曲线
输出脚本示例:
由于IP特殊,部分图片已被涂黑;-)
此 "odd" 输出中包含一些内容。
查看watch
声称是运行的命令。具体看awk
脚本。看到是awk '{print }'
?
那是因为您将整个命令嵌入双引号中,所以 shell 本身会扩展 </code> 作为位置参数,它甚至在 <code>awk
运行之前就消失了,您最终会打印出来整行。
从管道中删除 sed
,您会看到 every 行是输出中的完整行。 (或者从管道中删除 awk
,您会发现输出根本没有改变。)
某些行 没有 的唯一原因是 sed
删除了包含该行的 ::ffff:
之前的所有内容。您会注意到,末尾的 IPv4 行中有 none(这就是它们完整显示的原因)。因此,您甚至接近预期输出的事实是因为您 双重覆盖 "only print the remote IP column" 目标。
这也是您在输出中获得状态列的原因(尽管一开始并没有表明您想要它)。
在命令中转义 $
到 "fix" 管道。
那是为了 "not using grep
and sed
" 试试这个:
netstat -tn | awk '/:80 / {print }'
看看你想要的东西有多接近你。
这将匹配错误列中的 :80
,因此如果您想将其限制为 Local Address
列,您可以使用 ~ /:80$/
而不是 /:80 /
.
我最近在服务器上遇到了一些问题。 所以我只想留下一个 window 来显示连接设备的唯一性和 IP。
我一直在使用:
watch -n 5 "netstat -tn 2>/dev/null | grep :80 | awk '{print }' | sed 's/.*::ffff://' | sort | uniq -c | sort -nr"
这工作正常,但我有一个我无法解决的格式问题,似乎是在出现本地连接时。
输出示例(屏幕截图)
awk '{print }'
仅打印第 5 列
我假设它是因为我正在尝试使用带点的手表,但有些东西与另一个不一致。
任何人都可以建议对 one liner 进行调整, 或者任何人都可以建议另一种工具来监视与服务器的活动连接(对本地连接不感兴趣)
已编辑 这是我现在正在使用的。 由于格式问题的数量,我决定不使用 Watch。
RED='3[00;31m'
RESTORE='3[0m'
YELLOW='3[00;33m'
PURPLE='3[00;35m'
LCYAN='3[01;36m'
BLUE='3[00;34m'
LIGHTGRAY='3[00;37m'
while true
do
echo -e ${RED}"Connection Script"
echo -e ${YELLOW}"Current Active Connections to the Server Port 80"
netstat -tn 2>/dev/null | awk '/:80 / {print }' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr
echo -e ${RESTORE}
echo -e ${PURPLE}"FTP Connections: 21"
netstat -tn 2>/dev/null | awk '/:21 / {print }' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr
echo -e ${RESTORE}
echo -e ${LCYAN}"SSH/'SFTP' Connections: 22"
netstat -tn 2>/dev/null | awk '/:22 / {print }' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr
echo -e ${RESTORE}
echo -e ${RED}"Yellowfin Connections: 8181"
netstat -tn 2>/dev/null | awk '/:8181 / {print }' | sed 's/.*::ffff://' | sed 's/:.*//' | sort | uniq -c | sort -nr
echo -e ${RESTORE}
MySQLCon=$(netstat -tn 2>/dev/null | awk '/:3306 /' | sort | uniq -c | sort -nr | wc -l)
echo -e ${RESTORE}
echo -e $LIGHTGRAY"MySQL Active Connections on port 3306 =" $MySQLCon
echo -e ${RESTORE}
sleep 5
clear
done
感谢此处提供的反馈,这是一条有趣的学习曲线 输出脚本示例:
由于IP特殊,部分图片已被涂黑;-)
此 "odd" 输出中包含一些内容。
查看watch
声称是运行的命令。具体看awk
脚本。看到是awk '{print }'
?
那是因为您将整个命令嵌入双引号中,所以 shell 本身会扩展 </code> 作为位置参数,它甚至在 <code>awk
运行之前就消失了,您最终会打印出来整行。
从管道中删除 sed
,您会看到 every 行是输出中的完整行。 (或者从管道中删除 awk
,您会发现输出根本没有改变。)
某些行 没有 的唯一原因是 sed
删除了包含该行的 ::ffff:
之前的所有内容。您会注意到,末尾的 IPv4 行中有 none(这就是它们完整显示的原因)。因此,您甚至接近预期输出的事实是因为您 双重覆盖 "only print the remote IP column" 目标。
这也是您在输出中获得状态列的原因(尽管一开始并没有表明您想要它)。
在命令中转义 $
到 "fix" 管道。
那是为了 "not using grep
and sed
" 试试这个:
netstat -tn | awk '/:80 / {print }'
看看你想要的东西有多接近你。
这将匹配错误列中的 :80
,因此如果您想将其限制为 Local Address
列,您可以使用 ~ /:80$/
而不是 /:80 /
.