fuser - описание/использование

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.