我用来检查端口是否已建立的命令是否错误?
count=$(netstat -an | awk '$4 ~ /:'"$PORT"'$/ && $6 == "ESTABLISHED" {print $0}'| wc -l)
并视其为$count > 0
既定事实?
答案1
我不确定您说的“将 $count > 0 视为已建立?”是什么意思,但这看起来像是到给定端口的有效已建立连接数。您可能希望限制到给定的接口或协议(这样两个不同的服务在同一端口上监听但使用不同的接口时就不会混淆)。
此外,您还可以稍微简化命令:
count=$(netstat -an | awk -v port=":$PORT\$" '$4 ~ port && $6 == "ESTABLISHED" {count++} END {print count}')
您也可以使用lsof
。lsof -i :$PORT
将列出该端口上的打开的连接,并且您可以使用-n
(类似于)和选项(-n
仅列出 PID、文件描述符编号和 TCP 状态)使其更容易解析:netstat
-F T
lsof -ni ":$PORT" -FT | grep -c TST=ESTABLISHED
答案2
你的方法似乎有效,但不太优雅。我宁愿这样做:
if [[ "$(LANG=C netstat -nt | awk -F" +|:" '/ESTABLISHED/{print$5}')" =~ "$PORT" ]]; then
echo $PORT established
else
echo $PORT not established
fi
命令替换只是打印已建立的主机列表,而不管用户的区域设置如何,条件表达式测试是否$PORT
在此列表中,then
如果是则执行列表,else
如果不在则执行列表。