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