Как узнать с помощью командной строки, какой именно компонент использует определенный порт в Linux-системах?
Чтобы найти компонент, использующий к примеру TCP|UDP-порт 80 в операционных системах Linux, можно выполнить одну из следующих команд:
netstat - инструмент командной строки, позволяющий отображать сетевые подключения, таблицы маршрутизации и статистические данные сетевых интерфейсов.
fuser - инструмент командной строки, идентифицирующий процессы, использующие файлы или сокеты.
lsof - инструмент командной строки, который выводит список открытых файлов в системе Linux/UNIX и список всех открытых файлов и процессов, открывших указанные файлы.
Файловая система /proc/$pid/ - в ОС Linux каталог /proc содержит каталог для каждого запущенного процесса (включая процессы ядра) в /proc/PID. Этот каталог содержит информацию об этом процессе, включая имя процесса, который открыл порт.
Определение компонента использующего порт
Подключитесь к серверу через PuTTY (или любой другой клиентский терминал)
Выполните следующую команду:
# netstat -tulpn | grep :80
Пример вывода данных:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1222/nginx
Где
0 0.0.0.0:80 - Source IP:Port
1222/nginx - PID/Process name
Определение компонента, использующего порт с помощью pid
Сначала необходимо найти PID процесса, открывшего порт.
# fuser 80/tcp
Пример вывода данных:
80/tcp: 12161 21776 25250 25393
После чего необходимо выяснить имя процесса, связанного с pid
# ls -l /proc/12161/exe
Пример вывода данных:
lrwxrwxrwx. 1 root root 0 Aug 9 14:12 /proc/12161/exe -> /usr/sbin/nginx
Определение компонента, с помощью lsof
Выполните команду:
# lsof -i :80 | grep LISTEN
Пример вывода данных:
apache2 1807 root 3u IPv4 6372 0t0 TCP *:www (LISTEN)
apache2 1816 www-data 3u IPv4 6372 0t0 TCP *:www (LISTEN)
apache2 1817 www-data 3u IPv4 6372 0t0 TCP *:www (LISTEN)
apache2 1816 www-data 3u IPv4 6372 0t0 TCP *:www (LISTEN)
apache2 1817 www-data 3u IPv4 6372 0t0 TCP *:www (LISTEN)