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:
Sie können den fuser
Befehl 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 man
Seiten.
fuser
Implementierungen gleich oder funktionieren gleich. Selbst wenn dies -i
in 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 fuser
in diesem System verfügbare hat auch nicht die -i
Option.
fuser
noch lsof
arbeitet für mich auf einem virtualbox Gast. Diese Antwort hat mich gerettet.
@ jims Antwort ist richtig - fuser
ist was Sie wollen.
Zusätzlich (oder alternativ) können Sie lsof
weitere 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, fuser
können Sie dies natürlich mit der -k
Option tun. Mit der Option können Sie auch fuser
andere Signale verwenden. Weitere -s
Informationen finden Sie auf der Manpage.)
Zum Beispiel mit einem tail -F /etc/passwd
Lauf 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 lsof
herausfinden können, welche Prozesse bestimmte Sockets verwenden. Ein ausgezeichnetes Werkzeug, das Sie in Ihrem Arsenal haben sollten.
lsof | head -1
um alle Header zu sehen.
lsof | grep -E "PID|<your_process_name>"
Zeigt sowohl die erste Zeile als auch den Prozess an, den Sie abfragen möchten.