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

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

5 min read Системное администрирование Обновлено 12 Dec 2025
lsof в Linux: просмотр открытых файлов
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 — не панацея для безопасности, а инструмент диагностики.

Вывод 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 — для долгосрочного аудита доступа к файлам и системных вызовов.

Мини‑методология: как быстро расследовать проблему с файлом

  1. Определите симптом: нельзя размонтировать диск /tmp, файл заблокирован, неожиданные сетевые соединения.
  2. Запустите lsof для области интереса: sudo lsof +D /path или sudo lsof -i.
  3. Отфильтруйте по PID и просмотрите /proc//cmdline и журналы systemd/journalctl.
  4. Завершите процесс корректно (kill PID), если нужно принудительно — SIGTERM, при необходимости SIGKILL.
  5. Проверьте повторно, чтобы убедиться, что ресурс освободился.

Шпаргалка: часто используемые команды lsof

ЗадачаКоманда
Все открытые файлы (пользователь)lsof
Все открытые файлы (с правами)sudo lsof
Сетевые соединенияsudo lsof -i
Слушающие порты TCPsudo lsof -nP -iTCP -sTCP:LISTEN
Файлы процесса по PIDsudo 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 с путями и именами пользователей без маскировки — он может раскрыть чувствительную информацию о сервисах и конфигурации.

Вывод lsof -i

ALT заметка к изображению: Список сетевых соединений, показанный в терминале.

Краткий глоссарий

  • Файловый дескриптор — целое число, которое ядро использует для обращения к открытому файлу.
  • Сокет — конечная точка сетевого соединения.
  • inode — индексный дескриптор файла в файловой системе.

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

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

Заметки:

  • lsof не заменяет аудит и постоянный мониторинг безопасности.
  • При расследовании инцидентов комбинируйте данные из нескольких источников.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Windows Sandbox и VirtualBox: запуск одновременно
Виртуализация

Windows Sandbox и VirtualBox: запуск одновременно

ERROR_DBG_EXCEPTION_HANDLED: причины и устранение
Ошибки Windows

ERROR_DBG_EXCEPTION_HANDLED: причины и устранение

Добавить iCloud Photos в «Фотографии» Windows 11
Windows

Добавить iCloud Photos в «Фотографии» Windows 11

Google Cloud Print в Windows: сервис и драйвер
Инструкции

Google Cloud Print в Windows: сервис и драйвер

Скрыть или показать панель закладок в браузере
Браузеры

Скрыть или показать панель закладок в браузере

Ошибка This device is not present — код 24
Windows

Ошибка This device is not present — код 24