J'ai remarqué, si un file est renommé, lsof
affiche le nouveau nom.
Pour le tester, python
un script python
:
#!/bin/python import time f = open('foo.txt', 'w') while True: time.sleep(1)
Vu que lsof
suit le changement de nom:
$ python test_lsof.py & [1] 19698 $ lsof | grep foo | awk '{ print $2,$9 }' 19698 /home/bfernandez/foo.txt $ mv foo{,1}.txt $ lsof | grep foo | awk '{ print $2,$9 }' 19698 /home/bfernandez/foo1.txt
Figuré cela peut être via le numéro d' inode
. Pour tester cela, j'ai créé un lien vers le file. Cependant, lsof
affiche toujours le nom d'origine:
$ ln foo1.txt foo1.link $ stat -c '%n:%i' foo* foo1.link:8429704 foo1.txt:8429704 $ lsof | grep foo | awk '{ print $2,$9 }' 19698 /home/bfernandez/foo1.txt
Et si je supprime le file original, lsof
ne fait que listr le file comme supprimé bien qu'il y ait encore un lien dur existant:
$ rm foo1.txt rm: remove regular empty file 'foo1.txt'? y $ lsof | grep foo | awk '{ print $2,$9,$10 }' 19698 /home/bfernandez/foo1.txt (deleted)
Donc finalement …
Quelle est la méthode utilisée par lsof
pour suivre les descripteurs de files ouverts qui lui permettent de:
Vous avez raison de supposer que lsof
utilise l'inode à partir du cache du nom du kernel. Sous Linux, le nom du path est fourni par le système de files Linux /proc
.
La gestion des liens physiques est mieux expliquée dans la FAQ :
3.3.4 Pourquoi ne signale-t-il pas le nom du path d'access du file lié "correct"?
Lorsque lsof signale un composant de nom de path le plus à droite pour un file avec des liens physiques, le composant peut provenir du cache de noms du kernel. Étant donné que la key qui connecte un file ouvert au cache du nom du kernel peut être la même pour chaque lien physique différemment nommé, lsof peut ne signaler qu'un seul nom pour tous les files ouverts ouverts . Parfois, ce sera «correct» dans l'œil du spectateur; parfois, ce ne sera pas le cas. Souvenez-vous que les keys d'identification de file significatives pour le kernel sont les numéros de périphérique et de noeud, et ils sont les mêmes pour tous les noms liés.
Le fait que le noeud supprimé soit affiché est également spécifique à Linux (et aux versions ultérieures de Solaris 10, selon la même FAQ ).