Wie finde ich heraus, welcher Prozess eine Datei unter Linux verwendet?


90

Ich habe versucht, eine Datei unter Linux mit zu entfernen rm -rf file_name, habe aber den Fehler erhalten:

rm: file_name not removed.  Text file busy

Wie kann ich herausfinden, welcher Prozess diese Datei verwendet?

Antworten:


135

Sie können den fuserBefehl wie folgt verwenden:

fuser file_name

Sie erhalten eine Liste der Prozesse, die die Datei verwenden.

Sie können damit verschiedene Flags verwenden, um eine detailliertere Ausgabe zu erhalten.

Weitere Informationen finden Sie im Wikipedia-Artikel der Fixiereinheit oder auf den manSeiten.


Ich habe es versucht: fuser -i / home / bin / lib. Aber habe diese: Fixiereinheit: illegale Option - i / home / bin / lib: 27674t
khris

1
@khris, möglicherweise sind nicht alle fuserImplementierungen gleich oder funktionieren gleich. Selbst wenn dies -iin POSIX definiert ist, verfügt die von Ihnen verwendete Implementierung nicht unbedingt über dieselben Optionen wie die im Wikipedia-Artikel beschriebenen. Zum Beispiel verwende ich gerade AIX und das fuserin diesem System verfügbare hat auch nicht die -iOption.
Jimmy-Cl

Weder aus irgendeinem Grunde fusernoch lsofarbeitet für mich auf einem virtualbox Gast. Diese Antwort hat mich gerettet.
Kael

34

@ jims Antwort ist richtig - fuserist was Sie wollen.

Zusätzlich (oder alternativ) können Sie lsofweitere Informationen einschließlich des Benutzernamens abrufen, falls Sie eine Berechtigung benötigen (ohne einen zusätzlichen Befehl ausführen zu müssen), um den Prozess abzubrechen. (Wenn Sie den Prozess beenden möchten, fuserkönnen Sie dies natürlich mit der -kOption tun. Mit der Option können Sie auch fuserandere Signale verwenden. Weitere -sInformationen finden Sie auf der Manpage.)

Zum Beispiel mit einem tail -F /etc/passwdLauf in einem Fenster:

ghoti@pc:~$ lsof | grep passwd
tail      12470    ghoti    3r      REG  251,0     2037 51515911 /etc/passwd

Beachten Sie, dass Sie damit auch lsofherausfinden können, welche Prozesse bestimmte Sockets verwenden. Ein ausgezeichnetes Werkzeug, das Sie in Ihrem Arsenal haben sollten.


Welches Feld ist die PID?
nmz787

@ nmz787 - lsof | head -1um alle Header zu sehen.
Ghoti

@ nmz787 Das zweite Feld ist die PID.
Für den

lsof | grep -E "PID|<your_process_name>"Zeigt sowohl die erste Zeile als auch den Prozess an, den Sie abfragen möchten.
Robin Hsu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.