2. lsof и fuser

Вы когда-нибудь пытались отмонтировать USB-накопитель и получали ошибку «Устройство или ресурс занят» (Device or Resource Busy)? Эта распространенная проблема возникает, когда процесс все еще использует файл или каталог на устройстве. Чтобы решить эту проблему, вам нужно выяснить, какой процесс удерживает ресурс. Двумя мощными утилитами для этой задачи являются lsof и fuser.

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

В Linux почти все рассматривается как файл, включая диски, каналы, сетевые сокеты и устройства. Команда lsof (сокращение от «list open files» — список открытых файлов) показывает подробный список всех открытых файлов и процессов, которые их используют.

Чтобы увидеть, какие процессы используют текущий каталог (.), вы можете выполнить:

pete@icebox:~$ lsof .
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
lxsession 1491 pete  cwd    DIR    8,6     4096  131 .
update-no 1796 pete  cwd    DIR    8,6     4096  131 .
nm-applet 1804 pete  cwd    DIR    8,6     4096  131 .
xterm     2205 pete  cwd    DIR    8,6     4096  131 .
bash      2207 pete  cwd    DIR    8,6     4096  131 .
lsof      5914 pete  cwd    DIR    8,6     4096  131 .

Вывод показывает команду (COMMAND), идентификатор процесса (PID) и пользователя (USER), связанного с каждым открытым файлом. Имея эту информацию, вы можете определить процессы, которые мешают вам отмонтировать устройство.

Команда fuser

Еще одним отличным инструментом является команда fuser (сокращение от «file user» — пользователь файла). Эта утилита определяет, какие процессы используют определенные файлы, сокеты или файловые системы. Команда linux fuser — это быстрый способ увидеть PID процессов, обращающихся к конкретному ресурсу.

Использование опции -v (подробный режим) дает более подробный вывод:

pete@icebox:~$ fuser -v .
                     USER        PID ACCESS COMMAND
/home/pete:         pete  1491 ..c.. lxsession
                     pete  1796 ..c.. update-notifier
                     pete  1804 ..c.. nm-applet
                     pete  2205 ..c.. xterm
                     pete  2207 ..c.. bash

Здесь мы можем четко видеть, какие процессы используют наш текущий каталог. Столбец ACCESS показывает, как используется файл (например, c для текущего каталога).

Завершение процессов с помощью fuser

Ключевой особенностью команды fuser является ее способность завершать процессы, использующие ресурс. Опция fuser -k отправляет сигнал SIGKILL каждому процессу, обращающемуся к указанному файлу или файловой системе. Это особенно полезно для отмонтирования занятого устройства.

Например, чтобы завершить все процессы, использующие точку монтирования /mnt/usb, вы бы выполнили:

sudo fuser -k /mnt/usb

Использование fuser -k в Linux — это быстрый и эффективный способ освободить ресурс.

fuser против lsof

Итак, когда следует использовать fuser против lsof?

  • lsof отлично подходит для детального исследования. Он предоставляет обширную информацию обо всех открытых файлах, что делает его идеальным для сложной отладки.
  • fuser более прямолинеен. Он идеально подходит для быстрого определения и, при необходимости, завершения процессов, работающих с определенным файлом или точкой монтирования. Команда fuser command часто является более быстрым выбором для устранения ошибок «Устройство или ресурс занят».

Оба инструмента необходимы любому пользователю Linux. Ознакомьтесь с ними, чтобы эффективно управлять файлами и процессами.

Войдите, чтобы сохранить ваш прогресс обучения

Вход

Упражнения

Практика ведет к совершенству! Вот несколько практических лабораторных работ для закрепления вашего понимания управления процессами и устранения конфликтов ресурсов:

  1. Управление и мониторинг процессов Linux — Попрактикуйтесь во взаимодействии с процессами на переднем и заднем планах, просматривайте их с помощью ps, отслеживайте ресурсы с помощью top и завершайте их с помощью kill. Эта лабораторная работа поможет вам определить и управлять процессами, которые могут удерживать ресурсы, такие как файлы на USB-накопителе.

Эта лабораторная работа поможет вам применить эти концепции в реальных сценариях и повысить уверенность в определении и управлении системными процессами.

Тест

Какая команда используется для вывода списка открытых файлов и связанной с ними информации о процессе? (Пожалуйста, отвечайте на английском языке, используя только строчные буквы.)