Команда fuser предназначена для задействования одноименной утилиты, выводящей список процессов, работающих с заданным файлом, сетевым портом или файловой системой и, в случае необходимости, позволяющая автоматически завершать их работу. Она особенно полезна в том случае, если пользователю требуется отмонтировать использующийся дисковый раздел, соединиться с использующимся сетевым портом или открыть использующийся файл устройства.
Базовый синтаксис команды выглядит следующим образом:
$ fuser [параметры] имена объектов
В качестве имен объектов могут использоваться имена или пути к файлам или директориям, пути к точкам монтирования, а также номера сетевых портов с соответствующими им типами протоколов. Наиболее важными параметрами являются параметр -a, позволяющий выводить информацию обо всех объектах, а не только о тех, которые используются как минимум одним процессом, параметр -v, позволяющий выводить максимально подробную информацию о найденных процессах, параметр -k, позволяющий автоматически завершить исполнение использующих объект процессов, параметр -SIGNAL, позволяющий задать отправляемый для завершения работы процесса системный сигнал, например, -TERM или -15, параметр -l, позволяющий вывести список всех доступных системных сигналов, параметр -i, позволяющий выводить уведомления перед завершением работы каждого из процессов, параметр -w, позволяющий завершать работу лишь тех процессов, которые открыли объект для записи, параметр -m, позволяющий вывести список процессов, использующих указанную файловую систему или блочное устройство, параметр -M, позволяющий выводить информацию лишь в том случае, если объектом является точка монтирования, параметр -n, позволяющий осуществлять поиск в заданном пространстве имен (file, tcp, udp), параметр -u, позволяющий выводить идентификаторы пользователей и параметры -4 и -6, позволяющие искать сокеты, работающие по протоколам IPv4 и IPv6 соответственно.
При отсутствии каких-либо параметров утилита будет выводить лишь идентификаторы процессов, использующих указанные пользователем объекты. При этом к идентификаторам добавляются буквенные спецификаторы режимов открытия:
Для того, чтобы найти все процессы, использующие заданный файл, достаточно использовать команду 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