главная - Статьи - 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 и т.п. В пределах Санкт-Петербурга возможен выезд к заказчику. См. контакты.