lsof
Утилита lsof (сокращение от List Open Files) предназначена для отображения списка открытых файлов и связанных с ними процессов в операционных системах UNIX/Linux.
В контексте UNIX-подобных систем, всё является файлом — как обычные файлы и каталоги, так и сокеты, каналы, устройства, и даже сетевые соединения.
Таким образом, lsof является мощным инструментом для анализа ресурсов ввода-вывода, сетевых портов и взаимодействий процессов.
🧩 Академическое описание
Утилита lsof взаимодействует с таблицами открытых файловых дескрипторов (file descriptor tables) процессов, извлекая сведения о:
- PID (Process ID) — идентификатор процесса, которому принадлежит файл;
- FD (File Descriptor) — файловый дескриптор, представляющий ссылку на открытую сущность ядра;
- TYPE — тип объекта (обычный файл, каталог, сокет, pipe и т.д.);
- DEVICE / SIZE / NODE — метаданные устройства и индексного дескриптора (inode);
- NAME — путь или описание ресурса.
⚙️ Базовый синтаксис
lsof [опции] [файл|каталог|порт]
Пример простого вызова:
lsof
Отобразит все открытые файлы всех процессов в системе. Для фильтрации используются аргументы и опции.
🔍 Часто используемые опции
| Опция | Назначение | Пример |
|---|---|---|
| -p <PID> | Показать файлы, открытые конкретным процессом | lsof -p 1234 |
| -u <user> | Отфильтровать по пользователю | lsof -u sasha |
| +D <dir> | Рекурсивно просканировать каталог | lsof +D /home/sasha |
| -i | Отобразить сетевые соединения | lsof -i |
| -i :<port> | Проверить, что использует конкретный порт | lsof -i :8080 |
| -t | Вывести только PID (удобно для скриптов) | lsof -t -i :22 |
🌐 Сетевые соединения и сокеты
Утилита lsof позволяет наблюдать за сетевыми сокетами — объектами ядра, инкапсулирующими TCP/UDP-соединения.
Каждый сокет имеет собственный файловый дескриптор, отображаемый в lsof как тип IPv4 или IPv6.
lsof -iTCP -sTCP:LISTEN
Покажет процессы, прослушивающие TCP-порты (аналогично netstat -tlnp).
🧰 Примеры практического использования
🔸 Найти, какой процесс использует порт 80
sudo lsof -i :80
🔸 Проверить, кто держит открытым каталог
lsof +D /mnt/usb
🔸 Завершить процессы, блокирующие файл
kill -9 $(lsof -t /path/to/file)