Как использовать команду fuser в Linux

Предположим, вам дали задание определить процессы, использующие определенный файл, и затем убить их один за другим – все это должно быть сделано из командной строки. Что бы вы сделали? Ну, если вы новичок в командной строке, я уверен, что вы не будете разбираться и попросите помощи.

Но профессионалы командной строки, вероятно, знают, что утилита командной строки в Linux позволяет идентифицировать процессы на основе файлов (каталогов или сокетов), к которым они обращаются. Мало того, эта утилита также позволяет вам убить эти процессы, так что вам не придется использовать команды kill или killall отдельно. Утилита командной строки, о которой мы говорим, это fuser.

Если вы еще не знакомы с этой утилитой и хотите понять, как ее использовать, не останавливайтесь на достигнутом, поскольку в этой статье мы подробно рассмотрим fuser на нескольких понятных примерах.

Но прежде чем двигаться дальше, пожалуйста, имейте в виду, что все примеры, команды и инструкции, упомянутые в этом руководстве, были протестированы на Ubuntu 22.04 LTS.

Команда Linux fuser

Как я уже упоминал выше, команда fuser в основном используется для идентификации процессов с помощью файлов, каталогов или сокетов. Она отображает PID процессов, использующих файл, имя которого передано в качестве аргумента команде.

Вот команда fuser в действии в самой простой форме:

Как использовать команду fuser в Linux

Как видно из скриншота выше, мы попытались использовать fuser, чтобы узнать, какие процессы используют каталог /home/himanshu, и команда – в своем выводе – выдала список идентификаторов процессов. Пока все хорошо, но здесь есть пара проблем.

Во-первых, что это за «c», добавляемое к каждому PID? Быстрый взгляд на man page команды показывает, что в режиме отображения по умолчанию команда fuser не только отображает PID процессов, обращающихся к файлу или каталогу, но и показывает тип доступа.

Каждый тип доступа обозначается буквой:

  • c – текущий каталог.
  • e – исполняемый файл.
  • f – открыть файл. f опущено в режиме отображения по умолчанию.
  • F – открыть файл для записи. F опущено в режиме отображения по умолчанию.
  • r – корневой каталог.
  • m – mmap’ed файл или разделяемая библиотека.

Теперь, возвращаясь к примеру, который мы обсуждали, буква „c“ в выводе означает, что все процессы, чьи PID перечислены в выводе, обращаются к каталогу /home/himanshu как к своему текущему каталогу.

Напомним, что процесс может иметь несколько типов доступа к файлу или каталогу. Например, следующий вывод показывает, что многие процессы обращаются к корневому каталогу (/) как к текущему и корневому каталогу.

Как использовать команду fuser в Linux

До сих пор вывод fuser, который мы видим, содержит только идентификаторы процессов, и не более того. Не будет ли лучше, если имена процессов также будут отображаться? Для этого нужно использовать опцию командной строки -v. Вот пример:

Как использовать команду fuser в Linux

Для того чтобы добавить имя пользователя владельца процесса к каждому PID, используйте опцию командной строки -u. Вот пример:

Как использовать команду fuser в Linux

Примечание: Если рассматриваемый файл или каталог расположен на смонтированной файловой системе или блочном устройстве, используйте опцию командной строки -m. «Перечисляются все процессы, обращающиеся к файлам на этой файловой системе», – говорится на странице руководства. «Если указан файл каталога, он автоматически изменяется на NAME/. для использования любой файловой системы, которая может быть смонтирована в этом каталоге.»

Как убить процессы с помощью fuser

Теперь, когда мы обсудили основы fuser, давайте перейдем к задаче, о которой я говорил в начале – как убить процессы с помощью fuser? Давайте рассмотрим более простой пример для этого случая. Я запущу исполняемый файл и, пока он работает, попробую убить процесс с помощью fuser.

Итак, вот запущенный исполняемый файл:

Как использовать команду fuser в Linux

А вот команда fuser, которая в идеале должна убить процесс, инициированный исполняемым файлом test-fuser.

fuser -v -k test-fuser

О, прежде чем я выполню эту команду, позвольте мне сказать вам, что опция командной строки -k указывает fuser убить процесс (или процессы), использующий файл или каталог.

Вот что произошло, когда вышеупомянутая команда была выполнена:

Как использовать команду fuser в Linux

Как видно из скриншота выше, использование опции командной строки -k с fuser убило процесс test-fuser. Чтобы убедиться, что команда fuser запрашивает подтверждение пользователя перед убийством процесса, используйте опцию -i. Смотрите пример ниже:

Как использовать команду fuser в Linux

Ниже приведена пара важных деталей, связанных с fuser, которые вы должны знать при использовании опции -k:

  • При использовании опции -k команда fuser по умолчанию посылает сигнал SIGKILL. Но вы можете изменить это поведение, используя опцию -SIGNAL.
  • Процесс fuser никогда не убивает сам себя, но может убивать другие процессы fuser.

fuser – другие детали

Кроме упомянутой выше информации, стоит помнить еще о нескольких деталях. Всю эту информацию можно получить, перейдя по ссылке man page команды.

Заключение

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

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.howtoforge.com

Похожие статьи

Комментарии (0)