Ответ
Обе утилиты служат для анализа сетевых соединений, сокетов и статистики, но ss — это современная замена устаревшему netstat.
netstat (из пакета net-tools)
- Статус: Считается устаревшим (deprecated) в большинстве современных дистрибутивов Linux.
- Источник данных: Читает информацию из файлов в
/proc/net/, что медленнее и может показывать неполные данные. - Функциональность: Базовый набор функций для отображения соединений, таблиц маршрутизации, интерфейсов.
ss (Socket Statistics, из пакета iproute2)
- Статус: Рекомендуемая современная утилита.
- Источник данных: Получает данные напрямую из структур ядра через
netlink, что делает ее значительно быстрее и точнее, особенно на системах с большим количеством соединений. - Функциональность: Более мощная фильтрация и детализация. Позволяет фильтровать по состоянию сокета, адресам, портам.
Сравнение команд:
# Показать все слушающие TCP-порты
netstat -tln
ss -tln
# Показать все установленные соединения для конкретного процесса
netstat -tup | grep nginx
ss -tup state established dst :443
# Показать сокеты в состоянии TIME-WAIT (очень быстро с ss)
ss -o state time-wait
Практический вывод: В скриптах автоматизации и для диагностики в DevOps следует использовать ss. Основная причина — скорость и надежность. Например, при мониторинге большого количества соединений на балансировщике нагрузки ss отработает мгновенно, в то время как netstat может "подвисать".