Команда fuser

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

Базовый синтаксис команды выглядит следующим образом:

$ fuser [параметры] имена объектов

В качестве имен объектов могут использоваться имена или пути к файлам или директориям, пути к точкам монтирования, а также номера сетевых портов с соответствующими им типами протоколов. Наиболее важными параметрами являются параметр -a, позволяющий выводить информацию обо всех объектах, а не только о тех, которые используются как минимум одним процессом, параметр -v, позволяющий выводить максимально подробную информацию о найденных процессах, параметр -k, позволяющий автоматически завершить исполнение использующих объект процессов, параметр -SIGNAL, позволяющий задать отправляемый для завершения работы процесса системный сигнал, например, -TERM или -15, параметр -l, позволяющий вывести список всех доступных системных сигналов, параметр -i, позволяющий выводить уведомления перед завершением работы каждого из процессов, параметр -w, позволяющий завершать работу лишь тех процессов, которые открыли объект для записи, параметр -m, позволяющий вывести список процессов, использующих указанную файловую систему или блочное устройство, параметр -M, позволяющий выводить информацию лишь в том случае, если объектом является точка монтирования, параметр -n, позволяющий осуществлять поиск в заданном пространстве имен (file, tcp, udp), параметр -u, позволяющий выводить идентификаторы пользователей и параметры -4 и -6, позволяющие искать сокеты, работающие по протоколам IPv4 и IPv6 соответственно.

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

  • c: текущая директория
  • e: запущенный исполняемый файл
  • f: открытый для чтения файл, не выводится при отсутствии параметров
  • F: открытый для записи файл, не выводится при отсутствии параметров
  • r: корневая директория
  • m: отображенный в память файл или разделяемая библиотека

Примеры использования

Поиск процессов, использующих файл

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

$ fuser echo-icon-theme-0.3.3.tar.bz2
/home/alexd/echo-icon-theme-0.3.3.tar.bz2: 17833

Впрочем, параметр -v позволяет получить дополнительную информацию:

$ fuser -v echo-icon-theme-0.3.3.tar.bz2
                     ПОЛЬЗ-ЛЬ    PID ДОСТУП КОМАНДА
/home/alexd/echo-icon-theme-0.3.3.tar.bz2:
                     alexd     17833 f.... file-roller

Очевидно, что файл архива был открыт пользователем alexd для чтения с помощью приложения file-roller.

Завершение работы процессов, использующих файл

Для того, чтобы завершить работу всех процессов, использующих заданный файл, достаточно использовать параметр -k. Также не помешает указать имя отправляемого системного сигнала и активировать уведомления с помощью параметра -i:

$ fuser -k -TERM -i echo-icon-theme-0.3.3.tar.bz2
/home/alexd/echo-icon-theme-0.3.3.tar.bz2: 17833
Завершить процесс 17833? (y/N) y

В случае ввода y процесс будет завершен, в противном случае утилита не будет отправлять каких-либо системных сигналов.

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

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

$ fuser -m -v /media/alexd/sd card/
                     ПОЛЬЗ-ЛЬ    PID ДОСТУП КОМАНДА
/media/alexd/sd card:
                     alexd     17991 f.... evince

Очевидно, что файл на смонтированной файловой системе открыт с помощью приложения evince. В данном случае для завершения работы этого приложения утилита fuser может использоваться с параметрами -m, -i, -k и -TERM.

$ fuser -m -i -k -TERM /media/alexd/sd card/
/media/alexd/sd card: 17991
Завершить процесс 17991? (y/N) y

Теперь ничто не помешает отмонтировать файловую систему.

# umount /media/alexd/sd card/

Поиск процессов, использующих локальные сетевые порты

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

$ fuser -v 12345/tcp
                     ПОЛЬЗ-ЛЬ    PID ДОСТУП КОМАНДА
12345/tcp:           alexd     18220 F.... nc