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

lsof (list open files) — одна из базовых утилит для диагностики в Linux. Под «файлом» lsof понимает не только обычные файлы в файловой системе, но и сокеты, пайпы, устройства и монтирования. Знание вывода lsof помогает понять, какие процессы держат ресурсы, почему нельзя отмонтировать раздел или удалить файл, и какие процессы слушают сетевые порты.
Установка lsof
lsof предустановлен во многих дистрибутивах. Если на вашей системе его нет, установите через менеджер пакетов.
Debian / Ubuntu
sudo apt-get install lsofArch / Manjaro
sudo pacman -S lsofRHEL / 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 | Размер файла или смещение |
| NODE | inode файла |
| NAME | Путь/имя файла или описание (порт, сокет) |
Note: в реальном выводе могут быть дополнительные поля; формат зависит от версии lsof и платформы.
Фильтрация: показать файлы конкретного процесса по имени
Чтобы увидеть все файлы, открытые, например, Firefox, используйте опцию -c (по имени команды):
sudo lsof -c firefox
Совет: -c принимает префикс имени команды, поэтому -c httpd покажет и httpd и httpd-worker, если имена начинаются одинаково.
Фильтрация по PID
Чтобы работать с конкретным PID, используйте -p:
sudo lsof -p 2121Если вы не знаете PID, получите его через ps или pgrep:
ps aux | grep firefox
# или
pgrep -a firefox
Показать файлы, открытые конкретным пользователем
Флаг -u ограничивает вывод по пользователю:
sudo lsof -u 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 и место.
Похожие материалы
Как пользоваться AirDroid на Linux
Автоматическая очистка Linux с Cruftbuster
Master PDF Editor на Linux: создание и редактирование
Многокамерная трансляция бесплатно
Открыть Configuration Manager (SCCM) в Windows 11