Команда 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 особенно полезна, когда нужно понять, какие неизвестные процессы могут быть запущены в системе.