Wie man den fuser-Befehl unter Linux verwendet und optimal nutzt.

Angenommen, Du erhältst die Aufgabe die Prozesse zu identifizieren die eine bestimmte Datei verwenden und diese zu beenden – all dies muss von der Befehlszeile aus erfolgen. Was würdest du tun?

Befehlszeilenprofis werden wahrscheinlich eine Vorstellung davon haben, dass es unter Linux ein Befehlszeilenprogramm 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 es Ihnen auch, diese Prozesse zu beenden, so dass Sie die Befehle kill oder killall nicht separat verwenden müssen. Das Befehlszeilenprogramm, von dem wir sprechen, ist fuser.

Wenn Du dieses Dienstprogramm noch nicht kennst und verstehen möchtest, dann findest Du in diesem Artikel einige leicht verständliche Beispiele.

Linux fuser Befehl

Der Befehl fuser – wie ich bereits oben erwähnt habe – wird in erster Linie verwendet, um Prozesse zu identifizieren, die Dateien, Verzeichnisse oder Sockets verwenden. Das Tool zeigt im Wesentlichen die PIDs von Prozessen an, die die Datei verwenden, deren Name als Argument an den Befehl übergeben wird.

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

Fixierbefehl

Wie aus dem Screenshot oben ersichtlich, haben wir versucht, mit fuser herauszufinden, welche Prozesse das Verzeichnis /home/himanshu verwenden, und der Befehl – in seiner Ausgabe – erzeugte eine Liste von Prozess-IDs. So weit so gut, aber es gibt hier ein paar Probleme.

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

Jede Art von Zugriff wird durch einen Buchstaben gekennzeichnet:

  • c – aktuelles Verzeichnis.
  • e – ausführbare Datei wird ausgeführt.
  • f – Datei öffnen. f entfällt im Standardanzeigemodus.
  • F – Datei zum Schreiben öffnen. Im Standardanzeigemodus entfällt F.
  • r – Stammverzeichnis.
  • m – mmap’ed Datei oder gemeinsame Bibliothek.

Nun, um auf das Beispiel zurückzukommen, das wir besprochen haben, zeigt der Buchstabe ‚c‘ in der Ausgabe an, dass alle Prozesse, deren PIDs in der Ausgabe aufgelistet sind, auf das Verzeichnis /home/himanshu als ihr aktuelles Verzeichnis zugreifen.

Beachten Sie, dass ein Prozess mehrere Arten von Zugriffen auf eine Datei oder ein Verzeichnis haben kann. Die folgende Ausgabe zeigt beispielsweise, dass viele Prozesse auf das Stammverzeichnis (/) zugreifen, und zwar sowohl auf das aktuelle als auch auf das Stammverzeichnis.

Ergebnis der Fixierung / Befehl

Bisher enthielt die Fixierausgabe, die wir sehen, nur Prozess-IDs und nicht mehr als das. Wäre es nicht besser, wenn auch die Prozessnamen angezeigt werden? Nun, dafür musst du die Kommandozeilenoption -v verwenden. Nachfolgend ein Beispiel:

Option Fixiereinrichtung -v

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

Fixierbefehl - siehe Option

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

Wie man Prozesse mit Hilfe von fuser killt

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

Hier ist also die ausführbare Datei, die gestartet wurde:

Kill-Prozess mit Fixiereinrichtung

Und hier ist der fuser-Befehl, der den Prozess, der von der ausführbaren test-fuser-Datei initiiert wurde, im Idealfall beenden sollte.

fuser -v -k test-fuser

Oh, bevor ich mit der Ausführung dieses Befehls beginne, möchte ich Ihnen sagen, dass die Befehlszeilenoption -k fuser anweist, den Prozess (oder die Prozesse) über die Datei oder das Verzeichnis zu beenden.

Hier ist, was passiert ist, wenn der oben genannte Befehl ausgeführt wurde:

Ergebnis des Tötens eines Prozesses mit Fixiergerät

Wie aus dem obigen Screenshot ersichtlich, hat die Verwendung der Befehlszeilenoption -k mit fuser den Test-Fixierprozess beendet. Um sicherzustellen, dass der Befehl fuser nach der Bestätigung durch den Benutzer fragt, bevor ein Prozess beendet wird, verwenden Sie die Option -i. Siehe Beispiel unten:

fuser fortgeschrittenes beispiel

Im Folgenden finden Sie ein paar wichtige Details zu Fixierern, die Sie bei der Verwendung der Option -k kennen sollten:

  • Mit -k sendet der Befehl fuser standardmäßig das SIGKILL-Signal. Sie können dieses Verhalten jedoch mit der Option -SIGNAL ändern.
  • Ein Fixierprozess tötet sich nie selbst, sondern kann andere Fixierprozesse töten.

fuser – andere Details

Neben den bisher genannten Informationen gibt es noch einige weitere Details, die es wert sind, beachtet zu werden. Auf alle diese Informationen kann über die Manpage des Befehls zugegriffen werden. Im Folgenden finden Sie beispielsweise die Informationen, die die Man Page fuser im Abschnitt’Restriktionen‘ aufführt:

       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.

Fazit

Wie Sie inzwischen verstanden haben, ist fuser ein äußerst nützliches Befehlszeilenprogramm unter Linux. Das Gute daran ist, dass das Tool weder schwer zu verstehen noch zu benutzen ist, so dass selbst Anfänger leicht damit anfangen können. Ein Aspekt, den wir hier nicht angesprochen haben, ist, dass der Befehl es Ihnen ermöglicht, Prozesse zu identifizieren und sogar zu beenden, die auf bestimmten Ports laufen, was ihn auch für Netzwerkadministratoren zu einem schwer zu ignorierenden Werkzeug macht.

Das könnte dich auch interessieren …