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:
- Prozesse identifizieren, die eine Datei verwenden: Sie können
fuserverwenden, 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. - Prozesse identifizieren, die einen Netzwerksocket verwenden:
fuserkann auch verwendet werden, um die Prozesse zu identifizieren, die einen Netzwerksocket verwenden, was bei der Fehlerbehebung von netzwerkbezogenen Problemen nützlich sein kann. - 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|socketOptionen
Einige häufig verwendete Optionen mit fuser sind:
-voder--verbose: Liefert detaillierte Ausgaben, einschließlich Benutzer, Prozess-ID, Zugriffstyp und Befehl.-aoder--all: Zeigt alle in der Befehlszeile angegebenen Dateien an.-koder--kill: Beendet die Prozesse, die auf die angegebene Datei oder Socket zugreifen.-ioder--interactive: Fragt nach Bestätigung, bevor ein Prozess beendet wird.-loder--list-signals: Listet alle verfügbaren Signalnamen auf.-moder--mount: Zeigt alle Prozesse an, die auf ein Dateisystem oder ein Blockgerät zugreifen.-noder--namespace: Sucht in einem bestimmten Namensraum (Datei, UDP oder TCP).-uoder--user: Den Benutzernamen des Prozessinhabers an jede PID anhängen.-c: Zeigt den Befehlsnamen für jeden Prozess an.-4oder--ipv4: Nur nach IPv4-Sockets suchen.-6oder--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/fileZum 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-esrDies 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 ContentDies 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/mountpointZum 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/efiHier ist die Aufschlüsselung des obigen Outputs:
USER: Diese Spalte zeigt den Benutzernamen des Prozesses, der auf das Dateisystem zugreift. In diesem Fall ist esroot.PID: Diese Spalte zeigt die Prozess-ID (PID) des Prozesses an. Anstelle einer numerischen PID wird jedochkernelangezeigt, 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 siemountan, was bedeutet, dass der Kernel das Dateisystem, das/boot/efienthält, eingebunden hat.COMMAND: Diese Spalte zeigt den Befehl oder Prozessenamen an. Sie zeigt/boot/efi, was der Pfad ist, der imfuser-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) socketZum Beispiel wird der folgende Befehl alle Prozesse beenden, die den Port 8006 verwenden:
fuser -k 8006/tcpDenken 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 8006Hier,
- Die Option
-voder--verbosezeigt detailliertere Informationen über die Prozesse an. - Die Option
-noder--namespacegibt den Namespace an, in dem nach Ressourcen gesucht werden soll. In diesem Fall wirdtcpverwendet, 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 workerLassen 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 eswww-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 BuchstabenF....zeigen an, dass der Prozess den TCP-Port zum Schreiben geöffnet hat (Fsteht 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:
- Der Prozess mit der PID 1691 heißt
pveproxy. - 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 -lWenn 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 SYSJedes 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/fileZum 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_directory8. Hilfe bekommen
Um das Hilfshandbuch des Befehls fuser anzusehen, führen Sie aus:
man fuserEin 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/dataDies 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/dataDies 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/dataBeachten 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.