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

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

4 min read Linux Обновлено 13 Apr 2026
lsof в Linux: как просмотреть открытые файлы
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 в терминале

Самый простой запуск выводит открытые файлы для текущего пользователя:

lsof

Чтобы увидеть все системные открытые файлы (включая процессы других пользователей), выполните от имени root:

sudo lsof

lsof выводит столбцы: 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

Практическая методика расследования проблем

Мини-методология для поиска причины блокировки файлов или подозрительных соединений:

  1. Соберите базовый снимок:
sudo lsof > /tmp/lsof-snapshot.txt
  1. Поиск по интересующему объекту (путь, порт, пользователь):
sudo lsof /var/log/syslog
sudo lsof -i :22
sudo lsof -u suspicious_user
  1. Определите PID и проанализируйте процесс:
ps -fp 
cat /proc//cmdline
ls -l /proc//fd
  1. Если процесс легитимен — завершите корректно. Если нет — сохраните артефакты и завершите:
sudo kill 
# при необходимости принудительно
sudo kill -9 
  1. Если подозрение на взлом — соберите логи, снимки состояния сети и проведите офлайн-анализ.

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 -i, показывающий сетевые сокеты и порты

Краткое резюме

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

Notes: сохраняйте выводы для аудита и избегайте мгновенного убийства системных процессов. lsof — отличное диагностическое средство, но в сложных инцидентах нужна комплексная forensic-процедура.

Ключевые команды для быстрого запоминания:

sudo lsof
sudo lsof -i
sudo lsof /путь/к/файлу
sudo lsof -i :80
lsof -r 5
lsof -t /путь/к/файлу

Конец статьи.

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

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

lsblk в Linux — обзор и примеры команд
Linux

lsblk в Linux — обзор и примеры команд

Стриминговые приложения на PS4 — как установить
Гайды

Стриминговые приложения на PS4 — как установить

Сменить пароль root в Kali Linux
Linux

Сменить пароль root в Kali Linux

Как пожаловаться в Twitter — пошаговое руководство
Социальные сети

Как пожаловаться в Twitter — пошаговое руководство

Открыть ISO, TAR и 7‑Zip на Chromebook
Инструкции

Открыть ISO, TAR и 7‑Zip на Chromebook

Как архивировать и распаковывать файлы в Windows
Windows

Как архивировать и распаковывать файлы в Windows