Я пишу сценарий, который запускает сервер, который хочет использовать определенный номер порта. В некоторых случаях этот порт занят. Я хочу знать, как это проверить в 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
Конечно, это не атомарно, поэтому возможно, что какой-то порт будет занят после операции проверки, но до запуска вашей службы.