главная - Статьи - Linux, FreeBSD
Утилита lsof. Определение открытых портов и запущенных процессов
Дата обновления: 07.04.2025В этой заметке я приведу примеры использования команд unix, которые могут быть использованы значительно шире описанного здесь. Фактически, я просто приведу примеры. Если у вас есть удобные и полезные вам ключи / команды - пишите в комментариях!
lsof - это утилита, служащая для вывода информации о том, какие файлы используются теми или иными процессами. Поможет, если надо связать окрытые порты со службами.
Пример 1: вывод открытых портов в linux:
$ sudo lsof -P -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rdiffweb 518 root 5u IPv4 16947 0t0 TCP 192.168.2.30:8080 (LISTEN)
sshd 549 root 3u IPv4 16398 0t0 TCP *:22 (LISTEN)
sshd 549 root 4u IPv6 16400 0t0 TCP *:22 (LISTEN)
nginx 555 root 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 556 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 557 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
где:
-P
- не резолвить номера портов в стандартные названия (например, если порт 443, то не писать https, а именно 443);
-i
- отображать сетевые соединения (Internet socket files)
Пример 2: объединение опций
Например, нужно показать сетевые соединения, связанные с процессом nginx.
$ sudo lsof -c nginx -i
выдаст длинную портянку данных, в которых явно будут лишние сведения. Почему? Потому что lsof выдал объединенный вывод: и по опции -i, и по опции -c nginx.
Если нужно объединение опций по принципу && в программировании, то нужно указать опцию -a:
$ sudo lsof -c nginx -a -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 555 root 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 556 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 557 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 558 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 559 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
А вот это то, что нужно.
В данном случае вывод равнозначен такой команде:
$ sudo lsof -i | grep nginx
nginx 555 root 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 556 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 557 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 558 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
nginx 559 www-data 8u IPv4 10996 0t0 TCP *:18081 (LISTEN)
Но это лишь в данном случае. Но если забыть про опцию -c, то grep может выручить.
Другие примеры с lsof:
lsof -i 4 -a -p 1234
(просмотр всех соединений IPv4, открытых процессом с PID = 1234)lsof /dev/hd4
(Список открытых файлов на устройстве /dev/hd4)lsof /dev/cdrom
(Список процессов, работающих с CD ROM)lsof -c ssh
(Список подключений по ssh)
Опция -c показывает все открытые файлы, которые используются процессами, имя которых начинается с заданной строки.
lsof -ni | grep ssh
(Еще один способо получить список подключений по ssh)
выдаст нечто вроде
sshd 2599 root 3u IPv6 8613 TCP *:22 (LISTEN)
sshd 3924 root 3u IPv6 9286804 TCP 10.8.0.181:22->10.8.0.178:nat-stun-port (ESTABLISHED)
sshd 3926 myuser 3u IPv6 9286804 TCP 10.8.0.181:22->10.8.0.178:nat-stun-port (ESTABLISHED)
sshd 15109 root 3u IPv6 10572657 TCP 10.8.0.181:22->10.8.0.178:4461 (ESTABLISHED)
sshd 15111 myuser 3u IPv6 10572657 TCP 10.8.0.181:22->10.8.0.178:4461 (ESTABLISHED)
sshd 22818 root 3u IPv6 10632880 TCP 10.8.0.181:22->10.8.0.178:8151 (ESTABLISHED)
sshd 22820 myuser 3u IPv6 10632880 TCP 10.8.0.181:22->10.8.0.178:8151 (ESTABLISHED)
Авторизуйтесь для добавления комментариев!

Принимаю заказы на настройку серверов, mikrotik и других роутеров, точек доступа, nginx и т.п. В пределах Санкт-Петербурга возможен выезд к заказчику. См. контакты.