Гид по технологиям

Команда ss в Linux: подробное руководство по сокетам

7 min read Linux Обновлено 02 Dec 2025
Команда ss в Linux — руководство по сокетам
Команда ss в Linux — руководство по сокетам

Розетка и вилка на тёмном фоне

Что такое команда ss

Команда ss (socket statistics) показывает информацию о сетевых соединениях и сокетах в удобочитаемом виде. Коротко: ss помогает быстро увидеть, какие службы слушают порты, какие соединения установлены и какие процессы с ними связаны.

Определение в одну строку: ss — инструмент для получения детальной статистики по сокетам и соединениям в Linux.

Важно: ss заменил устаревший netstat — он быстрее и даёт больше деталей.

Когда ss особенно полезен

  • Быстрое обнаружение прослушиваемых портов и установленных TCP/UDP-соединений.
  • Поиск процесса, удерживающего соединение (PID/имя приложения).
  • Фильтрация по состоянию соединения, порту, адресу или интерфейсу.
  • Экспорт вывода для логов или дальнейшей обработки.

Важно: для получения PID/имени процесса требуется запуск с правами, дающими доступ к данным процессов (обычно sudo).

Основы использования ss

Базовый синтаксис

ss [опции]

Без опций ss по умолчанию выводит список установленных соединений.

ss

Список установленных соединений ss

В выводе обычно встречаются столбцы:

  • Netid — тип сокета (tcp, udp, u_seq, u_str и т. п.).
  • State — состояние (ESTAB, LISTEN, UNCONN и пр.).
  • Recv-Q — очередь входящих пакетов.
  • Send-Q — очередь исходящих пакетов.
  • Local address:port — локальный адрес и порт.
  • Peer address:port — адрес и порт удалённой стороны.

Показать все сокеты (прослушивающие и непослушивающие)

ss -a

Все сокеты ss

Показать только прослушивающие сокеты

ss -l

Прослушивающие сокеты ss

Замечание: прослушивающие сокеты часто отображаются в состоянии UNCONN, потому что они ожидают входящих соединений.

Фильтрация по типу сокета (TCP/UDP/Unix)

TCP:

ss -t

TCP сокеты ss

UDP:

ss -u

UDP сокеты ss

Unix sockets:

ss -x

Unix сокеты ss

Чтобы показать все типы вне зависимости от состояния, комбинируйте с -a:

ss -ta
ss -ua
ss -xa

Фильтрация TCP по состоянию

Фильтр по состоянию помогает быстро найти, например, слушающие или установленные соединения:

ss -t state established

Фильтрация TCP по состоянию ss

Поддерживаемые состояния: established, closed, listening, closing, time-wait и др.

Показывать только IPv4 или IPv6

IPv4:

ss -4

IPv6:

ss -6

IPv4 и IPv6 сокеты ss

Можно комбинировать с фильтрами состояний:

ss -4 state established
ss -6 state established

Фильтрация по порту

ss поддерживает фильтры dport и sport (destination/source port). Пример: найти соединения, где исходный порт 39700 или назначенный порт https:

ss -ta '( dport = :https or sport = :39700)'

Фильтрация по порту ss

Комбинируйте с состоянием:

ss -ta state established '( dport = :https or sport = :https )'

Показать «сырые» (raw) сокеты

ss -w
ss --raw

Сырые сокеты ss

Фильтрация по адресу назначения или интерфейсу

Показать соединения с конкретным адресом:

ss dst 192.0.2.5

Фильтрация по адресу назначения ss

Можно также фильтровать по устройству/интерфейсу в зависимости от вашей системы.

Показать PID и имя процесса

Чтобы увидеть PID и имя процесса, используя TCP:

sudo ss -t -p

PID и процессы ss

Если требуется подробная информация о процессе, используйте ps с найденным PID.

Сводная статистика

ss -s

Сводная статистика ss

Вывод показывает общее число соединений, распределение по типам и состояниям.

Сохранение вывода в файл

ss > output.txt

Сохранение вывода ss в файл

Использование вместе с grep и другими утилитами

Если легко забыть синтаксис ss, можно фильтровать текстовый вывод:

ss -t | grep ESTAB

Пайп ss в grep

Комбинируйте с awk, sed, jq (после преобразования в JSON) или используйте скрипты для автоматизации наблюдения.

Быстрый шпаргалка — Cheat sheet (часто используемые команды)

ЗадачаКоманда
Показать все соединенияss -a
Показать прослушивающиеss -l
Только TCPss -t
Только UDPss -u
Показать PID/процессsudo ss -t -p
Фильтр по портуss -ta ‘( dport = :443 )’
IPv4/IPv6ss -4 / ss -6
Сводная статистикаss -s
Сырые сокетыss -w

Частые сценарии и готовые команды

  • Найти, кто слушает порт 80:
sudo ss -ltnp 'sport = :80'
  • Показать все установленные соединения и сортировать по локальному порту (пример через awk/sort):
ss -t | awk '{print $5" "$6}' | sort
  • Найти соединения для конкретного процесса (используйте PID из ps):
ps aux | grep nginx
sudo ss -p | grep nginx

Когда ss может дать неверную или неполную картину (когда он «не работает»)

  • Недостаточно прав: без sudo опция -p не покажет PID/имя процесса.
  • Сетевые неймспейсы: ss по умолчанию смотрит в текущем неймспейсе; контейнеры и network namespaces нужно проверять отдельно.
  • Динамично меняющаяся система: при высокой нагрузке вывод может быстро устаревать — используйте периодические снимки или мониторинг.
  • ss не заменяет сниффер пакетов: если нужно увидеть содержимое трафика, используйте tcpdump/wireshark.

Альтернативы и когда их использовать

  • netstat — устарел, но всё ещё встречается в старых системах; предоставляет похожую информацию, но медленнее.
  • lsof -i — показывает файлы и процессы, связанные с сетевыми соединениями; полезно для поиска файлового контекста процесса.
  • tcpdump/wireshark — анализ пакетов и инсайты в содержимое трафика.
  • iproute2 (ip) — для работы с маршрутами и интерфейсами, дополняет ss.

Выбор: ss для состояния соединений и процессов, tcpdump для пакетного анализа, lsof когда нужен файловый контекст.

Мышление и эвристики при диагностике сети (mental models)

  • Слой приложения → транспорт → сеть: ищите проблему сверху вниз. Если порт слушается — смотрите процесс; если соединение установлено, смотрите маршрутизацию; если пакеты не доходят — сниффер.
  • «Снимок» vs «поток»: ss даёт снимок в момент времени. Для трендов используйте периодический сбор.
  • Разделяй и властвуй: фильтруйте по типу (TCP/UDP), состоянию и порту, затем детализируйте до PID.

Ролевые чеклисты

Администратор (on-call):

  • Проверить ss -ta для аномалий в количестве соединений.
  • ss -t state time-wait — убедиться, что нет чрезмерного накопления TIME-WAIT.
  • sudo ss -t -p — найти процессы с большим количеством соединений.
  • Сохранить вывод и прикрепить к тикету.

Разработчик сервиса:

  • Проверить ss -ltnp для подтверждения, что сервис слушает правильный интерфейс/порт.
  • При отказе сервиса — сверить порт и PID с systemd/journalctl.

SRE/Инженер по сетям:

  • Сравнить ss -s с нормой для обнаружения всплеска входящих соединений.
  • Использовать ss в сочетании с tcpdump для подтверждения проблем на сетевом уровне.

Мини-методология для расследования сетевой проблемы

  1. Снимок текущих соединений: ss -a > before.txt
  2. Фильтрация подозрительных соединений: ss -ta state established ‘( dport = :https )’
  3. Найти процесс: sudo ss -p и ps -fp
  4. При необходимости — снять трафик: sudo tcpdump -i any port 443 -w capture.pcap
  5. Сравнить с предыдущими снимками и метриками Prometheus/системного мониторинга.

Решающее дерево для выбора команды (Mermaid)

flowchart TD
  A[Проблема с сетью?] --> B{Нужно увидеть содержимое пакетов?}
  B -- Да --> C[tcpdump или wireshark]
  B -- Нет --> D{Нужно PID процесса?}
  D -- Да --> E[ss -t -p]
  D -- Нет --> F{Нужно прослушивающие порты?}
  F -- Да --> G[ss -l]
  F -- Нет --> H[ss -a / ss -s]

Краткий словарь терминов

  • Сокет — абстракция конца канала связи, используемая для сетевого ввода/вывода.
  • LISTEN — сокет ожидает входящих соединений.
  • ESTAB — соединение установлено.
  • Recv-Q / Send-Q — очереди входящих/исходящих пакетов.

Советы по безопасности и приватности

  • Запуск ss с -p раскрывает имена процессов и PID — предоставляйте доступ к этим данным только доверенным администраторам.
  • Не выкладывайте сохранённые дампы ss с внутренними IP/портами и PID в публичные баг-трекеры.

Советы по использованию в локализованных системах

  • Команды ss одинаковы для всех локалей; локализация касается только вывода инструментов, которые переводят системные юниты. Используйте однородные форматы логов для автоматизации.

Частые ошибки и как их исправить

  • “Не вижу PID” — запустите с sudo.
  • “Не вижу соединений контейнера” — выполните ss внутри контейнера или в нужном network namespace.
  • “Вывод слишком большой” — применяйте фильтры по типу, порту и состоянию.

Примеры тест-кейсов и приёмка

Критерии приёмки при проверке сервиса, слушающего порт:

  • Сервис должен отображаться в ss -ltnp на ожидаемом порту.
  • Должен быть корректный PID и имя процесса.
  • Порт должен быть доступен с локального хоста (telnet/ip test) и с нужных сетей.

Заключение

ss — основной инструмент для анализа сетевых соединений в современных дистрибутивах Linux. Он быстрый, детализированный и гибко фильтруется. В связке с tcpdump, ps и системными логами ss даёт мощный арсенал для диагностирования сетевых проблем.

Итоговые рекомендации:

  • Всегда запускать сложные проверки с sudo.
  • Начинайте с широкого снимка (ss -a / ss -s), затем сужайте фильтры.
  • Сохраняйте выводы для последующего анализа и автоматизации.

Ключевые выводы

  • ss заменил netstat и предоставляет более детальную и быструю информацию.
  • Используйте флаги -t/-u/-x/-l/-a/-p/-s для получения нужных сведений.
  • Для глубокого анализа комбинируйте ss с tcpdump, lsof и ps.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Выбор носимой электроники для фитнеса
Фитнес

Выбор носимой электроники для фитнеса

Лучший канал Wi‑Fi для 5 ГГц
Сеть

Лучший канал Wi‑Fi для 5 ГГц

Zeit для crontab — простые cron‑задачи в Linux
Linux

Zeit для crontab — простые cron‑задачи в Linux

Сброс аудионастроек в Windows 10
Windows

Сброс аудионастроек в Windows 10

Рабочий стол по умолчанию в Windows 10 и 8.1
Windows

Рабочий стол по умолчанию в Windows 10 и 8.1

Как поделиться местоположением в Instagram
Социальные сети

Как поделиться местоположением в Instagram