Гид по технологиям

Команда lsof в Linux: как просматривать открытые файлы и процессы

5 min read Linux Обновлено 02 Dec 2025
lsof в Linux — смотреть открытые файлы и процессы
lsof в Linux — смотреть открытые файлы и процессы

Скриншот: экран с загруженным рабочим столом Linux и выделенным изображением

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

Установка lsof

lsof предустановлен во многих дистрибутивах. Если на вашей системе его нет, установите через менеджер пакетов.

Debian / Ubuntu

sudo apt-get install lsof

Arch / Manjaro

sudo pacman -S lsof

RHEL / CentOS / Fedora

sudo dnf install lsof

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

Базовый запуск и вывод

Запуск без параметров показывает все открытые файлы:

sudo lsof

Пример фрагмента вывода:

COMMAND   PID  TID TASKCMD USER   FD      TYPE   DEVICE SIZE/OFF NODE NAME
init        1       root  cwd       DIR    8,4         4096    2 /
init        1       root  txt       REG    0,196   320484  1234 /sbin/init
...

Краткая расшифровка основных колонок:

КолонкаОписание
COMMANDИмя процесса, использующее файл
PIDИдентификатор процесса
TIDИдентификатор потока (если есть)
TASKCMDИмя команды потока/задачи
USERПользователь или UID процесса
FDДескриптор файла и режим (r, w, u, cwd, txt и т.д.)
TYPEТип ноды: REG, DIR, CHR, SOCK и т.д.
DEVICEНомер устройства (major,minor)
SIZE/OFFРазмер файла или смещение
NODEinode файла
NAMEПуть/имя файла или описание (порт, сокет)

Note: в реальном выводе могут быть дополнительные поля; формат зависит от версии lsof и платформы.

Фильтрация: показать файлы конкретного процесса по имени

Чтобы увидеть все файлы, открытые, например, Firefox, используйте опцию -c (по имени команды):

sudo lsof -c firefox

Скриншот: вывод lsof для процессов firefox с перечислением открытых файлов

Совет: -c принимает префикс имени команды, поэтому -c httpd покажет и httpd и httpd-worker, если имена начинаются одинаково.

Фильтрация по PID

Чтобы работать с конкретным PID, используйте -p:

sudo lsof -p 2121

Если вы не знаете PID, получите его через ps или pgrep:

ps aux | grep firefox
# или
pgrep -a firefox

Скриншот: lsof для процесса по PID, показывающий файлы и сокеты

Показать файлы, открытые конкретным пользователем

Флаг -u ограничивает вывод по пользователю:

sudo lsof -u debian

Скриншот: вывод lsof, отфильтрованный по пользователю debian

Если нужно исключить пользователя, используйте ^ перед именем: -u ^root.

Найти процессы, открывшие конкретный файл

Чтобы узнать, кто держит /bin/sleep, передайте путь в lsof:

sudo lsof /bin/sleep

Вы получите PID, пользователя и тип доступа (r,w).

Полезные опции и примеры

  • -i : показать сетевые соединения и порты sudo lsof -iTCP -sTCP:LISTEN
  • -nP : отключить разрешение имён и портов (быстрее)
  • +D /path : рекурсивно показать файлы в каталоге (медленно на больших деревьях)
  • -t : вывести только PID (удобно для скриптов)
  • -p PID : показать файлы для указанного PID

Примеры:

# Показать процессы, слушающие TCP-порты
sudo lsof -nP -iTCP -sTCP:LISTEN

# Получить только список PID, чтобы убить их
sudo lsof -t /var/log/myapp | xargs -r sudo kill -HUP

Когда lsof может не помочь или работать медленно

  • На системах с огромным количеством открытых файлов lsof может занимать значительное время. Используйте -nP и целевые фильтры.
  • Если процесс завершён, но ресурс не освобождён (зависший дескриптор), lsof покажет PID, и вы сможете принять решение о рестарте.
  • lsof опирается на /proc; в нестандартных контейнерах или chroot окружениях вывод может быть неполным.

Альтернативные инструменты и подходы

  • fuser — показывает процессы, использующие файл или сокет: sudo fuser -v /mnt/point
  • /proc/*/fd — ручной способ: ls -l /proc//fd показывает, какие файлы открыты процессом
  • ss / netstat — для сетевых соединений; ss быстрее и современнее: ss -plnt

Чеклист для ролей

  • Операционный инженер:

    • запустить sudo lsof -nP -i :<порт> для поиска слушающих процессов
    • если порт занят, определить PID sudo lsof -t -i :<порт> и проверить конфигурацию
  • Системный администратор:

    • sudo lsof +D /mnt/target для поиска мешающих открытых файлов перед отмонтированием
    • при обнаружении «deleted» файлов проверить размер через lsof | grep deleted
  • Разработчик приложения:

    • при утечке дескрипторов тестировать сценарии и проверять ls -l /proc//fd
    • добавить метрики открытых дескрипторов в мониторинг

Краткая шпаргалка (Cheat sheet)

КомандаЧто делает
sudo lsofВсе открытые файлы
sudo lsof -c nameФайлы процессов по имени
sudo lsof -p PIDФайлы процесса по PID
sudo lsof /path/to/fileКто держит конкретный файл
sudo lsof -iTCP -sTCP:LISTENСлушающие TCP-сокеты

Отладка: распространённые проблемы и решения

  • “Permission denied” — запустите с sudo.
  • “File deleted but space not freed” — lsof покажет процесс, который держит файл; перезапустите его.
  • Неполный вывод в контейнере — проверьте, видны ли внутри /proc и запуск lsof с достаточными правами.

Глоссарий в одной строке

  • дескриптор (FD): целое число, представляющее открытый файл или сокет в процессе.

Критерии приёмки

  • Можно получить PID процесса, открывающего заданный файл.
  • Удаление или отмонтирование ресурса не мешает, если lsof показывает, что нет открытых дескрипторов.
  • Для сетевых портов lsof указывает слушающий процесс и порт.

Заключение

lsof — мощный инструмент для понимания того, какие процессы используют файлы и ресурсы в системе. В сочетании с /proc, fuser и ss он помогает быстро диагностировать блокировки, утечки дескрипторов и занятые порты. Используйте фильтры и опцию -nP для повышения производительности на больших системах.

Важно: всегда проверяйте вывод перед принудительным завершением процессов.

FAQ

  • Как быстро найти процесс, слушающий порт 8080?

    Используйте: sudo lsof -nP -iTCP:8080 -sTCP:LISTEN.

  • Можно ли использовать lsof в контейнерах?

    Да, но он покажет только те процессы и /proc, которые доступны внутри контейнера.

  • Как освободить пространство, если файл удалён, но место не возвращается?

    Найдите процесс через lsof, затем перезапустите или завершите его, чтобы ОС освободила inode и место.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как пользоваться AirDroid на Linux
Мобильные инструменты

Как пользоваться AirDroid на Linux

Автоматическая очистка Linux с Cruftbuster
Linux утилиты

Автоматическая очистка Linux с Cruftbuster

Master PDF Editor на Linux: создание и редактирование
PDF редакторы

Master PDF Editor на Linux: создание и редактирование

Многокамерная трансляция бесплатно
Стриминг

Многокамерная трансляция бесплатно

Открыть Configuration Manager (SCCM) в Windows 11
Системное администрирование

Открыть Configuration Manager (SCCM) в Windows 11

Внешнее Featured Image по URL в WordPress
WordPress

Внешнее Featured Image по URL в WordPress