Plusieurs commandes permettent de lister les fichiers ouverts par un processus.
Commande procfiles.
Cette commande AIX permet de lister les fichiers ouvert ppar un processus.
Pour chaque fichier, la commande retourne le Numéro d'inode et d'autres informations telles que la taille l'UID et le GID.
Voici ci-dessous un exemple avec un processus ayant pour ID 184422.
# procfiles 184422
184422 : /usr/sbin/hostmibd
Current rlimit: 2147483647 file descriptors
4: S_IFREG mode:0444 dev:10,5 ino:13407 uid:0 gid:0 rdev:0,0
O_RDONLY size:4811
Nous remarquons ici que le processus a ouvert un fichier avec le descripteur 4.
Ce descripteur possède un numéro de Majeur/mineur de valeur "10,5" et un numéro d'inode de 13407.
La procédure suivante permet de retrouver ces objets:
# cd /dev
# ls -l | grep "10, *5"
brw-rw---- 1 root system 10, 5 Oct 10 2005 hd2
crw-rw---- 1 root system 10, 5 Oct 10 2005 rhd2
L'unité qui contient notre objet est donc, soit le FS /usr.
# lsfs | grep hd2
/dev/hd2 -- /usr jfs2 3801088 yes no
Nous utilisons ensuite la commande 'istat' pour retrouver le fichier ayant comme descripteur '4' et comme inode 13407.
# istat 13407 /usr
Inode 13407 on device 10/5
File Protection: rw-r--r--
Owner: 2(bin) Group: 2(bin)
Link count: 1 Length 4811 bytes
Last updated: Tue Aug 24 16:14:48 CDT 2004
Last modified: Mon Jul 12 11:33:31 CDT 2004
Last accessed: Wed Aug 9 09:16:28 CDT 2006
Block pointers (hexadecimal): 1892c
Nous lançaons ensuite la commande 'find' pour trouver l'objet du FS /usr ayant pour inode le 13407.
# cd /usr
# find . -inum 13407 -exec ls -l {} \;
-rw-r--r-- 1 bin bin 4811 Jul 12 2004 ./lib/nls/msg/en_US/hostmibd.cat
Commande 'pstat'.
La commande 'pstat' permet aussi de lister les files ouvert par un processus.
Nous recherchons par exemple tous les fichiers ouvert par le démon 'cron'.
# ps -ef | grep cron
root 323762 1 0 Oct 06 - 0:07 /usr/sbin/cron
Le PID du démon est 323762,soit 0x4F0B2 en héxadécimal.
# pstat -a | grep -i 4F0B2
SLT ST PID PPID PGRP UID EUID TCNT NAME
79 a 4f0b2 1 4f0b2 0 0 1 cron
Nous utilisons alors le numéro de slot pour afficher les informations du système de fichiers et de la table de description des fichiers.
Dans l'exemple ci-dessous, nous retrouvons donc 13 fichiers ouvert, numérotés de 0 à 12.
# pstat -u 79 | grep FILE
FILE SYSTEM STATE
FILE DESCRIPTOR TABLE
# pstat -u 79 | grep -p "FILE DESCRIPTOR TABLE"
FILE DESCRIPTOR TABLE
*ufd: 0xf00000002ff49e20
fd 0: fp = 0xf1000714500080e0 flags = 0x0080 count = 0x0000
fd 1: fp = 0xf100071450007fa0 flags = 0x0080 count = 0x0000
fd 2: fp = 0xf100071450007fa0 flags = 0x0080 count = 0x0000
fd 3: fp = 0xf100071450007780 flags = 0x0080 count = 0x0000
fd 4: fp = 0xf100071450007af0 flags = 0x0080 count = 0x0000
fd 5: fp = 0xf1000714500079b0 flags = 0x0080 count = 0x0000
fd 6: fp = 0xf1000714500066a0 flags = 0x0080 count = 0x0000
fd 7: fp = 0xf100071450008270 flags = 0x0080 count = 0x0000
fd 8: fp = 0xf1000714500081d0 flags = 0x0080 count = 0x0000
fd 9: fp = 0xf100071450008220 flags = 0x0080 count = 0x0000
fd 10: fp = 0xf100071450008180 flags = 0x0080 count = 0x0000
fd 11: fp = 0xf1000714500082c0 flags = 0x0080 count = 0x0001
fd 12: fp = 0xf100071450008130 flags = 0x0081 count = 0x0000
lsof Command
La commande 'lsof' enfin est très utile pour la recherche de fichiers.
La commande ci-dessous affiche le nombre de fichiers détenus par le compte 'account'.
# lsof -u account | wc -l
# lsof -u account | grep pid | wc -l
ou
# lsof -p pid
Cette commande liste les fichiers détenus par le processus au PID 'pid'.