ss против netstat — переведённый рульник
netstat ушёл, флаги выжили: таблица перевода строка за строкой, охота за портом одной строкой с фильтром в ядре и почему ss выигрывает в каждом современном дистрибутиве.
Используйте ss — это текущий стандарт в каждом современном Linux-дистрибутиве, а netstat там наследие: в Ubuntu, Fedora и Debian бинарник теперь поставляется в опциональном пакете net-tools тогда как ss is built into встроен в iproute2 и установлен везде. ещё и быстрее на загруженных серверах, потому что читает статистику сокетов прямо из ядра, а не обходит /proc файл за файлом. Загвоздка — синтаксис, так что эта страница и есть перевод.
Используйте ss — текущий стандарт в каждом современном дистрибутиве; netstat там наследие и часто даже не установлен.
Флаги переводятся один к одному: netstat -tlpn → ss -tlpn, netstat -tulpna → ss -tulpna. Маршрутизация и интерфейсы переехали в ip route / ip -s link.
Охота за портом одной строкой: sudo ss -ltnp 'sport = :8080' — имя процесса и PID возвращаются сразу.
ПЕРЕВЕДЁННЫЙ РУЛЬНИК
Каждая строка netstat из вашего старого рульника — и во что она превращается: читайте каждую строку слева направо:
все соединения TCP + UDPss -tulpnaip routeip -s linkss -sss -tnp 'sport = :22'первые две строки идентичны — по удаче короткие флаги ss совпадают с netstat в обычных случаях, так что мышечная память mostly переживает переезд
УСТАРЕЛ ЛИ NETSTAT?
В Linux — фактически да. Пакет net-tools — netstat, ifconfig, route — has not tracked modern kernel features for years and is no longer installed by default on any major distribution. It still exists, still runs, and there is nothing to uninstall, but new features land only in iproute2 (the package behind ss and ip — годами не следил за современными возможностями ядра и больше не ставится по умолчанию ни в одном крупном дистрибутиве. Он существует, работает, но новые фичи приземляются только в
- Отсутствует на свежих установках. В дефолтном Ubuntu 24.04 или Fedora-сервере нет никакого
netstatпока вы вручную не поставитеnet-tools— вот почему столько людей ищут «netstat-эквивалент»: бинарника просто нет. - Нет современной сокетной информации. netstat старше TCP fast open, статистики сокетов на уровне подпотоков и привязки сокетов к cgroup.
ssсообщает их нативно. - Исключение Windows. На Windows
netstatжив-здоров —netstat -anoпо-прежнему стандартный способ сопоставить PID и слушающий порт. Устаревание — только линуксовая история.
РАБОЧАЯ ЛОШАДКА, ФЛАГ ЗА ФЛАГОМ
значит «socket statistics»: взгляд ядра на каждый TCP, UDP и Unix-сокет — состояния, адреса, порты, процессы, таймеры, глубины очередей. means "socket statistics": the kernel's view of every TCP, UDP and Unix socket — state, addresses, ports, processes, timers, queue depths.
# всё слушающее, с процессом-владельцем
sudo ss -tulpn
Флаг за флагом: TCP (-t), UDP (-u), только слушающие (-l), показать процессы (-p), числовой вывод — без DNS-запросов (-n). sudo важен для -p : без root вы видите порты, но не получаете имена процессов для чужих вам сокетов. Ещё две однострочника, покрывающие большую часть работы:
# все установленные соединения к/от порта 443, с процессами
sudo ss -tnp 'sport = :443 or dport = :443'
# сводная таблица: сколько сокетов в каждом состоянии
ss -s
Этот синтаксис фильтров — настоящее улучшение против grep-и-молись у netstat — он выполняется внутри ядра, значит точен, а не совпадает по тексту.
КТО ДЕРЖИТ ПОРТ 8080?
Самая частая причина достать любой из этих инструментов:
sudo ss -ltnp 'sport = :8080'
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 511 *:8080 *:* users:(("node",pid=214113,fd=18))
Поле users:(...) даёт имя процесса и PID прямо — вторая команда не нужна. Порт занят, а процесса не видно? Обычно вы смотрите на сокет в чужом сетевом namespace — контейнер. С хоста sudo ss -ltnp shows the port with an empty process column; match it with docker ps or nsenter into the container's namespace. Prefer a dedicated tool? делает ту же работу и одинаково работает на macOS и большинстве BSD — потому и выживает в рульниках — но на Linux does the same job and works identically on macOS and most BSDs, which is why it survives in runbooks — but on Linux, уже на месте. is already there.
проверка: sudo ss -ltnp 'sport = :8080' → users:(("node",pid=…)) · подставьте любой порт 1–65535
ПОЧЕМУ «ss NOT FOUND»?
Потому что вы либо на очень старом дистрибутиве (до-2007 эры, до того как iproute2 стал стандартом), либо — куда вероятнее — вовсе не на Linux. ss — не macOS-команда; macOS поставляет lsof and netstat но без ss, у большинства BSD так же. На Windows: netstat -ano or PowerShell's из PowerShell. Если вы точно на Linux и его нет, поставьте iproute2: . If you genuinely are on Linux and it is missing, install iproute2: sudo apt install iproute2 (Debian/Ubuntu) or sudo dnf install iproute2 (Fedora/RHEL).
проверка: ss -V → строка версии в первой строке
КОГДА NETSTAT ВСЁ ЕЩЁ ЗАСЛУЖИВАЕТ СВОЮ СТРОКУ
Два честных случая. Портативность: на смешанном парке Linux, AIX или старых BSD netstat — единственный синтаксис, который есть везде. Преемственность мышечной памяти в старых рульниках — если в рульнике написано netstat -tlpn и на машине стоит net-tools, всё продолжает работать. Иначе по умолчанию ss и обновите рульник — таблица перевода наверху та самая, которую стоит приклеить на монитор. А когда найденный порт принадлежит сервису, который не поднимается, это история systemd, а не сокетов.
ss -ltnp выше — реальный захват с dev-машины (процесс node на :8080), перепечатанный, не выдуманный.конец переведённого рульника · ничего не скачано · всё локально