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

Что такое lsof — кратко: утилита для перечисления открытых файлов в Unix-подобных системах. “Файлы” здесь означают не только обычные документы, но и сокеты, устройства и анонимные inode. lsof помогает выяснить, какие процессы держат файлы открытыми, почему не размонтируется диск и какие сетевые соединения установлены.
Установка lsof
На многих дистрибутивах lsof уже установлен. Проверьте это, выполнив в терминале:
lsofЕсли команда не найдена, установите пакет через менеджер пакетов вашей системы.
Для Ubuntu/Debian:
sudo apt install lsofДля Arch Linux и производных:
sudo pacman -S lsofДля RHEL, Rocky и Oracle Linux:
sudo dnf install lsofВажно: на некоторых системах установка потребует прав root.
Базовое использование и ключевые опции
Запуск без аргументов выведет все открытые файлы текущего пользователя. Для просмотра всех файлов системы запустите lsof от root:
sudo lsofПолезные опции:
- -i — показывает интернет-сокеты (TCP/UDP)
- -p
— фильтрует по идентификатору процесса - -u
— показывает файлы, открытые конкретным пользователем - -nP — отключает обратное разрешение имен и именование портов (быстрее и чище)
- -t — выводит только PID (удобно для скриптов)
- +D <каталог> — рекурсивно показывает файлы в каталоге (может быть медленным)
- -r <сек> — повторный режим: обновляет вывод каждые N секунд
Примеры:
sudo lsof -i
sudo lsof -i -r 5
sudo lsof -p 1234
sudo lsof -u alice
sudo lsof -nP -iTCP -sTCP:LISTENКак читать вывод lsof
Типичный вывод содержит колонки: COMMAND, PID, USER, FD, TYPE, DEVICE, SIZE/OFF, NODE, NAME. Краткие пояснения:
- COMMAND — имя команды/процесса
- PID — идентификатор процесса
- USER — владелец процесса
- FD — файловый дескриптор (например, cwd, txt, mem, 3u)
- TYPE — тип файла (REG, DIR, CHR, SOCK)
- NAME — путь к файлу или описание сокета
Пример применения: если не удается размонтировать диск, найдите процессы, держащие файлы на нём, и корректно завершите их.
Наблюдение сетевых соединений
Чтобы увидеть все активные сетевые соединения и слушающие порты:
sudo lsof -iЧтобы отфильтровать только слушающие TCP-порты:
sudo lsof -nP -iTCP -sTCP:LISTENКоманда полезна для быстрого обнаружения неожиданных сетевых соединений. Однако умелые злоумышленники могут скрывать следы, поэтому lsof — не панацея для безопасности, а инструмент диагностики.
Повторный режим и мониторинг
Опция -r переводит lsof в режим наблюдения с периодическим обновлением. По умолчанию обновление каждые 15 секунд. Пример — показать изменения каждые 10 секунд:
sudo lsof -r 10Комбинируйте -r с фильтрами, например для мониторинга сетевых соединений каждые 5 секунд:
sudo lsof -i -r 5Нажмите Ctrl+C, чтобы остановить наблюдение.
Когда lsof может не показать то, что вы ждёте
- Если процесс использует неименуемые inode или сокеты, описание может быть неполным.
- Если у вас недостаточно прав, некоторые записи могут быть скрыты (запускайте от root для полной картины).
- Очень короткоживущие соединения могут появляться и исчезать между обновлениями.
- Современное вредоносное ПО может подменять системные утилиты или работать на уровне ядра и скрываться от lsof.
Important: lsof — хороший диагностический инструмент, но для расследования инцидентов используйте его совместно с журналами, сетевыми снифферами (tcpdump/ss) и средствами целостности файлов.
Альтернативы и дополнения
- fuser — показывает процессы, использующие файлы или файловые системы; подходит для быстрого удаления блокировок.
- ss — современная альтернатива netstat для анализа сетевых соединений.
- /proc/
/fd — напрямую просмотреть открытые дескрипторы процесса. - auditd — для долгосрочного аудита доступа к файлам и системных вызовов.
Мини‑методология: как быстро расследовать проблему с файлом
- Определите симптом: нельзя размонтировать диск /tmp, файл заблокирован, неожиданные сетевые соединения.
- Запустите lsof для области интереса: sudo lsof +D /path или sudo lsof -i.
- Отфильтруйте по PID и просмотрите /proc/
/cmdline и журналы systemd/journalctl. - Завершите процесс корректно (kill PID), если нужно принудительно — SIGTERM, при необходимости SIGKILL.
- Проверьте повторно, чтобы убедиться, что ресурс освободился.
Шпаргалка: часто используемые команды lsof
| Задача | Команда |
|---|---|
| Все открытые файлы (пользователь) | lsof |
| Все открытые файлы (с правами) | sudo lsof |
| Сетевые соединения | sudo lsof -i |
| Слушающие порты TCP | sudo lsof -nP -iTCP -sTCP:LISTEN |
| Файлы процесса по PID | sudo lsof -p |
| Файлы пользователя | sudo lsof -u |
| Рекурсивно по каталогу | sudo lsof +D /путь |
| Только PID (скрипты) | sudo lsof -t /путь |
| Наблюдение в реальном времени | sudo lsof -r 5 -i |
Роли и чек‑листы
Для системного администратора:
- Установить lsof и проверить версии.
- Добавить команды в набор для устранения неполадок (runbook).
- Использовать lsof вместе с журналами и системой мониторинга.
Для разработчика:
- Использовать lsof для поиска файлов, блокируемых тестами.
- Применять -nP для быстрого вывода без задержек DNS.
Для специалиста по безопасности:
- Сканировать неожиданные слушающие порты.
- Сопоставлять процессы с цифровыми подписями и контрольными суммами.
Критерии приёмки
- Можно получить список всех открытых файлов при запуске sudo lsof.
- Удаётся найти процесс, мешающий размонтированию устройства.
- Наблюдение сетевых соединений показывает слушающие порты и активные соединения.
Безопасность и конфиденциальность
lsof требует прав для полного обзора системы. Не давайте root‑доступ ненадёжным скриптам. Не публикуйте вывод lsof с путями и именами пользователей без маскировки — он может раскрыть чувствительную информацию о сервисах и конфигурации.
ALT заметка к изображению: Список сетевых соединений, показанный в терминале.
Краткий глоссарий
- Файловый дескриптор — целое число, которое ядро использует для обращения к открытому файлу.
- Сокет — конечная точка сетевого соединения.
- inode — индексный дескриптор файла в файловой системе.
Краткое резюме
lsof — простой и мощный инструмент для диагностики открытых файлов и сетевых соединений на Linux. Он помогает находить процессы, мешающие операциям с файлами, и быстро локализовать причинные PID. Используйте его в сочетании с другими инструментами (ss, fuser, журналы) и включайте в runbook для быстрого реагирования.
Заметки:
- lsof не заменяет аудит и постоянный мониторинг безопасности.
- При расследовании инцидентов комбинируйте данные из нескольких источников.
Похожие материалы
Windows Sandbox и VirtualBox: запуск одновременно
ERROR_DBG_EXCEPTION_HANDLED: причины и устранение
Добавить iCloud Photos в «Фотографии» Windows 11
Google Cloud Print в Windows: сервис и драйвер
Скрыть или показать панель закладок в браузере