Website-Suche

Fuser-Befehl in Linux: Ein Anfängerleitfaden mit Beispielen


Der fuser-Befehl in Linux ist ein Befehlszeilenprogramm, das verwendet wird, um die Prozesse zu identifizieren, die derzeit eine Datei, ein Verzeichnis, eine Socket oder Dateisysteme verwenden. Der Begriff "fuser" ist eine Abkürzung für "file user".

Es liefert detaillierte Informationen über die Prozesse, einschließlich des Benutzers, der den Prozess besitzt, der Prozess-ID, der Art des Zugriffs und des verwendeten Befehls.

Der fuser-Befehl wird verwendet, um zu bestimmen, welche Prozesse auf eine bestimmte Ressource zugreifen, was in verschiedenen Szenarien hilfreich sein kann, wie zum Beispiel:

  1. Prozesse identifizieren, die eine Datei verwenden: Sie können fuser verwenden, um herauszufinden, welche Prozesse derzeit eine bestimmte Datei oder ein Verzeichnis verwenden. Dies kann hilfreich sein, wenn Sie ein Dateisystem aushängen oder eine Datei löschen müssen, die gerade verwendet wird.
  2. Prozesse identifizieren, die einen Netzwerksocket verwenden: fuser kann auch verwendet werden, um die Prozesse zu identifizieren, die einen Netzwerksocket verwenden, was bei der Fehlerbehebung von netzwerkbezogenen Problemen nützlich sein kann.
  3. Beenden von Prozessen, die eine Datei oder Socket verwenden: Sobald Sie die Prozesse identifiziert haben, die eine Datei oder ein Socket verwenden, können Sie die -k-Option verwenden, um diese Prozesse zu beenden.

Es ist besonders nützlich zur Behebung von Problemen im Zusammenhang mit Dateisperren, Prozessmanagement und Systemressourcen.

fuser Befehlssyntax

Die grundlegende Syntax des fuser-Befehls lautet:

fuser [options] file|directory|socket

Optionen

Einige häufig verwendete Optionen mit fuser sind:

  • -v oder --verbose: Liefert detaillierte Ausgaben, einschließlich Benutzer, Prozess-ID, Zugriffstyp und Befehl.
  • -a oder --all: Zeigt alle in der Befehlszeile angegebenen Dateien an.
  • -k oder --kill: Beendet die Prozesse, die auf die angegebene Datei oder Socket zugreifen.
  • -i oder --interactive: Fragt nach Bestätigung, bevor ein Prozess beendet wird.
  • -l oder --list-signals: Listet alle verfügbaren Signalnamen auf.
  • -m oder --mount: Zeigt alle Prozesse an, die auf ein Dateisystem oder ein Blockgerät zugreifen.
  • -n oder --namespace: Sucht in einem bestimmten Namensraum (Datei, UDP oder TCP).
  • -u oder --user: Den Benutzernamen des Prozessinhabers an jede PID anhängen.
  • -c: Zeigt den Befehlsnamen für jeden Prozess an.
  • -4 oder --ipv4: Nur nach IPv4-Sockets suchen.
  • -6 oder --ipv6: Nur nach IPv6-Sockets suchen.

Linux fuser Befehl Beispiele

1. Prozesse auflisten, die auf eine Datei zugreifen

Um Prozesse zu finden, die auf eine bestimmte Datei zugreifen, verwenden Sie:

fuser -v /path/to/file

Zum Beispiel, um die Prozesse zu finden, die die Datei /usr/bin/firefox-esr verwenden, können Sie den folgenden Befehl verwenden:

fuser --verbose /usr/bin/firefox-esr

Dies zeigt die Prozess-IDs (PIDs) der Prozesse an, die derzeit die Datei /usr/bin/firefox-esr verwenden.

Beispielausgabe:

                     USER        PID ACCESS COMMAND
/usr/lib/firefox-esr/firefox-esr:
                     ostechnix   6900 ...e. firefox-esr
                     ostechnix   6966 ...e. Socket Process
                     ostechnix   6984 ...e. Privileged Cont
                     ostechnix   7042 ...e. WebExtensions
                     ostechnix   7101 ...e. Isolated Web Co
                     ostechnix   7735 ...e. Isolated Web Co
                     ostechnix   8250 ...e. Isolated Web Co
                     ostechnix   8300 ...e. Isolated Web Co
                     ostechnix   8961 ...e. Isolated Web Co
                     ostechnix  41601 ...e. Isolated Web Co
                     ostechnix  41791 ...e. Isolated Web Co
                     ostechnix  45880 ...e. Isolated Web Co
                     ostechnix  46217 ...e. Isolated Web Co
                     ostechnix  46287 ...e. Isolated Web Co
                     ostechnix  46437 ...e. Isolated Web Co
                     ostechnix  47038 ...e. Isolated Web Co
                     ostechnix  47042 ...e. Isolated Web Co
                     ostechnix  47095 ...e. Isolated Web Co
                     ostechnix  47160 ...e. Isolated Web Co
                     ostechnix  47231 ...e. Isolated Web Co
                     ostechnix  47234 ...e. Isolated Web Co
                     ostechnix  47577 ...e. Isolated Web Co
                     ostechnix  47762 ...e. Isolated Web Co
                     ostechnix  47969 ...e. Isolated Web Co
                     ostechnix  48537 ...e. RDD Process
                     ostechnix  48539 ...e. Utility Process
                     ostechnix  49786 ...e. Web Content
                     ostechnix  52459 ...e. Web Content
                     ostechnix  52521 ...e. Web Content

Dies bedeutet jede Spalte in der Ausgabe:

  • USER: Diese Spalte zeigt den Benutzernamen des Benutzers, der den Prozess ausführt.
  • PID: Diese Spalte zeigt die Prozess-ID (PID) des Prozesses an.
  • ACCESS: Diese Spalte gibt die Art des Zugriffs an, den der Prozess auf die Datei hat. Die Buchstaben in dieser Spalte stehen für Folgendes:

    • c: Der Prozess verwendet die Datei oder das Verzeichnis als sein aktuelles Arbeitsverzeichnis.
    • e: Der Prozess hat die Datei ausgeführt (normalerweise eine ausführbare Binärdatei).
    • f: Der Prozess hat die Datei zum Lesen geöffnet (dies wird im Standardanzeigemodus ausgelassen).
    • F: Der Prozess hat die Datei zum Schreiben geöffnet (dies wird im Standardanzeigemodus ausgelassen).
    • r: Der Prozess verwendet das Verzeichnis als sein Stammverzeichnis.
    • m: Der Prozess hat die Datei oder die gemeinsam genutzte Bibliothek mit mmap in den Speicher abgebildet.
    • .: Dies ist ein Platzhalter und wird im Standardanzeigemodus weggelassen.
  • COMMAND: Diese Spalte zeigt den Namen des Befehls oder Prozesses an, der auf die Datei zugreift.

      Im obigen Ausgabe können Sie sehen, dass mehrere Prozesse mit der Datei /usr/bin/firefox-esr verbunden sind.

      Diese Prozesse sind Teil des Firefox ESR-Browsers und übernehmen verschiedene Aufgaben, wie den Hauptbrowserprozess, den Socket-Prozess, Inhaltsprozesse und verschiedene andere Hilfsprozesse.

      Zum Beispiel ist der Prozess mit der PID 6900 der Haupt-Firefox-ESR-Browserprozess, und er hat die Datei zur Ausführung geöffnet (...e.). Die Prozesse mit den PIDs 49786, 52459 und 52521 sind wahrscheinlich Web-Content-Prozesse, die verwendet werden, um Webseiten in separaten Prozessen für bessere Sicherheit und Stabilität darzustellen.

      2. Prozesse finden, die auf ein Verzeichnis zugreifen

      Um die Prozesse zu finden, die auf das aktuelle Verzeichnis zugreifen, können Sie den folgenden Befehl verwenden:

      fuser -v .

      Dies zeigt die Prozess-IDs, Benutzer, Zugriffstypen und Befehle für alle Prozesse an, die auf das aktuelle Verzeichnis zugreifen. Zum Beispiel:

                           USER        PID ACCESS COMMAND
      /home/ostechnix:     ostechnix   1729 ..c.. pipewire
                           ostechnix   1733 ..c.. dbus-daemon
                           ostechnix   1734 ..c.. pipewire-media-
                           ostechnix   1740 ..c.. cinnamon-sessio
                           ostechnix   1785 ..c.. gvfsd
                           ostechnix   1797 ..c.. at-spi-bus-laun
                           ostechnix   1803 ..c.. dbus-daemon
                           ostechnix   1807 ..c.. at-spi2-registr
                           ostechnix   1818 ..c.. csd-background
                           ostechnix   1819 ..c.. csd-xrandr
      [...]

      In diesem Fall greifen die Prozesse mit den IDs 1729, 1733, 1734 unter vielen anderen auf das Verzeichnis /home/ostechnix mit verschiedenen Befehlen zu.

      3. Prozesse finden, die auf ein Dateisystem zugreifen

      Um Prozesse zu finden, die auf ein Dateisystem zugreifen, verwenden Sie:

      fuser -v -m /path/to/mountpoint

      Zum Beispiel, um zu überprüfen, welche Prozesse auf das Dateisystem zugreifen, das unter /boot/efi/ eingehängt ist, würden Sie ausführen:

      fuser -v -m /boot/efi/

      Beispielausgabe:

                           USER        PID ACCESS COMMAND
      /boot/efi:           root     kernel mount /boot/efi

      Hier ist die Aufschlüsselung des obigen Outputs:

      • USER: Diese Spalte zeigt den Benutzernamen des Prozesses, der auf das Dateisystem zugreift. In diesem Fall ist es root.
      • PID: Diese Spalte zeigt die Prozess-ID (PID) des Prozesses an. Anstelle einer numerischen PID wird jedoch kernel angezeigt, da der Kernel selbst das Dateisystem-Mount verwaltet.
      • ACCESS: Diese Spalte gibt die Art des Zugriffs an, den der Prozess auf die Ressource hat. In diesem Fall zeigt sie mount an, was bedeutet, dass der Kernel das Dateisystem, das /boot/efi enthält, eingebunden hat.
      • COMMAND: Diese Spalte zeigt den Befehl oder Prozessenamen an. Sie zeigt /boot/efi, was der Pfad ist, der im fuser-Befehl angegeben wurde.

      4. Prozesse beenden, die eine Datei oder Socket verwenden

      Um Prozesse zu beenden, die auf eine Datei oder einen Socket zugreifen, verwenden Sie:

      sudo fuser -k /path/to/file (or) socket

      Zum Beispiel wird der folgende Befehl alle Prozesse beenden, die den Port 8006 verwenden:

      fuser -k 8006/tcp

      Denken Sie daran, beim Verwenden der -k-Option vorsichtig zu sein, da sie Prozesse abrupt beenden kann. Überprüfen Sie immer die Auswirkungen, bevor Sie Prozesse beenden.

      Es gibt auch andere Möglichkeiten, einen Prozess zu beenden, der auf einem Port läuft. Siehe unseren detaillierten Leitfaden für weitere Einzelheiten.

      • Wie man einen Prozess tötet, der auf einem bestimmten Port unter Linux läuft

      5. Prozesse anzeigen, die einen Port verwenden

      Um Prozesse zu finden, die einen bestimmten TCP-Port verwenden (z. B. Port 8006), verwenden Sie:

      sudo fuser -v -n tcp 8006

      Hier,

      • Die Option -v oder --verbose zeigt detailliertere Informationen über die Prozesse an.
      • Die Option -n oder --namespace gibt den Namespace an, in dem nach Ressourcen gesucht werden soll. In diesem Fall wird tcp verwendet, um nach Prozessen zu suchen, die TCP-Sockets oder -Ports verwenden.
      • 8006: Dies ist die spezifische TCP-Portnummer, nach der der Befehl überprüft, welche Prozesse sie verwenden.

      Dieser Befehl zeigt die mit dem 8006-Port verbundenen Prozesse an.

                           USER        PID ACCESS COMMAND
      8006/tcp:            www-data   1691 F.... pveproxy
                           www-data   1692 F.... pveproxy worker
                           www-data   1693 F.... pveproxy worker
                           www-data   1694 F.... pveproxy worker

      Lassen Sie uns die obige Ausgabe aufschlüsseln und sehen, was jede Option bewirkt.

      • USER: Diese Spalte zeigt den Benutzernamen des Benutzers, der den Prozess ausführt. In diesem Fall ist es www-data, ein häufiger Benutzer für Webserver-Prozesse.
      • PID: Diese Spalte zeigt die Prozess-ID (PID) des Prozesses an, der den TCP-Port verwendet.
      • ACCESS: Diese Spalte zeigt die Art des Zugriffs, den der Prozess auf die Ressource hat (in diesem Fall den TCP-Port). Die Buchstaben F.... zeigen an, dass der Prozess den TCP-Port zum Schreiben geöffnet hat (F steht für "Datei" oder Socket).
      • COMMAND: Diese Spalte zeigt den Namen des Prozesses oder Befehls, der den TCP-Port verwendet.

      Basierend auf der Ausgabe verwenden vier Prozesse den TCP-Port 8006:

      1. Der Prozess mit der PID 1691 heißt pveproxy.
      2. Die Prozesse mit den PIDs 1692, 1693 und 1694 heißen pveproxy worker.

      Für diejenigen, die sich fragen, diese Prozesse stehen in Verbindung mit Proxmox VE (Virtual Environment), einer Open-Source-Plattform zur Verwaltung von Servervirtualisierung.

      Der pveproxy-Prozess ist der Haupt-Proxy-Prozess, und die pveproxy worker-Prozesse sind Arbeitsprozesse, die eingehende Verbindungen auf dem angegebenen TCP-Port (8006) bearbeiten.

      6. Signale auflisten

      Wir können fuser verwenden, um einem Prozess bestimmte Signale zu senden. Um alle Signale aufzulisten, führen Sie aus:

      fuser -l

      Wenn Sie fuser -l ausführen, sehen Sie eine vollständige Liste der Signale, die Ihr System unterstützt. Dies kann hilfreich sein, wenn Sie die verschiedenen Arten von Signalen verstehen müssen, die zur Verwaltung von Prozessen verfügbar sind.

      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

      Jedes dieser Signale hat eine spezifische Bedeutung und einen spezifischen Anwendungsfall. Hier sind einige gängige Signale:

      • HUP (1): Aufhängung am kontrollierenden Terminal oder Beendigung des kontrollierenden Prozesses erkannt.
      • INT (2): Unterbrechung von der Tastatur (wie Strg+C).
      • BEENDEN (3): Vom Keyboard beenden.
      • ILL (4): Ungültige Anweisung.
      • ABRT (6): Abbruchs-Signal von abort(3).
      • KILL (9): Kill-Signal (kann nicht abgefangen oder ignoriert werden).
      • SEGV (11): Ungültiger Speicherzugriff.
      • TERM (15): Beendigungszeichen.
      • STOP (17, 19, 23): Den Prozess stoppen (kann nicht abgefangen oder ignoriert werden).
      • CONT (18, 25): Fortfahren, wenn gestoppt.
      • USR1 (10, 30, 16): Vom Benutzer definierbares Signal 1.
      • USR2 (12, 31, 17): Vom Benutzer definierbares Signal 2.

      Diese Signale können zusammen mit anderen Befehlen (wie kill) verwendet werden, um Prozesse zu steuern. Zum Beispiel könnten Sie kill -9 PID verwenden, um einem Prozess mit einer bestimmten Prozess-ID (PID) ein KILL-Signal zu senden.

      7. Ein Signal an Prozesse senden

      Um ein bestimmtes Signal an einen Prozess zu senden, verwenden Sie:

      sudo fuser -k -SIGNAL /path/to/file

      Zum Beispiel würde man, um das SIGHUP-Signal an Prozesse zu senden, die auf eine Datei oder ein Verzeichnis zugreifen, Folgendes ausführen:

      sudo fuser -k -HUP /path/to/file_or_directory

      8. Hilfe bekommen

      Um das Hilfshandbuch des Befehls fuser anzusehen, führen Sie aus:

      man fuser

      Ein praktisches Beispiel zur Veranschaulichung der Verwendung des fuser-Befehls in Linux

      Angenommen, Sie möchten ein Dateisystem aushängen, aber Sie erhalten eine Fehlermeldung, dass das Dateisystem beschäftigt ist. Sie können den Befehl fuser verwenden, um herauszufinden, welche Prozesse das Dateisystem verwenden, und dann ein Signal an diese Prozesse senden, um das Dateisystem freizugeben.

      Zuerst verwenden Sie den Befehl fuser mit der Option -m, um herauszufinden, welche Prozesse den Einhängepunkt verwenden. Zum Beispiel, um herauszufinden, welche Prozesse das Dateisystem /mnt/data verwenden, können Sie den folgenden Befehl ausführen:

      sudo fuser -v -m /mnt/data

      Dies zeigt eine Liste von Prozess-IDs (PIDs) an, die das Dateisystem verwenden.

      Als Nächstes können Sie den Befehl kill verwenden, um diesen Prozessen ein Signal zu senden, damit sie das Dateisystem freigeben. Um beispielsweise das Signal SIGTERM an diese Prozesse zu senden, können Sie den folgenden Befehl ausführen:

      fuser -km /mnt/data

      Dies sendet das SIGTERM-Signal an alle Prozesse, die das Dateisystem verwenden, und gibt ihnen die Möglichkeit, aufzuräumen und sich ordnungsgemäß zu beenden.

      Wenn die Prozesse nach einigen Sekunden nicht beendet werden, können Sie stattdessen das Signal SIGKILL verwenden, um die Prozesse gewaltsam zu beenden:

      fuser -ki /mnt/data

      Beachten Sie, dass die -k-Option verwendet wird, um das Signal an die Prozesse zu senden, und die -i-Option verwendet wird, um vor dem Senden des Signals um Bestätigung zu bitten. Sie können die -i-Option weglassen, wenn Sie das Signal sofort senden möchten.

      Fazit

      Der fuser-Befehl ist eines der nützlichen Werkzeuge zur Verwaltung von Prozessen in Linux. Er liefert detaillierte Informationen über die Prozesse, die auf Dateien, Verzeichnisse oder Sockets zugreifen, und ermöglicht es Ihnen, diese Prozesse bei Bedarf zu beenden oder Signale an sie zu senden.

      Insbesondere ist der fuser-Befehl ein wertvolles Werkzeug für Systemadministratoren und Benutzer, die verstehen müssen, welche Prozesse auf bestimmte Ressourcen ihres Linux-Systems zugreifen.