Назад | Перейти на главную страницу

Проверить на Linux, что определенный порт занят

Я пишу сценарий, который запускает сервер, который хочет использовать определенный номер порта. В некоторых случаях этот порт занят. Я хочу знать, как это проверить в bash, чтобы правильно отреагировать.

Как я могу проверить в Linux, что определенный порт занят?

Вы можете использовать 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 не блокирует брандмауэр. Но если запустить его локально на сервере, то, по крайней мере, проблем возникнуть не должно.

Если вы имеете в виду порт TCP, вы можете проверить с помощью netstat, может сработать что-то вроде этого:

 netstat -ntp |  grep -v '::' | awk  '{print $4}'  | grep -E '^[[:digit:]]+' | awk -F: '{print $2}' | sort -n | uniq

Конечно, это не атомарно, поэтому возможно, что какой-то порт будет занят после операции проверки, но до запуска вашей службы.