lsof и fuser
100%

Использование процессов · Урок 2

lsof и fuser

Узнайте, как определять процессы, использующие файлы, каталоги, точки подключения и сетевые сокеты.

Файловая система может оставаться занятой, потому что процесс открыл файл, отобразил файл в память или использует каталог как текущий рабочий. lsof и fuser помогают определить такие связи. Сначала исследуйте ситуацию; остановка процессов — отдельное решение с эксплуатационными последствиями.

Перечисление открытых файлов через lsof

lsof означает «list open files» — перечислить открытые файлы. Запросите путь, чтобы увидеть соответствующие записи:

$ sudo lsof -- /mnt/usb

Для целого дерева каталогов в одной файловой системе реализации обычно поддерживают +D, но рекурсивное сканирование может быть затратным:

$ sudo lsof +D /mnt/usb

К полезным столбцам относятся COMMAND, PID, USER, файловый дескриптор (FD), тип, устройство и NAME. Метка cwd в столбце FD означает, что процесс использует каталог как текущий рабочий. Непривилегированный вывод может быть неполным для процессов других пользователей.

Что означает cwd в столбце FD?

Определение пользователей через fuser

fuser сообщает идентификаторы процессов, использующих указанный файл или файловую систему. Подробный вывод добавляет пользователей, виды доступа и имена команд:

$ sudo fuser -v /mnt/usb

Чтобы рассматривать аргумент как подключённую файловую систему и найти процессы, обращающиеся к файлам внутри неё, используйте параметр подключения, поддерживаемый fuser из procps:

$ sudo fuser -vm /mnt/usb

Убедитесь, что путь является требуемой точкой подключения, например через findmnt --target /mnt/usb. Bind-подключения, пространства имён, права и состояния гонки могут влиять на сведения одного запроса.

Зачем использовать fuser -v вместо простого fuser при исследовании?

Работа с занятой файловой системой

Используйте осознанную последовательность вместо немедленного завершения каждого совпавшего PID:

  1. Подтвердите хост, путь, источник подключения и запланированное обслуживание.
  2. По возможности найдите процессы обоими инструментами.
  3. Определите, можно ли остановить каждый процесс, вывести его из каталога или дать ему завершиться.
  4. При наличии используйте диспетчер служб или интерфейс приложения для остановки.
  5. Повторите запрос, затем отключите файловую систему и проверьте результат.

fuser -k отправляет сигнал совпавшим процессам. В распространённых реализациях procps по умолчанию это SIGKILL, поэтому нормальное завершение не выполняется. Если явно одобренное завершение необходимо, выберите подходящий сигнал, проверьте PID и владельца и учтите, что набор процессов может измениться между проверкой и действием.

Почему fuser -k /mnt/usb — плохой первый шаг диагностики?

Выбор инструмента

Используйте lsof, когда нужен подробный список открытых файлов, дескрипторов или сокетов. Используйте fuser для ориентированного на путь представления совпавших PID и видов доступа. Ни один результат сам по себе не говорит, безопасно ли завершать процесс.

Для сетевых сокетов укажите явное пространство протокола в fuser или примените специализированный инструмент вроде ss:

$ sudo fuser -v 22/tcp
$ sudo ss -lntp

Какой инструмент подходит для подробного списка открытых файловых дескрипторов и процессов-владельцев?

Урок завершён

Вы завершили lsof и fuser

Теперь вы можете исследовать использование файлов и файловых систем, не считая завершение процесса действием по умолчанию.

  • Используйте lsof для подробных записей открытых файлов.

  • Используйте fuser для сведений о PID и доступе, ориентированных на путь.

  • Подтверждайте подключение и учитывайте права и состояния гонки.

  • Координируйте нормальную остановку до рассмотрения сигнала.

  • Повторяйте запрос и проверяйте результат отключения или работы службы.

Сохраните прогресс

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

Создать бесплатный аккаунт
Следующий Урок
Назад к Использование процессов