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?

khris
quelle

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.

jimm-cl
quelle
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.

Ghoti
quelle
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