- Использование команды fuser
- Как работает утилита fuser?
- Просмотр процессов при помощи каталога
- Какой процесс использует tcp- или udp-сокет?
- Поиск процессов, обращающихся к файловой системе
- Заключение
- Русские Блоги
- Подробная команда Linux fuser
- Общие параметры
- функция фьюзера
- Пример использования
- Применение фьюзера разных сигналов
- fuser -l
- How To Use the Linux Fuser Command
- What Is The fuser Command?
- How To Use The fuser Utility?
- How To View Processes Using A Directory
- What process is using your tcp or udp socket?
- Find The Process Accessing A File System
- Conclusion
Использование команды fuser
Команда fuser – очень умная утилита Unix, которая определяет, какой процесс использует файл, каталог или сокет. Также она может предоставить информацию о типе доступа и пользователе, которому принадлежит процесс. Утилита fuser выводит id процесса (или PID) при помощи заданного файла или файловой системы.
Как работает утилита fuser?
Чтобы вывести на экран страницу мануала для любой нужной команды, можно использовать команду man. Но знакомиться с командами Linux лучше на живых примерах. Запустите в терминале следующую команду, чтобы получить информацию об опциях fuser. В данном руководстве работа утилиты fuser продемонстрирована на Ubuntu 12.04, но эта команда действительна для любого современного дистрибутива Linux.
# 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 .
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.
# 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, которая запрашивает подтверждение.
# fuser -k 123/tcp
123/tcp: 11543
Таким образом, команда fuser –k, запущенная с опцией –i, требует подтверждения для прерывания процесса. Чтобы подтвердить, введите y или yes; чтобы отменить прерывание процесса, введите N.
# 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.
# 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.
# 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.
# 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.
Заключение
Конечно, эта статья не может охватить всех возможностей и привести все примеры использования утилиты fuser. Однако этих базовых знаний и навыков работы с fuser достаточно для начала.
Источник
Русские Блоги
Подробная команда Linux fuser
Краткое описание команды fuser
В среде Linux, когда вы используете команду umount для размонтирования точки монтирования, вы увидите приглашение «устройство занято». В это время фьюзер может выяснить, кто использует этот ресурс, конечно, umount -lf [точка монтирования] также может принудительно размонтировать
fuser может показать, какая программа в данный момент использует диск
Файл
точка монтирования
даже сетевой порт
И дать подробную информацию о процессе программы.
Фьюзер выводит только PID на стандартный выход, а все остальное — на стандартный вывод ошибок.
Общие параметры
-a Отображает все файлы, указанные в командной строке. Отображаются файлы, к которым осуществляется доступ по умолчанию.
-c совпадает с -m для совместимости с POSIX.
-k Убить процессы, которые обращаются к файлам. Если -signal не указан, отправляется сигнал SIGKILL. В сочетании с —signal
-signal Использовать указанный сигнал вместо прерывания процесса с помощью SIGKILL. Сигналы могут быть представлены именем или номером (например, -HUP, -1). Эту опцию следует использовать с -k, иначе она будет проигнорирована.
-l Список всех известных имен сигналов.
-i Запросить пользователя перед тем, как завершить процесс. Этот параметр будет игнорироваться, если отсутствует ключ -k.
-m name указывает подключенную файловую систему или подключенное блочное устройство (имя). Таким образом, будут перечислены все процессы, обращающиеся к этому файлу или файловой системе. Если указан каталог, он будет автоматически преобразован в «имя /», и будут использованы все файловые системы, смонтированные в этом каталоге.
-n space указывает другое пространство имен (пробел). Здесь поддерживаются разные файлы пробелов (имена файлов, здесь по умолчанию), tcp (локальный порт tcp), udp (локальный порт udp) ). Для порта вы можете указать номер порта или имя. Если нет двусмысленности, вы можете использовать простое представление, например: имя / пространство (то есть представление, например: 80 / tcp).
-s Silent mode, -u, -v в этот момент будут игнорироваться. -a нельзя использовать с -s.
-u Добавить имя пользователя владельца процесса после каждого PID.
-v Подробный режим. Вывод аналогичен выводу команды ps, включая PID, USER, COMMAND и многие другие поля. Если к нему обращается ядро, PID — это ядро.
Предположим, что устройство, которое нельзя удалить, это / dev / sdb1
1) Запустите следующую команду, чтобы увидеть, какой пользователь и какой процесс занимают это устройство
fuser -m -v /dev/sdb1
2) Запустите следующую команду, чтобы убить процесс, занимающий это устройство
fuser -m -v -k /dev/sdb1
или fuser -m -v -k -i / dev / sdb1 (каждый процесс убийства позволит вам подтвердить)
3) размонтировать
Посмотрите на эти программы, использующие TCP-порт 80:
$fuser -n tcp 80
или $ fuser -v -n tcp 80
или $ fuser -v 80 / tcp
Здесь информация, отображаемая в последних двух методах, является относительно полной из-за опции -v
В приведенном выше примере разрешение четвертого столбца также является типом доступа, как показано ниже:
Другие те же команды:
Используйте команду man 7signal подробно
функция фьюзера
fuser может показать, какая программа в данный момент использует файл, точку монтирования или даже сетевой порт на диске, и предоставить подробную информацию о процессе выполнения программы.
fuser отображает идентификатор процесса, используя указанный файл или файловую систему.По умолчанию каждое имя файла сопровождается буквой, указывающей тип доступа.
Типы доступа следующие:
Пример использования
Показать информацию о процессе, используя файл
Эта команда полезна, когда umount, вы можете узнать, какие другие устройства используются.
Убить программу, открывающую файл readme
Здесь вас спросят, уверены ли вы перед убийством. Лучше всего добавить -v, чтобы вы знали, какой процесс будет убит.
Посмотрите, какие программы используют TCP-порт 80
Применение фьюзера разных сигналов
Используйте параметр -l для получения списка сигналов, известных fuser
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 может отправить свой известный сигнал указанному файловому процессу для доступа вместо SIGKILL, отправляемого по умолчанию с параметром -k, например: просто приостановить процесс, а затем отправить сигнал HUP.
Источник
How To Use the Linux Fuser Command
By Oltjano Terpollari
Published on December 3, 2013
What Is The fuser Command?
The fuser command is a very smart unix utility used to find which process is using a file, a directory or a socket. It also gives information about the user owning the process and the type of access. The fuser tool displays the process id(PID) of every process using the specified files or file systems.
How To Use The fuser Utility?
The man command can be used to see manual pages for any command, but the best way to learn something new, especially linux commands, is by going through real world examples and never stop typing commands in the terminal. Run the following command in your terminal to get information about the usage options of the fuser utility. We will be experimenting with the fuser utility on a Ubuntu 12.04 VPS. However, as long as you are running a linux distribution it should be okay.
How To View Processes Using A Directory
The fuser utility can be used with -v option, which runs the tool in verbose mode. The verbose option is used to produce verbose output on the computer screen so the user can see real-time status of what the utility is doing.
The above output shows that, when ran in verbose mode, the fuse utility gives information about the USER, PID, ACCESS and COMMAND. The ‘c’ character under ACCESS shows the type of access, it means ‘current directory’. There are many access types such as e(executable being run), r(root directory), f(open file. f is omitted in default display mode), F(open file for writing, F is omitted in default display mode) and m (mmap’ed file or shared library).
What process is using your tcp or udp socket?
There are times when you need to look up processes using TCP and UDP sockets. In order to look up these processes, the usage of -n option is needed. The -n option is used to select the corresponding name space.The following command creates a tcp listener on port 80.
By default, the fuser tool will look in both IPv6 and IPv4 sockets, but the default option can be changed with the -4 and -6 options. The -4 option stands for IPv4, the -6 one stands for IPv6. Note that fuser outputs only the PIDs to stdout, everything else is sent to stderr.
The results of the ‘fuser -v -n tcp 80’ command show that process id of the process using netcat is 3846 and the command which was used to launch it is ‘nc’. The process id (PID) can be used in many ways, one of them is process killing. When used with a PID, the kill command kills a process based on that process id. The fuser utility can also be used to kill processes accessing a specific file. In the following command, the -k option is used to kill the process which is using the tcp listener running on port 123. To make sure that the user does not kill a wrong process, the -i option is used which asks the user for confirmation before killing a process.
Use the ‘fuser -k’ command with the -i option to ask the user for confirmation before killing a process. The user can answer with y for yes or N for not confirming the killing.
The following command uses fuser tool in verbose mode and tries to find IPv6 sockets running on port 123.
Find The Process Accessing A File System
The -m option can be used with the fuser command to find processes accessing files on the filesystem of a file. This option requires a filename as input argument. The -m option is very useful, especially when used to discover processes accessing a file system with the intetion of identifying which process to kill.
The following command displays all processes accessing filesystem on which ‘example.txt’ resides. See carefully how the -m option is used with the fuser utility.
The fuser utility can also be used to send specific signals to a process. When used with the -k option, the fuser command sends the KILL signal to a process. There are many signals which can be sent to a specific running process; the -l option helps to find the list of signals that can be used with the fuser tool.
The above output shows all the possible signals that can be used with the fuser tool.
Conclusion
Of course this article is not enough to cover all options and practical examples of the fuser tool, but every example served in this article will help you in your way to being a Linux ninja.
Источник