web-dev-qa-db-fra.com

Comment afficher les descripteurs de fichiers ouverts mais sans utiliser la commande lsof

Salut, j'ai lu ici que lsof n'est pas un moyen précis d'obtenir le nombre de descripteurs de fichiers actuellement ouverts. Il a recommandé d'utiliser cette commande à la place

 cat /proc/sys/fs/file-nr

Alors que cette commande affiche le nombre de FD, comment affichez-vous la liste des descripteurs de fichiers ouverts que la commande ci-dessus vient de compter?

48
dimas

Il y a deux raisons lsof | wc -l ne compte pas les descripteurs de fichiers. La première est qu'il répertorie les éléments qui ne sont pas des fichiers ouverts, tels que les bibliothèques liées dynamiquement chargées et les répertoires de travail actuels; vous devez les filtrer. Un autre est que lsof prend un certain temps à s'exécuter, donc peut manquer des fichiers qui sont ouverts ou fermés pendant son exécution; par conséquent, le nombre de fichiers ouverts répertoriés est approximatif. Regarder /proc/sys/fs/file-nr vous donne une valeur exacte à un moment donné.

cat /proc/sys/fs/file-nr n'est utile que lorsque vous avez besoin du chiffre exact, principalement pour vérifier l'épuisement des ressources. Si vous souhaitez répertorier les fichiers ouverts, vous devez appeler lsof ou utiliser une méthode équivalente telle que le chalutage /proc/*/fd manuellement.

Les informations sur les processus sont conservées dynamiquement par le système dans des répertoires sous/proc. Par exemple, le processus avec PID 1234 aura un répertoire appelé/proc/1234.

Il y a pas mal d'informations mais en ce moment vous êtes intéressé par le sous-répertoire/proc/1234/fd.

REMARQUE: vous devez disposer des autorisations root pour afficher ou ouvrir des fichiers pour les processus qui ne vous appartiennent pas, ainsi que pour les processus SetUID.

Exemple:

root@johan-HP-ProBook-6560b-LG654EA-ACQ:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]

root@johan-HP:/proc# cat 2443/fdinfo/2
pos:    1244446
flags:  0102001

Jetez également un œil au reste des fichiers sous/proc ... de nombreuses informations utiles du système se trouvent ici.

25
Johan