Ответ
В работе с Linux-серверами я проверяю состояние портов несколькими способами, в зависимости от того, нужно ли проверить слушающий порт локально или доступность порта извне.
A. Проверка, слушает ли сервер локально на порту:
# Предпочитаю ss — он быстрее и информативнее netstat
sudo ss -tlnp | grep :80
# Ключи:
# -t — TCP
# -l — listening ports
# -n — numeric (не резолвить имена)
# -p — показать процесс
Если порт слушается, в выводе будет строка с процессом (например, nginx или Apache).
B. Проверка доступности порта с другой машины (из сети):
# Быстрая проверка TCP-соединения
nc -zv <server_ip> 80
# Или с таймаутом
timeout 2 bash -c "</dev/tcp/<server_ip>/80" && echo "Port is open" || echo "Port is closed"
C. Комплексная проверка (если утилиты недоступны):
Часто в минимальных контейнерах нет nc или telnet. Тогда использую встроенные возможности:
# Использование /dev/tcp (работает в Bash)
if echo > /dev/tcp/localhost/80; then echo "Open"; fi
Критически важный момент: Если порт должен быть открыт, но соединение не устанавливается, первым делом проверяю iptables/firewalld и host-based firewall в облаке (AWS Security Groups, GCP Firewall Rules). Команда sudo iptables -L -n -v помогает увидеть действующие правила.