Как использовать lsof в Linux для просмотра открытых файлов
lsof — это удобная утилита для списка открытых файлов в Unix/Linux. С её помощью вы быстро найдёте процесс, блокирующий размонтирование диска, определите сетевые сокеты и диагностируете подозрительную активность. В статье есть команды, объяснение полей вывода, часто используемые опции и рекомендации по расследованию.

Что такое lsof?
lsof — утилита для перечисления открытых файлов в системах Unix и Linux. Под «файлами» в Unix подразумевается всё: обычные файлы, каталоги, сокеты, устройства и даже анонимные буферы в памяти. Изначально разработана Виктором Абеллом в Purdue University и сейчас поддерживается сообществом на GitHub.
Коротко: lsof показывает, какие процессы имеют какие файлы открытыми в любой момент времени.
Установка lsof на Linux
В большинстве дистрибутивов lsof уже установлен. Проверьте, набрав:
lsofЕсли команда не найдена, установите пакет через менеджер пакетов:
На Ubuntu / Debian:
sudo apt install lsofНа Arch и производных:
sudo pacman -S lsofНа RHEL, Rocky, Oracle Linux:
sudo dnf install lsofБазовый просмотр открытых файлов

Самый простой запуск выводит открытые файлы для текущего пользователя:
lsofЧтобы увидеть все системные открытые файлы (включая процессы других пользователей), выполните от имени root:
sudo lsoflsof выводит столбцы: COMMAND, PID, USER, FD (дескриптор файла), TYPE, DEVICE, SIZE/OFF, NODE, NAME (путь). Ниже объяснены важные поля.
Объяснение полей вывода
- COMMAND — имя команды/процесса.
- PID — идентификатор процесса.
- USER — владелец процесса.
- FD — файловый дескриптор. Примеры: cwd (текущий каталог), txt (исполняемый файл), mem (карта памяти), 1u/2u — stdout/stderr с правами (u=rwx).
- TYPE — тип файла: REG (обычный), DIR, CHR, FIFO, IPv4/IPv6.
- NAME — путь к файлу или описание ресурса.
Понимание FD и TYPE помогает быстро определить, почему файл считается занятым.
Частые сценарии и команды
Ниже — практические примеры для типичных задач.
Найти процессы, удерживающие файл или каталог:
sudo lsof /путь/к/файлуЕсли размонтирование диска не удаётся, выясните, какие процессы держат файлы на нём:
sudo lsof +f -- /mnt/cdromНайти процесс, слушающий конкретный порт (например, 80):
sudo lsof -i :80Просмотреть все сетевые соединения:
sudo lsof -iВывести только файлы, открытые данным пользователем:
lsof -u usernameПовторный режим для наблюдения в реальном времени (назначение интервала в секундах):
lsof -r 5Комбинирование опций (пример: наблюдение сетевых соединений каждую секунду):
lsof -i -r 1Практическая методика расследования проблем
Мини-методология для поиска причины блокировки файлов или подозрительных соединений:
- Соберите базовый снимок:
sudo lsof > /tmp/lsof-snapshot.txt- Поиск по интересующему объекту (путь, порт, пользователь):
sudo lsof /var/log/syslog
sudo lsof -i :22
sudo lsof -u suspicious_user- Определите PID и проанализируйте процесс:
ps -fp
cat /proc//cmdline
ls -l /proc//fd - Если процесс легитимен — завершите корректно. Если нет — сохраните артефакты и завершите:
sudo kill
# при необходимости принудительно
sudo kill -9 - Если подозрение на взлом — соберите логи, снимки состояния сети и проведите офлайн-анализ.
Important: не убивайте системные процессы без проверки — это может нарушить работу сервера.
Частая ошибка и обходные ситуации
Когда lsof не видит файлы или даёт неполные результаты:
- lsof требует прав: без root оно не покажет детали процессов других пользователей.
- Некоторые контейнеры и песочницы могут скрывать дескрипторы; в таких случаях анализируйте внутри контейнера.
- Злоумышленники с правами root или использующие ядро могут скрывать свои следы — lsof не является панацеей для обнаружения профессиональных атак.
Альтернативы и дополняющие инструменты:
- fuser — показывает процессы, использующие файлы или монтированные фрагменты:
sudo fuser -vm /mnt/point- ss / netstat — для сетевых соединений.
- /proc — прямой источник данных о процессах и дескрипторах.
Быстрая шпаргалка по опциям lsof
- -i — интернет-сокеты (TCP/UDP).
- -u user — файлы указанного пользователя.
- -p pid — файлы указанного процесса.
- -t — вывод только PID (удобно для скриптов).
- +D dir — рекурсивно перечислить файлы в каталоге.
- +f – path — указание точки монтирования для поиска.
- -c имя — фильтр по имени команды.
Пример использования в скрипте для грубого удаления процесса, удерживающего путь:
PID=$(sudo lsof -t /путь/к/файлу)
if [ -n "$PID" ]; then
sudo kill "$PID"
fiРоли: краткие чеклисты
Для администратора:
- Запустить sudo lsof для обнаружения блокировок.
- Проверить владельца и команду процесса.
- Провести безопасное завершение процесса.
- Сделать снимок /tmp для аудита.
Для инженера безопасности:
- Идентифицировать неизвестные сетевые соединения.
- Сохранить выводы, метаданные процесса и логи.
- Сопоставить с списком легитимных служб.
Безопасность и соответствие
lsof помогает находить необычные сетевые соединения и файлы с подозрительными владельцами. Однако данные lsof — временные. Для соответствия требованиям аудита и расследования инцидентов собирайте постоянные логи и снимки состояния. Храните артефакты вне исследуемой системы.
Когда lsof не подходит
- Если злоумышленник использует руткит, он может скрыть процессы и дескрипторы.
- В ограниченных контейнерных средах lsof может не видеть хостовые дескрипторы. В таких случаях работайте внутри контейнера или на хосте.
Краткий глоссарий
- FD — файловый дескриптор, идентификатор открытого файла в процессе.
- PID — идентификатор процесса.
- socket — сетевой канал связи.

Краткое резюме
lsof — простой и мощный инструмент для поиска открытых файлов и сетевых сокетов в Linux. Он помогает решать проблемы с размонтированием, находить процессы, слушающие порты, и получать быстрый снимок состояния системы. Используйте его в комбинации с fuser, ss и /proc для полного анализа.
Notes: сохраняйте выводы для аудита и избегайте мгновенного убийства системных процессов. lsof — отличное диагностическое средство, но в сложных инцидентах нужна комплексная forensic-процедура.
Ключевые команды для быстрого запоминания:
sudo lsof
sudo lsof -i
sudo lsof /путь/к/файлу
sudo lsof -i :80
lsof -r 5
lsof -t /путь/к/файлуКонец статьи.
Похожие материалы
lsblk в Linux — обзор и примеры команд
Стриминговые приложения на PS4 — как установить
Сменить пароль root в Kali Linux
Как пожаловаться в Twitter — пошаговое руководство
Открыть ISO, TAR и 7‑Zip на Chromebook