Использование команды Fuser в Linux

Команда fuser – очень умная утилита Linux, которая определяет, какой процесс использует файл, каталог или сокет. Также она предоставляет информацию о типе доступа и пользователе, которому принадлежит процесс.

Как работает утилита fuser

Чтобы посмотреть все функции fuser, ознакомьтесь с этим мануалом

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

fuser

Команда вернет: 

No process specification given
Usage: fuser [-fMuv] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...
       fuser -l
       fuser -V
Show which processes use the named files, sockets, or filesystems.
  -a,--all              display unused files too
  -i,--interactive      ask before killing (ignored without -k)
  -k,--kill             kill processes accessing the named file
  -l,--list-signals     list available signal names
  -m,--mount            show all processes using the named filesystems or block device
  -M,--ismountpoint     fulfill request only if NAME is a mount point
  -n,--namespace SPACE  search in this name space (file, udp, or tcp)
  -s,--silent           silent operation
  -SIGNAL               send this signal instead of SIGKILL
  -u,--user             display user IDs
  -v,--verbose          verbose output
  -w,--writeonly        kill only processes with write access
  -V,--version          display version information
  -4,--ipv4             search IPv4 sockets only
  -6,--ipv6             search IPv6 sockets only
  -                     reset options

  udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]

Просмотр процессов при помощи каталога

Запущенная с опцией –v, утилита fuser будет работать в подробном режиме – это значит, что команда будет выводить детальный и объемный результат, благодаря чему можно наблюдать работу утилиты в реальном времени. Запустите fuser в текущем каталоге, включив опцию -v:

fuser -v .

Вы получите: 

                     USER     PID   ACCESS COMMAND
/home/8host:         8host    17604 ..c..  bash

В данном примере мы видим один запущенный процесс в каталоге –- это интерактивная оболочка bash, из которой и запускаются команды.

Запущенная в подробном режиме утилита fuser выводит информацию в столбцах: USER, PID, ACCESS и COMMAND. Символ “с” в столбце ACCESS показывает тип доступа и значит “current directory”. Есть несколько типов доступа: executable (исполняемый файл), root directory (root-каталог), open file (открытый файл) и отображаемые файлы или совместно используемая библиотека.

Определение процессов с помощью сетевых сокетов

Иногда процессы просматриваются при помощи сокетов TCP и UDP. К примеру, давайте для наблюдения за запущенным процессом с помощью nc создадим прослушивание TCP на порту 8002:

nc -l -p 8002

Эта команда заблокирует терминал, пока она запущен. В другом окне терминала при помощи fuser найдем работающий процесс на TCP-порте 8002 с опцией -n:

fuser -v -n tcp 8002

                    USER        PID   ACCESS COMMAND
8002/tcp:           8host       17985 F....  nc

Примечание. По умолчанию инструмент fuser просматривает сокеты IPv6 и IPv4, но это поведение можно изменить при помощи опций -4 (для IPv4) и -6 (для IPv6).

Этот вывод показывает, что идентификатор процесса (PID), использующего netcat, равен 17985, а команда, которая была использована для его запуска — ‘nc’. Идентификатор процесса (PID) можно использовать в разных операциях, в том числе для остановки или прерывания запущенного процесса.

Читайте также: Использование команд ps, kill и nice для управления процессами в Linux

Также при помощи fuser можно прерывать запущенные процессы на определенных портах, делается это с помощью флага -k:

fuser -k 8002/tcp

8002/tcp:            18056

Если вернуться в окно первого терминала, можно заметить, что программа nc была завершена и возвращена в оболочку.

Утилита fuser также может посылать процессам определенные сигналы. К примеру, запущенная с флагом –k, она отправляет процессу сигнал KILL. Существует множество сигналов, которые можно отправить определенному запущенному процессу. Просмотреть их можно с помощью команды fuser -l:

fuser -l

HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYS

Подводим итоги

В этой статье мы разобрали несколько примеров, как с помощью fuser мониторить неиспользуемые порты и каталоги в системе Linux. Команда fuser особенно полезна, когда нужно понять, какие неизвестные процессы могут быть запущены в системе.

Tags:

Добавить комментарий