Как посмотреть, какие сетевые порты заняты в Linux?

«Как посмотреть, какие сетевые порты заняты в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для инспекции занятых портов в 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'и контейнеров.