2010-04-21 8 views
12

je besoin d'un script pour identifier les fichiers ouverts un processus particulier sur linuxIdentifier les fichiers ouverts un processus particulier sur linux

Identifier fd:

>cd /proc/<PID>/fd; ls |wc –l 

-je voir une liste des numéros qui est la liste des numéros de descripteurs de fichiers utilisant dans le processus. S'il vous plaît montrez-moi comment voir tous les fichiers utilisés dans ce processus. Merci.

Répondre

2

Vous avez besoin de lsof. Pour obtenir le PID de l'application qui a ouvert foo.txt:

lsof | grep foo.txt | awk -F\ '{print $2}' 

ou ce que Macmede dit faire l'inverse (liste des fichiers ouverts par un processus).

+0

oh Merci! laissez-moi essayer – aladine

+0

Cela liste les processus en utilisant un fichier. Je pense qu'il veut les fichiers utilisés par un processus ... Alors tapez le nom du processus au lieu du nom de fichier ... – Macmade

+0

Correct, j'ai mis à jour la réponse. –

5
lsof -p <pid number here> | wc -l 

si vous n'avez pas lsof, vous pouvez faire à peu près la même chose en utilisant juste /proc

par exemple

$ pid=1825 
$ ls -1 /proc/$pid/fd/* 
$ awk '!/\[/&&$6{_[$6]++}END{for(i in _)print i}' /proc/$pid/maps 
17

La commande que vous voulez probablement utiliser est lsof. C'est une meilleure idée que de creuser dans /proc, car la commande est une façon plus claire et plus stable d'obtenir des informations sur le système.

lsof -p pid 

Cependant, si vous êtes intéressé par /proc choses, vous pouvez remarquer que les fichiers /proc/<pid>/fd/x est un lien symbolique vers le fichier auquel il est associé. Vous pouvez lire la valeur du lien symbolique avec la commande readlink. Par exemple, cela montre le terminal stdin est lié à:

$ readlink /proc/self/fd/0 
/dev/pts/43 

ou, pour obtenir tous les fichiers pour un processus,

ls /proc/<pid>/fd/* | xargs -L 1 readlink 
8

Alors que lsof est agréable, vous pouvez simplement faire:

ls -l /proc/pidoftheproces/fd 
Questions connexes