Thank you for reading this post, don't forget to subscribe!
Команда fuser – утилита Unix, которая определяет, какой процесс использует файл, каталог или сокет. Также она может предоставить информацию о типе доступа и пользователе, которому принадлежит процесс. Утилита fuser выводит id процесса (или PID) при помощи заданного файла или файловой системы.
Просмотр процессов при помощи каталога
Запущенная с опцией –v, утилита fuser будет работать в подробном режиме; это значит, что команда будет выводить подробный результат, благодаря чему пользователь сможет наблюдать действие утилиты в реальном времени.
root@exampleuser-X55CR:~# fuser -v .
USER PID ACCESS COMMAND
/root: root 3378 ..c.. vim
root 3398 ..c.. bash
root 3449 ..c.. bash
root 19370 ..c.. bash
root@exampleuser-X55CR:~#
Вышеприведенный вывод показывает, что запущенная в подробном режиме утилита fuser выводит информацию в столбцах: USER, PID, ACCESS и COMMAND. Символ «с» в столбце ACCESS показывает тип доступа и значит «current directory». Существует несколько типов доступа:
- e – executable (исполняемый файл),
- r – root directory’ (root-каталог),
- f – open file (открытый файл; f отсутствует в стандартном режиме),
- F – open file for writing (файл, открытый для записи; в стандартном режиме F отсутствует),
- m – mmap file or shared library (файл mmap или совместно используемая библиотека).
Какой процесс использует tcp- или udp-сокет?
Иногда процессы просматриваются при помощи сокетов TCP и UDP. Для этого существует опция -n, которая используется для выбора соответствующего пространства имен. К примеру, следующая команда создает прослушивание TCP на порт 80.
root@exampleuser-X55CR:~# nc -l -p 80
Since a tcp server is listening on port 80, the fuser utility can be used to find the process which is using the server’s socket. The -v option is used to put the fuser utility in verbose mode and the -n option is used to select the tcp protocol as a name space.
root@exampleuser-X55CR:~# fuser -v -n tcp 80
root@exampleuser-X55CR:~# fuser -v -n tcp 80
USER PID ACCESS COMMAND
80/tcp: root 3846 F.... nc
root@exampleuser-X55CR:~#
По умолчанию инструмент fuser просматривает сокеты IPv6 и IPv4, но это поведение можно изменить при помощи опций -4 (для IPv4) и -6 (для IPv6). Имейте в виду: fuser выводит в stdout только PID, всё остальное отправляется в stderr.
Результаты команды «fuser -v -n tcp 80» показывают, что id процесса, использующего netcat – 3846, и что этот процесс запущен при помощи команды nc. PID можно использовать несколькими способами, один из которых — уничтожение процесса. Команда kill прерывает процесс с заданным PID. Кроме того, утилита fuser может прерывать процессы через определённый файл; для этого используется опция –k (смотрите пример ниже), которая позволяет остановить процесс при помощи tcp на порте 123. Чтобы предотвратить случайное уничтожение процесса, используется опция –i, которая запрашивает подтверждение.
root@exampleuser-X55CR:~# fuser -k 123/tcp
123/tcp: 11543
Таким образом, команда fuser –k, запущенная с опцией –i, требует подтверждения для прерывания процесса. Чтобы подтвердить, введите y или yes; чтобы отменить прерывание процесса, введите N.
root@exampleuser-X55CR:~# fuser -i -k 123/tcp
123/tcp: 12216
Kill process 12216 ? (y/N)
Use The -6 Option To Look For IPv6 Sockets.
Следующая команда использует инструмент fuser в подробном режиме и ищет сокеты IPv6, запущенные на поре 123.
root@exampleuser-X55CR:~# fuser -v -n tcp -6 123
Since there is no IPv6 socket running on port 123, the command does not produce any output. The -6 option can be replaced with the -4 option in order to search for IPv4 sockets running on a specific port.
Поиск процессов, обращающихся к файловой системе
Утилита fuser может использовать флаг -m, чтобы найти процессы, обращающиеся к файловой системе. В качестве аргумента эта опция требует имя файла. Опция –m особенно полезна при необходимости обнаружить процессы, имеющие доступ к файловой системе, и определить, какой процесс прервать.
Следующая команда отображает все процессы, обращающиеся к файловой системе, в которой находится тестовый файл example.txt.
root@exampleuser-X55CR:~# fuser -v -m example.txt
USER PID ACCESS COMMAND
/root/example.txt: root kernel mount /
root 1 Frce. init
root 2 .rc.. kthreadd
root 3 .rc.. ksoftirqd/0
root 6 .rc.. migration/0
root 7 .rc.. watchdog/0
[...]
exampleuser 23347 .r.e. gcalctool
exampleuser 24527 f..e. chrome
exampleuser 25388 f..e. chrome
exampleuser 25628 .r.e. evince
exampleuser 25634 .rce. evinced
exampleuser 25706 .rce. gm-notify
exampleuser 25769 .rce. at-spi-bus-laun
exampleuser 28191 .rce. mate-settings-d
exampleuser 28193 .rce. mate-screensave
exampleuser 29942 f..e. chrome
exampleuser 30044 .r.e. evince
exampleuser 32721 f..e. chrome
Утилита fuser может также посылать процессам определенные сигналы. К примеру, запущенная с флагом –k, она отправляет процессу сигнал KILL.
Существует множество сигналов, которые можно отправить определенному запущенному процессу; опция -l выводит список сигналов, которые могут быть отправлены инструментом fuser.
root@exampleuser-X55CR:~# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
Этот вывод показывает все сигналы, доступные fuser.