Shell script: how to determine if a port is being used, e.g. through netstat?

I am trying to check port availability and get return value using shell script. Example: if port 8080 is free, return true, otherwise return false. Can anyone help? I tried with netstat.

+3
source share
3 answers

Assuming you are using netstat from network tools, this is a working example:

function is_port_free { 

    netstat -ntpl | grep [0-9]:${1:-8080} -q ; 

    if [ $? -eq 1 ]
    then 
        echo yes 
    else 
        echo no
    fi
}
  • $ {1: -8080} means using the first argument as a port and 8080 if there is no first argument
  • grep -q [0-9]: port means matching a number followed by a colon followed by a port
  • $? - . , . 0 . grep 1 . -q , , .
  • netstat -ltnp n umeric ports IP p rograms, l t cp.
  • a | b a b

.

$ is_port_free 8080
yes

$ is_port_free 22
no
+2

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

, script ! :

if ! lsof -i:8080
then
    echo 8080 is free
else
    echo 8080 is occupied
fi
+13

How about something simple:

netstat -an|egrep '[0-9]:8080 .+LISTENING'
+1
source

All Articles