Как посмотреть открытые порты в Linux?

«Как посмотреть открытые порты в Linux?» — вопрос из категории Linux, который задают на 26% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Проверка открытых портов — стандартная задача при настройке сервисов, диагностике сетевых проблем и аудите безопасности. Я предпочитаю использовать современные утилиты.

1. ss (Socket Statistics) — замена устаревшему netstat, быстрее и информативнее:

# Показать все слушающие (LISTEN) TCP и UDP порты с числовыми адресами
ss -tuln

# Расшифровка флагов:
# -t — TCP порты
# -u — UDP порты
# -l — только слушающие порты (ожидающие подключений)
# -n — не резолвить имена хостов и сервисов (быстрее)

# Показать все установленные TCP-соединения
ss -tn

2. lsof (List Open Files) — мощный инструмент, показывает, какой процесс использует порт:

# Показать все процессы, слушающие сетевые порты
sudo lsof -i -P -n | grep LISTEN

# Показать, что использует конкретный порт (например, 80)
sudo lsof -i :80

3. Для быстрой проверки доступности порта извне:

# Утилита netcat (nc)
nc -zv localhost 22  # Проверит, доступен ли SSH-порт на localhost

# Или telnet
telnet localhost 22

Контекст DevOps: В сценариях автоматизации (например, в скриптах ожидания готовности сервиса — health check) часто использую nc или curl для проверки, открылся ли порт после запуска контейнера или службы в пайплайне развертывания.