Как использовать lsof для диагностики открытых файлов и портов

7 минут чтения
Средний рейтинг статьи — 4.9

Команда lsof (list open files) — один из самых полезных инструментов для диагностики в Linux.
Её можно считать «рентгеном» системы: она показывает, какие процессы держат открытые файлы, сокеты и порты, помогает находить утечки, зависшие процессы и причины блокировки устройств.

Что делает lsof

В Linux всё — файл: и текстовый документ, и сетевое соединение, и устройство.
lsof просматривает таблицу открытых файлов в ядре и показывает, какие процессы что держат открытым.

Это позволяет:

  • понять, какой процесс занимает порт;
  • выяснить, кто «висит» на удалённом диске;
  • найти процесс, мешающий отмонтировать файловую систему;
  • отследить утечки файловых дескрипторов.

Установка

На большинстве дистрибутивов lsof предустановлен. Если нет:

sudo apt install lsof        # Debian/Ubuntu
sudo yum install lsof        # CentOS/RHEL
sudo dnf install lsof        # Fedora

Базовое использование

lsof

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

Поиск по порту

Часто lsof используют для поиска процесса, который занимает порт:

sudo lsof -i :80

Результат покажет, кто слушает 80-й порт (обычно nginx или apache2).

Пример вывода:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1420 root   6u  IPv4  35789      0t0  TCP *:http (LISTEN)

Поиск по типу соединения

Показать все TCP-соединения:

sudo lsof -i tcp

Показать все UDP:

sudo lsof -i udp

Можно добавить фильтр по хосту:

sudo lsof -i @192.168.1.10

Найти процесс, использующий файл

Если ты хочешь удалить или размонтировать диск, а система отвечает:

device is busy

проверь, кто его держит:

sudo lsof /mnt/backup

или конкретный файл:

sudo lsof /var/log/syslog

Поиск по PID или пользователю

Все файлы, открытые процессом с PID 1234:

sudo lsof -p 1234

Все файлы, открытые пользователем nginx:

sudo lsof -u nginx

Как узнать, кто слушает порты

Аналог netstat -tulnp, но с подробностями:

sudo lsof -i -P -n | grep LISTEN
  • -P — не переводить номера портов в имена (80, а не http);
  • -n — не резолвить имена хостов (ускоряет работу).

Найти удалённые файлы, которые всё ещё открыты

Иногда лог-файл удалён, но диск всё ещё занят:

sudo lsof | grep deleted

Это поможет понять, какой процесс держит удалённый файл открытым (и почему место не освободилось).

Проверка открытых файлов в каталоге

Если нужно понять, что держит папку:

sudo lsof +D /var/www/html

Важно: +D рекурсивно сканирует поддиректории — на больших путях может работать медленно.

Диагностика при отмонтировании

Если umount пишет target is busy:

sudo lsof +f -- /mnt/data

Ты увидишь, какие процессы мешают отмонтировать раздел.

Сравнение с ss и netstat

УтилитаЧто делает
lsofПоказывает все открытые файлы, включая сокеты, устройства и обычные файлы
ssОтображает только сетевые соединения
netstatУстаревшая альтернатива ss

Если тебе нужно именно «кто слушает порт» — подойдёт и ss.
Но lsof гораздо мощнее — он охватывает весь ввод-вывод, не только сеть.

Практическая диагностика: пример

Проблема: сайт не запускается, потому что порт 3000 занят.

Решение:

sudo lsof -i :3000

Вывод:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node     2432 user   22u  IPv4 120348      0t0  TCP *:3000 (LISTEN)

Завершаем процесс:

kill -9 2432

Порт освобождён.

Полезные комбинации

Все открытые файлы каталогов:

lsof +D /home/user/projects

Все открытые TCP-соединения процесса:

lsof -p $(pidof nginx) -i tcp

Файлы, открытые root:

lsof -u root

Просмотр по типу устройства:

lsof /dev/sda

Заключение

lsof — незаменимая утилита для диагностики системных проблем.
Она помогает:

  • находить процессы, блокирующие файлы и порты,
  • отслеживать утечки дескрипторов,
  • контролировать сетевую активность и доступ к устройствам.

В отличие от ss и netstat, lsof даёт полный обзор всех открытых объектов — это делает её мощным инструментом администратора при любых непонятных сбоях.

7 минут чтения
Средний рейтинг статьи — 4.9

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний