Ответ
Для инспекции занятых портов в Linux используются утилиты ss (рекомендуемая, современная) и netstat (устаревшая, но широко известная).
1. Использование ss (socket statistics):
Утилита ss из пакета iproute2 быстрее и показывает более детальную информацию, чем netstat.
# Показать все слушающие (LISTEN) TCP и UDP порты с именами процессов
sudo ss -tulnp
Ключи команды ss:
-t— отображать TCP сокеты.-u— отображать UDP сокеты.-l— показывать только сокеты в состоянии LISTEN (ожидающие подключений).-n— не резолвить имена (показывать IP и номера портов).-p— показывать PID и имя процесса, владеющего сокетом.-4/-6— фильтровать по IPv4 или IPv6.
Пример полезных комбинаций:
# Какие процессы слушают на конкретном порту (например, 80)
ss -tlnp sport = :80
# Показать все установленные TCP-соединения
ss -tnp state established
# Показать все UDP-сокеты
ss -unp
2. Использование netstat (устаревшее):
Может отсутствовать в минимальных образах. Синтаксис похож.
sudo netstat -tulnp
3. Использование lsof (list open files):
Очень мощная утилита для поиска процессов по порту.
# Какие процессы используют порт 443?
sudo lsof -i :443
# Показать все процессы, слушающие сетевые порты
sudo lsof -i -P -n | grep LISTEN
4. Проверка конкретного порта с nc или telnet:
Чтобы проверить, доступен ли порт локально (не только слушает, но и отвечает).
nc -zv localhost 22
telnet localhost 22
Практический пример из DevOps: При развертывании нового сервиса, который должен слушать порт 8080, я сначала проверяю, не занят ли он:
if sudo ss -tlnp | grep -q ':8080 '; then
echo "Порт 8080 уже занят:"
sudo ss -tlnp | grep ':8080 '
exit 1
else
echo "Порт 8080 свободен, можно запускать."
fi
Эта проверка часто встраивается в скрипты деплоя или в health-check'и контейнеров.