J'ai essayé de supprimer un fichier sous Linux en utilisant rm -rf file_name
, mais j'ai obtenu l'erreur:
rm: file_name not removed. Text file busy
Comment puis-je savoir quel processus utilise ce fichier?
Réponses:
Vous pouvez utiliser la fuser
commande, comme:
fuser file_name
Vous recevrez une liste des processus utilisant le fichier.
Vous pouvez utiliser différents indicateurs avec lui, afin de recevoir une sortie plus détaillée.
Vous pouvez trouver plus d'informations dans l'article Wikipédia de l' unité de fusion ou dans les man
pages.
fuser
implémentations ne sont pas identiques ou ne fonctionnent pas de la même manière. Même si elle -i
est définie dans POSIX, l'implémentation particulière que vous utilisez n'a pas nécessairement les mêmes options que celles décrites dans l'article Wikipédia. Par exemple, j'utilise AIX en ce moment, et le fuser
disponible dans ce système n'a pas non plus l' -i
option.
fuser
ni lsof
ne travaillaient pour moi sur un invité virtualbox. Cette réponse m'a sauvé.
La réponse de @ jim est correcte - fuser
c'est ce que vous voulez.
De plus (ou alternativement), vous pouvez utiliser lsof
pour obtenir plus d'informations, y compris le nom d'utilisateur, au cas où vous auriez besoin d'une autorisation (sans avoir à exécuter une commande supplémentaire) pour arrêter le processus. (Bien sûr, si vous voulez tuer le processus, vous fuser
pouvez le faire avec son -k
option. Vous pouvez fuser
utiliser d'autres signaux avec l' -s
option - consultez la page de manuel pour plus de détails.)
Par exemple, avec une tail -F /etc/passwd
exécution dans une fenêtre:
ghoti@pc:~$ lsof | grep passwd
tail 12470 ghoti 3r REG 251,0 2037 51515911 /etc/passwd
Notez que vous pouvez également utiliser lsof
pour découvrir quels processus utilisent des sockets particuliers. Un excellent outil à avoir dans votre arsenal.
lsof | head -1
pour voir tous les en-têtes.
lsof | grep -E "PID|<your_process_name>"
affiche à la fois la 1ère ligne et le processus que vous souhaitez interroger.
tree
quelque chose de stdin? Si oui, que fait-il avec cette entrée?
tree
, non lsof
. Pour autant que je sache, tree
ne lit pas à partir de l'entrée standard, donc la sortie de lsof
est ignorée lorsque vous exécutez lsof | tree ...
. Si c'est correct, alors lsof | tree MyFold
est le même que tree MyFold
, qui affiche simplement le contenu mais pas quels fichiers sont ouverts par un processus.