Il est facile de se souvenir que lsof correrspond à ls + of, avec ls pour list et of pour open files.
lsof est un utilitaire en ligne de commande qui est utilisé pour lister les informations sur les fichiers ouverts par les différents processus du système.
Par défaut lsof fournit la liste de tous les fichiers ouverts par tous les processus.
#lsof lsof: WARNING: compiled for AIX version 6.1.0.0; this is 7.1.0.0. Value of I :182 np:0 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME (unknown) 0 root cwd VDIR 10,4 4096 2 / (/dev/hd4) init 1 root cwd VDIR 10,4 4096 2 / (/dev/hd4) init 1 root 0u VREG 10,4 30456 599 / (/dev/hd4) syncd 1900544 root cwd VDIR 10,4 4096 2 / (/dev/hd4) syncd 1900544 root 0r VCHR 2,2 0t0 442 /dev/null syncd 1900544 root 1w VCHR 2,2 0t0 442 /dev/null syncd 1900544 root 2w VCHR 2,2 0t0 442 /dev/null shlap64 1966182 root cwd VDIR 10,4 4096 2 / (/dev/hd4) ..
cwd | Current Working Directory (répertoire courrant) |
txt | Fichier de texte |
mem | Memory mapped file |
mmap | Memory mapped device |
un nombre | l'actuel file descriptor. Le caractère qui suit se nombre représente le mode d'ouverture |
Mode d'ouverture
r | read |
w | write |
u | read and write. |
TYPE indique le type de fichier. Cela peut-être entre autre:
REG | fichier régulier |
DIR | répertoire |
FIFO | First In First Out |
CHR | fichier spécial de caractères |
On peut spécifier le nom d'un fichier ou d'un répertoire. lsof donnera tous les processus qui accèdent à ce fichier.
#lsof /var/log/syslog lsof: WARNING: compiled for AIX version 6.1.0.0; this is 7.1.0.0. Value of I :182 np:0 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME syslogd 2949284 root 5w VREG 10,11 430135 27 /var/log/syslog (/dev/lv_syslog) syslogd 2949284 root 11w VREG 10,11 0 4 /var/log/syslog (/dev/lv_syslog) syslogd 2949284 root 12w VREG 10,11 152 37 /var/log/syslog (/dev/lv_syslog) syslogd 2949284 root 14w VREG 10,11 31310 36 /var/log/syslog (/dev/lv_syslog) syslogd 2949284 root 15w VREG 10,11 31569 7 /var/log/syslog (/dev/lv_syslog) syslogd 2949284 root 16w VREG 10,11 31569 8 /var/log/syslog (/dev/lv_syslog) syslogd 2949284 root 17w VREG 10,11 325657 29 /var/log/syslog (/dev/lv_syslog) syslogd 2949284 root 18w VREG 10,11 430262 28 /var/log/syslog (/dev/lv_syslog)
Dans le cas d'un répertoire on peut utiliser l'option (+D) qui fournit le nom exact des fichiers accédés.
#lsof +D /var/log/syslog lsof: WARNING: compiled for AIX version 6.1.0.0; this is 7.1.0.0. Value of I :182 np:0 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME syslogd 2949284 root 5w VREG 10,11 431186 27 /var/log/syslog/info.log syslogd 2949284 root 11w VREG 10,11 0 4 /var/log/syslog/emerg.log syslogd 2949284 root 12w VREG 10,11 152 37 /var/log/syslog/alert.log syslogd 2949284 root 14w VREG 10,11 31310 36 /var/log/syslog/crit.log syslogd 2949284 root 15w VREG 10,11 31569 7 /var/log/syslog/err.log syslogd 2949284 root 16w VREG 10,11 31569 8 /var/log/syslog/warning.log syslogd 2949284 root 17w VREG 10,11 326534 29 /var/log/syslog/notice.log syslogd 2949284 root 18w VREG 10,11 431313 28 /var/log/syslog/debug.log
Meme si il est possible d'utiliser fuser -kxuc pour supprimer tous les processus qui occupent un filesysteme et l'empeche d'être démonté, il est toujours utile et même préferrable de vérifier les processus afin d'arrêter ceux-ci le plus proprement possible.
Pour cela on utilise lsof sur le point de montage.
#lsof /home lsof: WARNING: compiled for AIX version 6.1.3.0; this is 7.1.0.0. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ksh 3015000 bicquelet cwd VDIR 10,8 4096 109522 /home (/dev/hd1) ksh 3015000 bicquelet 63u VREG 10,8 11100 109588 /home (/dev/hd1) ksh 4718856 bicquelet cwd VDIR 10,8 4096 109522 /home (/dev/hd1) ksh 4718856 bicquelet 63u VREG 10,8 23326 109531 /home (/dev/hd1) screen-4. 5177656 bicquelet cwd VDIR 10,8 4096 109522 /home (/dev/hd1) sudo 5570708 root cwd VDIR 10,8 4096 102455 /home (/dev/hd1
L'arrêt des processus pourra alors se faire au cas par cas.
#lsof -u bicqueletjl lsof: WARNING: compiled for AIX version 6.1.3.0; this is 7.1.0.0. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 5963910 bicqueletjl cwd VDIR 10,4 4096 2 / (/dev/hd4) sshd 5963910 bicqueletjl 0u VCHR 2,2 0t0 207 /dev/null sshd 5963910 bicqueletjl 1u VCHR 2,2 0t0 207 /dev/null sshd 5963910 bicqueletjl 2w VMPC 4,0 0t0 90 /dev/console/0 sshd 5963910 bicqueletjl 3r VREG 10,5 6242 62327 /usr (/dev/hd2) sshd 5963910 bicqueletjl 4u unix 0xf1000e00059e9008 0t0 ->(none) sshd 5963910 bicqueletjl 5u IPv4 0xf1000e0003f6cbb8 0t4269405 TCP serveur01:ssh->station98979.domaine.fr:53138 (ESTABLISHED) sshd 5963910 bicqueletjl 6u unix 0xf1000e00053d2c08 0t165333 ->0xf1000e00057c3408 sshd 5963910 bicqueletjl 7u unix 0xf1000e0000f71008 0t1469 ->(none) sshd 5963910 bicqueletjl 8r FIFO 0xf1000a01c05ff910 0 sshd 5963910 bicqueletjl 9w FIFO 0xf1000a01c05ff910 0 sshd 5963910 bicqueletjl 10r VREG 10,5 6443 62567 /usr (/dev/hd2) sshd 5963910 bicqueletjl 11w FIFO 0xf1000a01c05f82b0 0 sshd 5963910 bicqueletjl 12u VCHR 43,28 0t1952219 225 /dev/ptc/28 sshd 5963910 bicqueletjl 14u VCHR 43,28 0t1952219 225 /dev/ptc/28 sshd 5963910 bicqueletjl 15u VCHR 43,28 0t1952219 225 /dev/ptc/28
Il est aussi possible d'afficher tous les processus sauf celui d'un utilisateur. On utilise alors le caractère ^.
#lsof -u ^bicqueletjl ksh 37814456 root cwd VDIR 10,4 28672 26217 / (/dev/hd4) ksh 37814456 root 0r VCHR 2,2 0t0 207 /dev/null ksh 37814456 root 1w VREG 51,3 13218 323732 /etatconfig/aix (/dev/confvg) ksh 37814456 root 2w VREG 51,3 13218 323732 /etatconfig/aix (/dev/confvg) ksh 37814456 root 10r VREG 10,5 5875 62520 /usr (/dev/hd2) ksh 37814456 root 62r VREG 51,3 3012 281858 /etatconfig/aix (/dev/confvg) vi 38142116 root cwd VDIR 51,1 4096 508223 /ins (/dev/insvg) vi 38142116 root 0u VCHR 44,11 0t785987 270 /dev/pts/11 vi 38142116 root 1u VCHR 44,11 0t785987 270 /dev/pts/11 vi 38142116 root 2u VCHR 44,11 0t785987 270 /dev/pts/11 vi 38142116 root 3u VREG 10,6 557056 32930 /var (/dev/hd9var) vi 38142116 root 4r VREG 10,4 565 26383 / (/dev/hd4) vi 38142116 root 5r VREG 10,5 19054 62326 /usr (/dev/hd2) vi 38142116 root 6u VREG 10,6 327680 32931 /var (/dev/hd9var) sudo 38338762 root cwd VDIR 10,8 12288 94228 /home (/dev/hd1) sudo 38338762 root 0u VCHR 44,36 0t3071 443 /dev/pts/36 sudo 38338762 root 1u VCHR 44,36 0t3071 443 /dev/pts/36 sudo 38338762 root 2u VCHR 44,36 0t3071 443 /dev/pts/36 sudo 38338762 root 3u unix 0xf1000e0003c4d808 0t0 ->(none) sudo 38338762 root 5u unix 0xf1000e0003f9d408 0t2505 ->0xf1000e0004072808 sudo 38338762 root 6u unix 0xf1000e000405c808 0t0 ->(none) sudo 38338762 root 7r FIFO 0xf1000a023017b610 0 sudo 38338762 root 8r VREG 10,5 6242 62327 /usr (/dev/hd2) sudo 38338762 root 9w FIFO 0xf1000a023017b610 0 ssh 38600946 root cwd VDIR 10,8 4096 109522 /home (/dev/hd1) ssh 38600946 root 0u VCHR 44,27 0t3356089 433 /dev/pts/27 ssh 38600946 root 1u VCHR 44,27 0t3356089 433 /dev/pts/27 ssh 38600946 root 2u VCHR 44,27 0t3356089 433 /dev/pts/27 ssh 38600946 root 3r VREG 10,5 6242 62327 /usr (/dev/hd2) ssh 38600946 root 4u unix 0xf1000e0001ebd008 0t0 ->(none) ssh 38600946 root 5u IPv4 0xf1000e0004dd9bb8 0t253490 TCP serveur01:35518->serveur56.domaine.fr:ssh (ESTABLISHED) ssh 38600946 root 6u VCHR 44,27 0t3356089 433 /dev/pts/27 ssh 38600946 root 7u VCHR 44,27 0t3356089 433 /dev/pts/27 ssh 38600946 root 8u VCHR 44,27 0t3356089 433 /dev/pts/27
Vous pouvez lister tous les fichiers ouverts par un processus donné en utilisant l'option-p. C'est utile pour obtenir plus d'informations sur ce processus et comprendre celui-ci.
#ps -ef |grep ksh |grep bicqueletjl bicquele 27197546 37748900 0 May 13 pts/12 0:00 -ksh bicquele 14549290 34013366 0 May 12 pts/0 0:00 -ksh bicquele 29819310 5963910 0 May 12 pts/28 0:00 -ksh [serveur01:root]/var/log #lsof -p 27197546 lsof: WARNING: compiled for AIX version 6.1.3.0; this is 7.1.0.0. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ksh 27197546 bicqueletjl cwd VDIR 10,8 4096 41213 /home (/dev/hd1) ksh 27197546 bicqueletjl 0u VCHR 44,12 0t4671639 281 /dev/pts/12 ksh 27197546 bicqueletjl 1u VCHR 44,12 0t4671639 281 /dev/pts/12 ksh 27197546 bicqueletjl 2u VCHR 44,12 0t4671639 281 /dev/pts/12 ksh 27197546 bicqueletjl 10r VREG 10,5 5875 62520 /usr (/dev/hd2) ksh 27197546 bicqueletjl 61u VREG 10,7 0 565 /tmp (/dev/hd3) ksh 27197546 bicqueletjl 63u VREG 10,8 33136 37399 /home (/dev/hd1)
L'option pour lister les connection réseau est l'option -i.
#lsof -i | head -n 10 lsof: WARNING: compiled for AIX version 6.1.0.0; this is 7.1.0.0. In while loop:256 Value of I :124 np:256 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 448 pbp1procs 5u IPv4 0xf1000e0003e073b8 0t30657321 TCP serveur03->domaine.fr:35692 (ESTABLISHED) sshd 459036 pbp1procs 5u IPv4 0xf1000e00001d8bb8 0x41e674d9 TCP serveur03->domaine.fr:43915 (ESTABLISHED) sshd 655724 root 5u IPv4 0xf1000e0003e0c3b8 0x526fb939 TCP serveur03->domaine.fr:37403 (ESTABLISHED) sshd 1310994 root 5u IPv4 0xf1000e0003daabb8 0t453401 TCP serveur03->domaine.fr:59980 (ESTABLISHED) clcomd 2031796 root 6u IPv6 0xf1000e0003d9d3b8 0t0 TCP *:clcomd_caa (LISTEN) sshd 2228612 root 5u IPv4 0xf1000e00002423b8 0t6153465 TCP serveur03->domaine.fr:35868 (ESTABLISHED) nimsh 2359432 root 4u IPv6 0xf1000e0000663bb8 0t0 TCP *:nimsh (LISTEN)
On peut aussi utiliser les optiob -i4 et -i6 pour lister les connection uniquement IPV4 et IPV6.
#lsof -i tcp; lsof -i udp; sshd 36962502 madariagaan 5u IPv4 0xf1000e0000cc8bb8 0t2219597 TCP sxpnim01:ssh->dk275851.fr.intranet:55753 (ESTABLISHED) sshd 37748900 bicqueletjl 5u IPv4 0xf1000e0000562bb8 0t7510429 TCP sxpnim01:ssh->dk298979.fr.intranet:51575 (ESTABLISHED) sshd 38142172 root 5u IPv4 0xf1000e0003827bb8 0t65753 TCP sxpnim01:ssh->swpafraepcx52.fr.intranet:61960 (ESTABLISHED) ssh 38600946 root 5u IPv4 0xf1000e0004dd9bb8 0t267794 TCP sxpnim01:35518->sxpora56.intranet:ssh (ESTABLISHED) lsof: WARNING: /root/.lsof_sxpnim01 was updated. lsof: WARNING: compiled for AIX version 6.1.3.0; this is 7.1.0.0. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME portmap 1311160 root 4u IPv6 0xf1000e00037b0400 0t0 UDP *:sunrpc portmap 1311160 root 5u IPv6 0xf1000e00037b0600 0t0 UDP *:32775 aixmibd 1835438 root 16u IPv6 0xf1000e00040a7400 0t0 UDP *:58088 inetd 2031852 root 5u IPv4 0xf1000e000052aa00 0t0 UDP *:bootps inetd 2031852 root 6u IPv4 0xf1000e00000a1a00 0t0 UDP *:32793
On récupère le pid du processus et on utilise sof -i -a -p pour trouver la connection.
ps -ef |grep ssh | grep bicq bicquele 5963910 25231748 0 May 12 - 0:14 sshd: bicqueletjlts/28 root 32768012 4325698 0 May 13 - 0:12 sshd: bicqueletjl [priv] bicquele 34013366 10158466 0 May 12 - 0:28 sshd: bicqueletjlts/0 bicquele 37748900 32768012 0 May 13 - 0:13 sshd: bicqueletjlts/12 root 10158466 4325698 0 May 12 - 0:08 sshd: bicqueletjl [priv] root 25231748 4325698 0 May 12 - 0:09 sshd: bicqueletjl [priv] #lsof -i -a -p 34013366 lsof: WARNING: compiled for AIX version 6.1.3.0; this is 7.1.0.0. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 34013366 bicqueletjl 5u IPv4 0xf1000e0003d0bbb8 0xbc51f35 TCP serveur:ssh->station98979.domaine.fr:58832 (ESTABLISHED)
Sur le terminal pts/0 je suis connecté en ssh protocole IPV4 à partir d'une station.
On peut aussi utiliser sof -i -a -c ssh qui liste les processus commençant par ssh
#lsof -i -a -c ssh lsof: WARNING: compiled for AIX version 6.1.3.0; this is 7.1.0.0. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2949490 root 5u IPv4 0xf1000e0003e5f3b8 0t893633 TCP serveur01:ssh->station84027.domaine.fr:59540 (ESTABLISHED) sshd 4325698 root 3u IPv4 0xf1000e0003c73bb8 0t0 TCP *:ssh (LISTEN) sshd 4325698 root 4u IPv6 0xf1000e0003c733b8 0t0 TCP *:ssh (LISTEN) sshd 4522262 root 5u IPv4 0xf1000e000287b3b8 0t25444809 TCP serveur01:ssh->station75851.domaine.fr:58418 (ESTABLISHED) sshd 5505406 doejohn 5u IPv4 0xf1000e00016763b8 0t18280013 TCP serveur01:ssh->station75851.domaine.fr:56040 (ESTABLISHED) sshd 5963910 bicqueletjl 5u IPv4 0xf1000e0003f6cbb8 0t4281501 TCP serveur01:ssh->station98979.domaine.fr:53138 (ESTABLISHED) ssh 6488448 root 5u IPv4 0xf1000e0002af13b8 0t4529794 TCP serveur01:52825->sxrtg212.intranet:ssh (ESTABLISHED) sshd 6684886 sharonsto 5u IPv4 0xf1000e0004e933b8 0t3310337 TCP serveur01:ssh->station76486.domaine.fr:59096 (ESTABLISHED) sshd 6684886 sharonsto 12u IPv4 0xf1000e00001483b8 0t0 TCP loopback:6010 (LISTEN) sshd 6684886 sharonsto 13u IPv6 0xf1000e0002fbc3b8 0t0 TCP ip6-localhost:6010 (LISTEN) ...
On utilise l'option -i.
#lsof -i :22 lsof: WARNING: compiled for AIX version 6.1.3.0; this is 7.1.0.0. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2949490 root 5u IPv4 0xf1000e0003e5f3b8 0t892465 TCP serveur01:ssh->station84027.domaine.fr:59540 (ESTABLISHED) sshd 4325698 root 3u IPv4 0xf1000e0003c73bb8 0t0 TCP *:ssh (LISTEN) sshd 4325698 root 4u IPv6 0xf1000e0003c733b8 0t0 TCP *:ssh (LISTEN) sshd 4522262 root 5u IPv4 0xf1000e000287b3b8 0t25444809 TCP serveur01:ssh->station75851.domaine.fr:58418 (ESTABLISHED) sshd 5505406 doejohn 5u IPv4 0xf1000e00016763b8 0t18275981 TCP serveur01:ssh->station75851.domaine.fr:56040 (ESTABLISHED) sshd 5963910 bicqueletjl 5u IPv4 0xf1000e0003f6cbb8 0t4281501 TCP serveur01:ssh->station98979.domaine.fr:53138 (ESTABLISHED) ssh 6488448 root 5u IPv4 0xf1000e0002af13b8 0t4529410 TCP serveur01:52825->station212.domaine.fr:ssh (ESTABLISHED) #lsof -i :22 -t 34930764 36438100 36962502 37748900 38142172 38600946 ...
Il est possible de préciser aussi le protocole
#lsof -i TCP:22
ou une plage de ports
lsof -i TCP:1-1024
#lsof -U
#lsof -i @serveur02 lsof: WARNING: compiled for AIX version 6.1.3.0; this is 7.1.0.0. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ssh 17629602 root 5u IPv4 0xf1000e00037ea3b8 0t951034 TCP serveur01:39938->serveur02:ssh (ESTABLISHED)
Autre exemple:
#lsof -i @serveur02b lsof: WARNING: compiled for AIX version 6.1.0.0; this is 7.1.0.0. In while loop:256 In while loop:256 Value of I :36 np:512 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sldfs_rre 3146116 sysload 3u IPv4 0xf1000e0000c04bb8 0t0 TCP serveur02b:9502 (LISTEN) zabbix_ag 4260050 zabbix 4u IPv4 0xf1000e0000538bb8 0t0 TCP serveur02b:10050 (LISTEN) xntpd 4456616 root 6u IPv4 0xf1000e0000160600 0t0 UDP serveur02b:ntp secldapcl 5046438 root 5u IPv4 0xf1000e0003d243b8 0x134b2f0f TCP serveur02b:32776->serveurldap01:ldap (ESTABLISHED) secldapcl 5046438 root 6u IPv4 0xf1000e0003d2f3b8 0t590863 TCP serveur02b:32777->serveurldap02:domaine.fr:ldap (ESTABLISHED) secldapcl 5046438 root 7u IPv4 0xf1000e0003d3a3b8 0t590766 TCP serveur02b:32778->serveurldap03:domaine.fr:ldap (ESTABLISHED) zabbix_ag 5374160 zabbix 4u IPv4 0xf1000e0000538bb8 0t0 TCP serveur02b:10050 (LISTEN) zabbix_ag 6684804 zabbix 4u IPv4 0xf1000e0000538bb8 0t0 TCP serveur02b:10050 (LISTEN) zabbix_ag 6750380 zabbix 4u IPv4 0xf1000e0000538bb8 0t0 TCP serveur02b:10050 (LISTEN) zabbix_ag 7012524 zabbix 4u IPv4 0xf1000e0000538bb8 0t0 TCP serveur02b:10050 (LISTEN) zabbix_ag 7798940 zabbix 4u IPv4 0xf1000e0000538bb8 0t0 TCP serveur02b:10050 (LISTEN) heart 12517550 root 3u IPv4 0xf1000e00035ff400 0t0 UDP serveur02b:ddi-udp-1 mmfsd64 16056420 root 32u IPv4 0xf1000e0003d52bb8 0t0 TCP serveur02b:1191->serveur02a:37994 (ESTABLISHED) sldsm_evn 25690564 sysload 7u IPv4 0xf1000e0000cb73b8 0t0 TCP serveur02b:49223 (LISTEN) lsof: WARNING: /root/.lsof_serveur02b was updated.
L'option -t permet de récupérer avec @b-lsof) uniquement les numéros de processus. On peut réaliser des combinaisons assez efficaces. Par exemple supprimer tous les processus d'un utilisateur.
# kill -9 `lsof -t -u bicqueletjl`
Il peut être utile de compter le nombre de connection ouverte à un moment donné afin d'adapter les paramêtres du système.
Voici une manière de faire.
#lsof -i -a -c ssh |wc -l lsof: WARNING: compiled for AIX version 6.1.0.0; this is 7.1.0.0. 138