GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie man den Befehl fuser unter Linux verwendet und optimal nutzt

Angenommen, Sie erhalten die Aufgabe, die Prozesse zu identifizieren, die eine bestimmte Datei verwenden, und sie dann einen nach dem anderen zu beenden – all dies muss von der Befehlszeile aus erledigt werden. Was würdest du tun? Nun, wenn Sie ein Befehlszeilen-Neuling sind, sind Sie sicher ahnungslos und fragen um Hilfe.

Aber Befehlszeilenprofis werden wahrscheinlich ahnen, dass es in Linux ein Befehlszeilendienstprogramm gibt, mit dem Sie Prozesse anhand der Dateien (oder Verzeichnisse oder Sockets) identifizieren können, auf die sie zugreifen. Nicht nur das, das Tool ermöglicht Ihnen auch, diese Prozesse zu beenden, sodass Sie kill nicht verwenden müssen oder killall Befehle separat. Das Befehlszeilenprogramm, über das wir sprechen, ist fuser .

Wenn Sie dieses Dienstprogramm noch nicht kennen und verstehen möchten, wie es verwendet wird, suchen Sie nicht weiter, da wir in diesem Artikel über fuser sprechen ausführlich anhand einiger leicht verständlicher Beispiele.

Aber bevor wir fortfahren, denken Sie bitte daran, dass alle Beispiele, Befehle und Anweisungen, die in diesem Tutorial erwähnt werden, auf Ubuntu 16.04 LTS und dem fuser getestet wurden Die von uns verwendete Befehlsversion ist 22.21.

Linux-Fuser-Befehl

Der Fixierer Der Befehl wird - wie oben bereits erwähnt - hauptsächlich zum Identifizieren von Prozessen anhand von Dateien, Verzeichnissen oder Sockets verwendet. Das Tool zeigt grundsätzlich die PIDs von Prozessen an, die die Datei verwenden, deren Name als Argument an den Befehl übergeben wird.

Hier ist der Fixierer Befehl in Aktion in seiner einfachsten Form:

Wie aus dem obigen Screenshot hervorgeht, haben wir versucht, fuser zu verwenden um zu wissen, welche Prozesse /home/himanshu verwenden Verzeichnis, und der Befehl erzeugte in seiner Ausgabe eine Liste von Prozess-IDs. So weit so gut, aber hier gibt es ein paar Probleme.

Erstens, was ist das 'c', das an jede PID angehängt wird? Ein kurzer Blick auf die Manpage des Befehls zeigt, dass im Standardanzeigemodus fuser Der Befehl zeigt nicht nur die PIDs der Prozesse an, die auf die Datei oder das Verzeichnis zugreifen, sondern auch die Art des Zugriffs.

Jede Zugriffsart wird durch einen Buchstaben gekennzeichnet:

  • c - aktuelles Verzeichnis.
  • e - ausführbare Datei wird ausgeführt.
  • f - Datei öffnen. f wird im Standardanzeigemodus weggelassen.
  • F - Datei zum Schreiben öffnen. F wird im Standardanzeigemodus weggelassen.
  • r - Stammverzeichnis.
  • m - Mmap-Datei oder gemeinsam genutzte Bibliothek.

Um nun auf das besprochene Beispiel zurückzukommen, zeigt der Buchstabe „c“ in der Ausgabe an, dass alle Prozesse, deren PIDs in der Ausgabe aufgelistet sind, auf /home/himanshu zugreifen Verzeichnis als ihr aktuelles Verzeichnis.

Denken Sie daran, dass ein Prozess mehrere Arten von Zugriffen auf eine Datei oder ein Verzeichnis haben kann. Die folgende Ausgabe zeigt beispielsweise, dass auf das Stammverzeichnis (/) von vielen Prozessen sowohl auf ihr aktuelles als auch auf ihr Stammverzeichnis zugegriffen wird.

Bisher der Fixierer Die Ausgabe, die wir sehen, enthält nur Prozess-IDs und nicht mehr. Wäre es nicht besser, wenn auch die Prozessnamen angezeigt würden? Nun, dafür müssen Sie das -v verwenden Befehlszeilenoption. Nachfolgend ein Beispiel:

Um den Benutzernamen des Prozesseigentümers an jede PID anzuhängen, verwenden Sie das -u Befehlszeilenoption. Hier ist ein Beispiel dafür:

Hinweis:Wenn sich die betreffende Datei oder das betreffende Verzeichnis auf einem gemounteten Dateisystem oder einem Blockgerät befindet, verwenden Sie das -m Befehlszeilenoption. „Alle Prozesse, die auf Dateien in diesem Dateisystem zugreifen, werden aufgelistet“, heißt es in der Manpage. "Wenn eine Verzeichnisdatei angegeben ist, wird sie   automatisch in NAME/. geändert, um jedes Dateisystem zu verwenden, das möglicherweise in diesem Verzeichnis gemountet ist."

Wie man Prozesse mit der Fixiereinheit beendet

Nun, da wir über den Fixierer gesprochen haben Grundlagen, kommen wir zu der Aufgabe, die ich am Anfang erwähnt habe - wie man Prozesse mit fuser beendet ? Nehmen wir für diesen Fall ein einfacheres Beispiel. Was ich tun werde, ist, ich werde eine ausführbare Datei ausführen und während sie läuft, werde ich versuchen, den Prozess mit fuser zu beenden .

Also, hier ist die ausführbare Datei, die gestartet wurde:

Und hier ist der Fixierer Befehl, der idealerweise den vom test-fuser initiierten Prozess beenden sollte ausführbar.

fuser -v -k test-fuser

Oh, bevor ich fortfahre und diesen Befehl ausführe, möchte ich Ihnen sagen, dass das -k Befehlszeilenoption teilt fuser mit um den Prozess (oder die Prozesse) mithilfe der Datei oder des Verzeichnisses zu beenden.

Folgendes ist passiert, als der oben erwähnte Befehl ausgeführt wurde:

Wie aus dem obigen Screenshot hervorgeht, verwenden Sie -k Befehlszeilenoption mit fuser tötete den Testfixierer Prozess. Um sicherzustellen, dass der Fixierer Befehl den Benutzer um Bestätigung bittet, bevor ein Prozess beendet wird, verwenden Sie das -i Möglichkeit. Siehe Beispiel unten:

Im Folgenden finden Sie einige wichtige Fixierer-bezogene Details, die Sie kennen sollten, wenn Sie die Option -k verwenden:

  • Mit -k sendet der Fuser-Befehl standardmäßig das SIGKILL-Signal. Sie können dieses Verhalten jedoch ändern, indem Sie die Option -SIGNAL verwenden.
  • Ein Fixierprozess beendet sich nie selbst, kann aber andere Fixierprozesse beenden.

fuser - andere Details

Abgesehen von den bisher erwähnten Informationen gibt es noch einige andere Details, die es wert sind, beachtet zu werden. Auf all diese Informationen kann zugegriffen werden, indem Sie zur Manpage des Befehls gehen. Im Folgenden finden Sie beispielsweise die Informationen, die der fixierer Manpage-Listen im Abschnitt „Einschränkungen“:

       Processes accessing the same file or file system several times  in  the
       same way are only shown once.

       If the same object is specified several times on the command line, some
       of those entries may be ignored.

       fuser may only be able to gather partial information  unless  run  with
       privileges.   As  a consequence, files opened by processes belonging to
       other users may not be listed and  executables  may  be  classified  as
       mapped only.

       Installing  fuser SUID root will avoid problems associated with partial
       information, but may be undesirable for security and privacy reasons.

       udp and tcp name spaces, and UNIX domain sockets can't be searched with
       kernels older than 1.3.78.

       Accesses by the kernel are only shown with the -v option.

       The  -k  option  only  works  on processes.  If the user is the kernel,
       fuser will print an advice, but take no action beyond that.

Schlussfolgerung

Wie Sie inzwischen verstanden haben, fixierer ist ein äußerst nützliches Befehlszeilenprogramm unter Linux. Das Gute ist, dass das Tool weder schwer zu verstehen noch zu bedienen ist, sodass auch Neulinge leicht damit beginnen können. Ein Aspekt, den wir hier nicht berührt haben, ist, dass Sie mit dem Befehl Prozesse identifizieren und sogar beenden können, die auf bestimmten Ports laufen, was ihn auch für Netzwerkadministratoren zu einem schwer zu ignorierenden Werkzeug macht.


Linux
  1. So verwenden Sie den Linux-Grep-Befehl

  2. So verwenden Sie den Verlaufsbefehl unter Linux

  3. So erstellen Sie einen Alias ​​und verwenden den Alias-Befehl in Linux

  4. So verwenden Sie den id-Befehl unter Linux

  5. So installieren und verwenden Sie den Ping-Befehl unter Linux

Wie verwende ich den wget-Befehl unter Linux?

Wie verwende ich den xargs-Befehl unter Linux?

So installieren und verwenden Sie den Ack-Befehl unter Linux

So verwenden Sie den RPM-Befehl unter Linux

Linux perf:So verwenden Sie den Befehl und den Profiler

So verwenden Sie den which-Befehl in Linux