ss для поиска проблем с портами в LinuxssИногда приложение неожиданно перестает запускаться, если нужный порт уже занят, приложение слушает другой адрес или вообще не запустилось.
Именно для таких случаев в Linux существует команда ss (Socket Statistics). Она показывает открытые сетевые соединения, прослушиваемые порты и процессы, которым они принадлежат.
ss -tln
Параметры означают:
-t — показать TCP-порты;-l — только слушающие сокеты;-n — не преобразовывать номера портов в названия служб.Например:
State Recv-Q Send-Q Local Address:Port
LISTEN 0 511 0.0.0.0:80
LISTEN 0 511 0.0.0.0:443
LISTEN 0 128 127.0.0.1:5432
Уже по этому выводу можно понять, какие сервисы принимают подключения.
Если нужного порта здесь нет, приложение либо не запущено, либо использует другой порт.
Иногда приложение отказывается запускаться с ошибкой:
Address already in use
Это означает, что порт уже занят другим процессом.
Добавьте параметр -p:
sudo ss -tlnp
Например:
LISTEN 0 511 0.0.0.0:80 users:(("nginx",pid=1342,fd=6))
LISTEN 0 128 127.0.0.1:5432 users:(("postgres",pid=812,fd=5))
Теперь видно не только порт, но и программу, которая его использует.
Если вывод слишком большой, его можно отфильтровать.
Например:
sudo ss -tlnp | grep :80
или
sudo ss -tlnp | grep :5432
Результат сразу покажет, существует ли нужный порт и какое приложение его использует.
Предположим, вы запускаете Python-приложение:
python3 -m http.server 8000
Теперь проверьте:
ss -tln | grep :8000
Получите:
LISTEN 0 5 0.0.0.0:8000
Это означает, что сервер успешно запустился и ожидает подключения.
Если вывод пустой, приложение не открыло порт. Причина может быть в ошибке запуска или неверной конфигурации.
Иногда перед запуском нового приложения хочется убедиться, что выбранный порт никем не используется.
Например:
ss -tln | grep :3000
Если команда ничего не вывела, порт свободен.
Такую проверку удобно выполнять перед запуском Docker-контейнеров, веб-серверов и собственных сервисов.
Для UDP используется похожая команда:
ss -uln
Если нужны процессы:
sudo ss -ulnp
Это полезно при настройке DNS, WireGuard, игровых серверов и других приложений, работающих по UDP.
Показать все TCP-порты:
ss -tln
Показать TCP-порты вместе с процессами:
sudo ss -tlnp
Показать UDP-порты:
ss -uln
Найти конкретный порт:
sudo ss -tlnp | grep :80
Посмотреть все активные соединения:
ss -tun
Этих команд хватает для большинства повседневных задач администратора.
ssНе отображается имя процесса
Если выполнить команду без sudo:
ss -tlnp
часть процессов может отображаться без имени.
Используйте:
sudo ss -tlnp
Тогда Linux покажет PID и название программы.
Порт не отображается
Если приложение должно работать, но нужного порта нет в выводе ss, почти всегда проблема находится еще до этапа сетевого подключения.
Проверьте состояние службы:
systemctl status имя_службы
или журнал:
journalctl -u имя_службы -n 50
Обычно причина становится понятна уже после просмотра первых строк журнала.
Команда ss помогает понять, какие порты открыты, какое приложение их использует и действительно ли сервис ожидает подключения.