Comment savoir quel processus utilise un fichier sous Linux?

92

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?

khris
la source

Réponses:

137

Vous pouvez utiliser la fusercommande, 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 manpages.

jimm-cl
la source
J'ai essayé ceci: fuser -i / home / bin / lib. Mais j'ai ceci: fuser: option illégale - i / home / bin / lib: 27674t
khris
1
@khris, peut-être que toutes les fuserimplémentations ne sont pas identiques ou ne fonctionnent pas de la même manière. Même si elle -iest 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 fuserdisponible dans ce système n'a pas non plus l' -ioption.
jimm-cl
Pour une raison quelconque, ni fuserni lsofne travaillaient pour moi sur un invité virtualbox. Cette réponse m'a sauvé.
kael
34

La réponse de @ jim est correcte - fuserc'est ce que vous voulez.

De plus (ou alternativement), vous pouvez utiliser lsofpour 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 fuserpouvez le faire avec son -koption. Vous pouvez fuserutiliser d'autres signaux avec l' -soption - consultez la page de manuel pour plus de détails.)

Par exemple, avec une tail -F /etc/passwdexé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 lsofpour découvrir quels processus utilisent des sockets particuliers. Un excellent outil à avoir dans votre arsenal.

Ghoti
la source
quel champ est le PID?
nmz787 du
@ nmz787 - lsof | head -1pour voir tous les en-têtes.
ghoti le
@ nmz787 Le deuxième champ est le PID.
pour le
lsof | grep -E "PID|<your_process_name>"affiche à la fois la 1ère ligne et le processus que vous souhaitez interroger.
Robin Hsu le
0
$ lsof | tree MyFold

Comme le montre l'image ci-jointe:

entrez la description de l'image ici

Notion émoussée
la source
1
Comment cela marche-t-il? Lit treequelque chose de stdin? Si oui, que fait-il avec cette entrée?
dyp
man lsof - affiche le manuel de la commande lsof, lsof - liste les fichiers ouverts, répertorie sur son fichier de sortie standard les informations sur les fichiers ouverts par les processus et le résultat peut être vu dans une structure arborescente. vous devriez vérifier clairement ce qui est lsof
Blunt Notion
Ma question porte sur tree, non lsof. Pour autant que je sache, treene lit pas à partir de l'entrée standard, donc la sortie de lsofest ignorée lorsque vous exécutez lsof | tree .... Si c'est correct, alors lsof | tree MyFoldest le même que tree MyFold, qui affiche simplement le contenu mais pas quels fichiers sont ouverts par un processus.
dyp