PQ
PQ.Hosting

Валюта

Утилита ss в Linux: диагностика соединений, фильтры и замена netstat

Автор
PQ
19 марта 2026
3 мин чтения
397 просмотров
Утилита ss в Linux: диагностика соединений, фильтры и замена netstat

Открыли порт — не работает. Служба запущена — но кто-то уже занял нужный порт. Соединений много — но непонятно откуда. ss отвечает на все эти вопросы быстро и без лишних зависимостей.

Одна команда которая нужна чаще всего

Прежде чем изучать флаги — вот то что реально используется каждый день. Все слушающие TCP-порты с именами процессов:

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=892,fd=3))
LISTEN  0       511     0.0.0.0:80          0.0.0.0:*          users:(("nginx",pid=1203,fd=6))
LISTEN  0       128     127.0.0.1:3306      0.0.0.0:*          users:(("mysqld",pid=1891,fd=21))

Четыре буквы в флаге: -t TCP, -l только listening, -n числа без DNS, -p показать процесс.

Что означает Local Address

0.0.0.0:80 — nginx принимает соединения на всех интерфейсах. Виден снаружи.

127.0.0.1:3306 — MySQL слушает только на localhost. Снаружи недоступен. Так и должно быть на большинстве серверов.

:::22 — IPv6-адрес, SSH слушает на всех интерфейсах включая IPv6.

Установка

ss входит в пакет iproute2 который стоит по умолчанию на всех современных дистрибутивах. Если по каким-то причинам его нет:

sudo apt install iproute2

Флаги по типу протокола

Только TCP:

ss -t

Только UDP:

ss -u

Unix-сокеты — межпроцессное взаимодействие:

ss -x

Все типы, все соединения:

ss -a

Найти что занимает конкретный порт

Порт 8080 занят — узнать чем:

ss -tlnp sport = :8080

Или через grep если флаги уже запомнились:

ss -tlnp | grep :8080

Колонка Process покажет имя и PID. Порт свободен — вывод будет пустым.

Посмотреть все соединения конкретного процесса

Найти PID процесса:

pgrep nginx

Все соединения этого PID:

ss -p | grep pid=1203

Фильтрация по адресам

Все соединения с конкретным удалённым хостом:

ss -tn dst 185.10.20.30

Соединения идущие с конкретного локального адреса:

ss -tn src 10.0.0.5

Соединения только с нестандартных портов:

ss -tn sport gt :1024

Комбинировать условия через and:

ss -tn dst 185.10.20.30 and dport = :443

Состояния TCP: диагностика нагрузки

TCP-соединение проходит через несколько состояний. На перегруженном сервере их накопление говорит о конкретных проблемах.

Только активные соединения:

ss -tn state established

Зависшие после завершения — при высокой нагрузке их бывает тысячи:

ss -tn state time-wait

Ожидают закрытия на стороне приложения:

ss -tn state close-wait

Посчитать количество TIME_WAIT:

ss -tn state time-wait | wc -l

Если цифра в тысячах — проблема с keep-alive или агрессивным открытием соединений.

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

Быстрый срез по всем протоколам:

ss -s
Total: 156
TCP:   89 (estab 12, closed 71, orphaned 0, timewait 71)

Здесь сразу видно соотношение established к time-wait. orphaned — соединения без привязанного процесса, могут указывать на утечку.

Мониторинг в реальном времени

ss сам по себе не обновляется — передать в watch:

Обновлять список портов каждую секунду:

watch -n 1 ss -tlnp

Только счётчики:

watch -n 1 ss -s

Заменить netstat: таблица соответствия

Привычная netstat Эквивалент ss
netstat -tlnp ss -tlnp
netstat -an ss -an
netstat -s ss -s
netstat -rn ip route

netstat из пакета net-tools — в Ubuntu 20.04+ не установлен по умолчанию. ss из iproute2 — есть всегда.

Шпаргалка

Задача Команда
Listening порты с процессами ss -tlnp
Все UDP ss -uanp
Найти процесс на порту ss -tlnp sport = :порт
Соединения с хостом ss -tn dst IP
Только established ss -tn state established
Количество TIME_WAIT ss -tn state time-wait | wc -l
Статистика ss -s
Мониторинг watch -n 1 ss -tlnp



Поделиться статьей

Похожие статьи