我正在尝试检查端口可用性并使用shell脚本获取返回值。示例:如果端口8080空闲则返回true,否则返回false。有人可以帮忙吗?我尝试了netstat
。
答案 0 :(得分:15)
lsof
是你的朋友:
# lsof -i:8080 # free on my machine
# echo $?
1
# lsof -i:5353 # occupied
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mDNSRespo 64 _mdnsresponder 8u IPv4 0x9853f646e2fecbb7 0t0 UDP *:mdns
mDNSRespo 64 _mdnsresponder 9u IPv6 0x9853f646e2fec9cf 0t0 UDP *:mdns
# echo $?
0
因此,在脚本中,您可以使用!
来否定测试可用性的值:
if ! lsof -i:8080
then
echo 8080 is free
else
echo 8080 is occupied
fi
答案 1 :(得分:5)
假设您使用net-tools中的netstat,这是一个有效的例子:
function is_port_free {
netstat -ntpl | grep [0-9]:${1:-8080} -q ;
if [ $? -eq 1 ]
then
echo yes
else
echo no
fi
}
例如
$ is_port_free 8080
yes
$ is_port_free 22
no
答案 2 :(得分:1)
简单的事情:
netstat -an|egrep '[0-9]:8080 .+LISTENING'