Haben Sie jemals versucht, ein USB-Laufwerk auszuhängen, und die Fehlermeldung „Gerät oder Ressource belegt“ erhalten? Dieses häufige Problem tritt auf, wenn ein Prozess noch eine Datei oder ein Verzeichnis auf dem Gerät verwendet. Um dies zu beheben, müssen Sie herausfinden, welcher Prozess die Ressource blockiert. Zwei leistungsstarke Dienstprogramme für diese Aufgabe sind lsof und fuser.
Verwendung von lsof zum Auflisten geöffneter Dateien
In Linux wird fast alles als Datei behandelt, einschließlich Festplatten, Pipes, Netzwerk-Sockets und Geräten. Der Befehl lsof (Kurzform für „list open files“) zeigt Ihnen eine detaillierte Liste aller geöffneten Dateien und der Prozesse, die sie verwenden.
Um zu sehen, welche Prozesse das aktuelle Verzeichnis (.) verwenden, können Sie Folgendes ausführen:
pete@icebox:~$ lsof .
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
lxsession 1491 pete cwd DIR 8,6 4096 131 .
update-no 1796 pete cwd DIR 8,6 4096 131 .
nm-applet 1804 pete cwd DIR 8,6 4096 131 .
xterm 2205 pete cwd DIR 8,6 4096 131 .
bash 2207 pete cwd DIR 8,6 4096 131 .
lsof 5914 pete cwd DIR 8,6 4096 131 .
Die Ausgabe zeigt den Befehl (COMMAND), die Prozess-ID (PID) und den Benutzer (USER), die mit jeder geöffneten Datei verknüpft sind. Mit diesen Informationen können Sie die Prozesse identifizieren, die Sie daran hindern, ein Gerät auszuhängen.
Der fuser-Befehl
Ein weiteres ausgezeichnetes Werkzeug ist der Befehl fuser (Kurzform für „file user“). Dieses Dienstprogramm identifiziert, welche Prozesse bestimmte Dateien, Sockets oder Dateisysteme verwenden. Der Befehl linux fuser ist eine schnelle Möglichkeit, die PIDs der Prozesse anzuzeigen, die auf eine bestimmte Ressource zugreifen.
Die Verwendung der Option -v (verbose/ausführlich) liefert eine detailliertere Ausgabe:
pete@icebox:~$ fuser -v .
USER PID ACCESS COMMAND
/home/pete: pete 1491 ..c.. lxsession
pete 1796 ..c.. update-notifier
pete 1804 ..c.. nm-applet
pete 2205 ..c.. xterm
pete 2207 ..c.. bash
Hier können wir deutlich sehen, welche Prozesse unser aktuelles Verzeichnis verwenden. Die Spalte ACCESS zeigt an, wie die Datei verwendet wird (z. B. c für aktuelles Verzeichnis).
Prozesse mit fuser beenden
Ein Hauptmerkmal des Befehls fuser ist seine Fähigkeit, Prozesse zu beenden, die eine Ressource verwenden. Die Option fuser -k sendet ein SIGKILL-Signal an jeden Prozess, der auf die angegebene Datei oder das Dateisystem zugreift. Dies ist besonders nützlich, um ein belegtes Gerät auszuhängen.
Um beispielsweise alle Prozesse zu beenden, die den Einhängepunkt unter /mnt/usb verwenden, würden Sie Folgendes ausführen:
sudo fuser -k /mnt/usb
Die Verwendung von fuser -k unter Linux ist eine schnelle und effektive Methode, um eine Ressource freizugeben.
fuser vs lsof
Wann sollten Sie also fuser vs lsof verwenden?
lsofeignet sich hervorragend für detaillierte Untersuchungen. Es liefert umfangreiche Informationen zu allen geöffneten Dateien und ist somit ideal für komplexe Fehlerbehebungen.fuserist direkter. Es eignet sich perfekt, um schnell Prozesse auf einer bestimmten Datei oder einem Einhängepunkt zu identifizieren und bei Bedarf zu beenden. Derfuser commandist oft die schnellere Wahl zur Behebung von Fehlern wie „Gerät oder Ressource belegt“.
Beide Tools sind für jeden Linux-Benutzer unerlässlich. Machen Sie sich mit ihnen vertraut, um Dateien und Prozesse effizient zu verwalten.