Что делает команда `ss` в Linux и чем она лучше `netstat`?

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

Ответ

ss (Socket Statistics) — это современная утилита командной строки Linux для детального просмотра статистики сетевых сокетов. Она пришла на смену старой и более медленной утилите netstat.

Ключевые преимущества ss перед netstat:

  • Скорость: ss получает информацию напрямую из пространства ядра через сокетный интерфейс netlink, минуя медленный парсинг файлов в /proc/net/. Это критично на загруженных серверах.
  • Богатство фильтров: Позволяет тонко фильтровать вывод по состоянию, адресам, портам и другим параметрам.
  • Больше информации: Показывает расширенные детали, такие как таймеры TCP, окна, параметры congestion control.

Основные флаги и примеры использования в DevOps:

# 1. Показать все слушающие (LISTEN) TCP-сокеты с процессами (аналог 'netstat -tlnp')
ss -tlnp
# State      Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
# LISTEN     0      128         0.0.0.0:22          0.0.0.0:*     users:(("sshd",pid=123,fd=3))

# 2. Показать все установленные TCP-соединения к конкретному порту (например, 5432 - PostgreSQL)
ss -t dst :5432

# 3. Мониторинг проблем: показать соединения в нестандартных состояниях (например, ожидающие закрытия)
ss -tan state closing time-wait fin-wait-1 fin-wait-2

# 4. Показать статистику по сокетам, сгруппированную по состоянию
ss -s
# Total: 456 (kernel 1024)
# TCP:   45 (estab 10, closed 15, orphaned 2, timewait 3)...

# 5. Фильтр по IP-адресу источника
ss -nt src 10.0.1.100

Почему DevOps-инженеру важно знать ss: Это основной инструмент для оперативной диагностики сетевых проблем: выявления "висячих" соединений, поиска процессов, занимающих порты, анализа нагрузки на сокеты и проверки правильности работы брандмауэров и балансировщиков нагрузки.