[Linux] Trouver le ou les processus qui utilisent un fichier, dossier ou point de montage.
Coucou !
Aujourd'hui, je vais vous proposer quelques lignes pour vous permettre de trouver rapidement le ou les processus qui utilisent un fichier, un dossier et même un point de montage.
Ils arrivent parfois sur Linux ( et souvent sur Windows ;) ) que vous vous trouviez confronter des messages du genre "Impossible de (Supprimer/Déplacer) ce fichier. Celui-ci est actuellement en cours d'utilisation"
Inversement ... il est tout à fait imaginable que vous ayez envie de supprimer certaines choses, mais que vous souhaitez savoir si celles-ci ne sont pas en cours d'utilisation ...
Ainsi, sous Linux il est possible de trouver les processus (les programmes / applications) qui utilisent certaines ressources (fichier, dossier, montage)
lsof
La commande lsof est assez simple, puisqu'il suffit de la saisir en la précédant du chemin de la ressource.
Dans l'exemple ci-dessous, je vais simplement chercher les processus qui utilisent le point de montage "/mnt/c" :
lsof /mnt/c
fuser
fuser est également une bonne commande pour consulter l'utilisation d'une ressource.
La syntaxe est la suivante "fuser -m <ressource>", ici je souhaite (encore une fois), connaitre
l'utilisation de "/mnt/c" :
fuser -m /mnt/c
Résultat j'obtiens une ligne, plus ou moins ressemblant à ça :
/mnt/c: 14c 697c 700c
14c 697c 700c : Corresponds aux différents identifiants des processus. Ils sont précédés d'une ou plusieurs lettres qui apportent une information sur le processus.
Je vous copie ci-dessous la correspondance de ces lettres (référence du MAN) :
- c : répertoire courant.
- e : programme en cours d'exécution.
- f : fichier ouvert. f est omis par défaut.
- r : répertoire racine
- m : fichier projeté en mémoire, ou bibliothèque partagée.
Une petite capture d'écran de mon exemple:
Je fais ensuite un "ps -p <liste des identifiants de processus>", ce qui me permet de récupérer lesdits processus.
Mon avis
"lsof" est très précis ... et parfois "trop" précis.
Si j'édite par exemple un fichier "toto.txt" avec l'éditeur "vim".
Celui-ci ne va pas éditer directement le fichier, mais une copie qu'il aura générée ".toto.txt.swp"... c'est au moment où l'on enregistre le fichier, que vim va remplacer le fichier original "toto.txt", par la copie temporaire ".toto.txt.swp" que vous serez entrain d'éditer.
"lsof" ne verra donc pas l'utilisation du fichier de "toto.txt" par "vim" mais uniquement celle de ".toto.txt.swp"
"fuser" par contre vous remontera bien le processus "vim" qui édite le fichier "toto.txt"
Je pense que lsof remonte uniquement les processus "actifs", si vous avez l'explication, n’hésitez pas à la partager par commentaire.
Ci-dessous, je vous propose cette petite ligne de commande qui vous permettra d'exploiter "fuser" couplé à "ps aux"
Conclusion
Cela faisait pas mal de temps que je n'avais pas fait un mini "tuto" sur des commandes linux "pratiques". C'était l'occasion pour moi de varier un peu les sujets.
Je vous souhaite sur ce un excellent Weekend !
Super mais existe-t-il une alternative pour Windows ? :)
Pratique aussi, pour connaitre tous les fichiers ouverts par un processus :
[pastacode lang="bash" manual="readlink%20%2Fproc%2F%3Cpid%3E%2Ffd%2F*" message="" highlight="" provider="manual"/]