Перейти к содержанию

ss -tulpan вместо netstat

Сеть · Диагностика
Изучено · 2026-04-15

Проблема

netstat на нагруженном хосте с десятками тысяч сокетов отрабатывает по несколько секунд, не показывает namespace'ы и на многих современных дистрибутивах официально deprecated (вынесен из net-tools в пользу iproute2). В 2026 году его всё ещё тащат по привычке из 2005-го.

Решение

Перейти на ss из пакета iproute2. Базовая комбинация флагов покрывает 90% задач диагностики:

  • -t — TCP
  • -u — UDP
  • -l — только слушающие сокеты
  • -p — показать процесс-владелец
  • -a — все состояния, не только LISTEN
  • -n — не резолвить порты/адреса в имена

Мнемоника tulpan (тюльпан) запоминается сразу и покрывает типичный кейс «кто что слушает и у кого соединения».

Пример

# Кто слушает порты (замена netstat -tlnp)
ss -tlnp

# Всё разом: TCP + UDP, listen + established, процессы, без DNS
ss -tulpan

# Только установленные TCP-соединения на порт 443
ss -tan state established '( dport = :443 or sport = :443 )'

# Статистика по всем сокетам
ss -s

# Сокеты конкретного процесса
ss -tp | grep nginx

Типовой сценарий разбора инцидента «порт занят»:

$ ss -tlnp sport = :8080
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("old-service",pid=4821,fd=6))

Одна команда — видно и порт, и PID, и имя процесса.

Когда применять

  • На любом production-хосте вместо netstat.
  • В плейбуках Ansible: ansible.builtin.command: ss -tulpan.
  • В инцидентах уровня «что-то слушает порт, а я не знаю что».

Источник

Как применить у себя

  1. Убедиться, что iproute2 установлен: ss --version.
  2. Добавить алиас в ~/.bashrc / ~/.zshrc:
    alias listen='ss -tulpan'
    
  3. Обновить внутренние runbook'и: везде, где в инструкциях был netstat, поменять на ss.
  4. После первого реального инцидента, разобранного через ss, — перевести статус в Изучено.