我正在编写一个脚本,用于启动需要使用特定端口号的服务器。在某些情况下,此端口已被占用。我想知道如何在 bash 中检查它,以便我能够以适当的方式做出反应。
我怎样才能检查Linux上某个端口是否被占用?
答案1
您可以使用 netcat 检查端口是否正在监听某些内容:
PORT_STATUS=$(nc -v <host> -z <port number> 2>&1 | grep open | wc -l )
if [[ "$PORT_STATUS" = "1" ]];then
echo Port is occupied
fi
当然,这只有在没有防火墙阻止 netcat 的情况下才有效。但如果您在服务器上本地运行它,那么至少不会有任何问题。
答案2
如果您考虑过 TCP 端口,您可以使用 netstat 检查,类似这样的操作可能会有效:
netstat -ntp | grep -v '::' | awk '{print $4}' | grep -E '^[[:digit:]]+' | awk -F: '{print $2}' | sort -n | uniq
当然,这不是原子的,因此可能会在检查操作之后但在服务启动之前占用某些端口。