====== lsof - lister les fichiers ouverts ======
* Objet : commande listant les fichiers ouverts ainsi que leurs programmes ou utilisateurs liés. lsof pour "list open files"
* Niveau requis : {{tag>débutant avisé}}
* Commentaires : Très pratique pour résoudre des problèmes.
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
* Suivi : {{tag>à-tester à-placer}}
* Création par [[user>Switch]] le 28/06/2013
* Testé par <...> le <...>
* Commentaires sur le forum : [[https://debian-facile.org/topic-7089-wiki-lsof-page-1.html | C'est ici.]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
===== Introduction =====
lsof est une commande très utile pour retrouver quel utilisateur ou quel programme utilise quels fichiers.
Or dans linux , "tout est fichier" ( périphériques, dossiers, ... et même les "sockets" des connexions réseau.
Cet outil permet donc de facilement surveiller les activités d'un programme : qui l'utilise, quels fichiers utilise-t-il, utilise-t-il le réseau etc...
===== Installation =====
apt-get update && apt-get install lsof
.
===== Utilisation =====
==== Options de lsof : ====
lsof --help
affiche un bref résumé des options:
lsof 4.86
latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
-?|-h list help -a AND selections (OR) -b avoid kernel blocks
-c c cmd c ^c /c/[bix] +c w COMMAND width (9) +d s dir s files
-d s select by FD set +D D dir D tree *SLOW?* +|-e s exempt s *RISKY*
-i select IPv[46] files -K list tasKs -l list UID numbers
-n no host names -N select NFS files -o list file offset
-O no overhead *RISKY* -P no port names -R list paRent PID
-s list file size -t terse listing -T disable TCP/TPI info
-U select Unix socket -v list version info -V verbose search
+|-w Warnings (+) -X skip TCP&UDP* files -- end option scan
+f|-f +filesystem or -file names +|-f[gG] flaGs
-F [f] select fields; -F? for help
+|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
+m [m] use|create mount supplement
+|-M portMap registration (-) -o o o 0t offset digits (8)
-p s exclude(^)|select PIDs -S [t] t second stat timeout (15)
-T qs TCP/TPI Q,St (s) info
-g [s] exclude(^)|select and print process group IDs
-i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
+|-r [t[m]] repeat every t seconds (15); + until no files, - forever.
An optional suffix to t is m; m must separate t from and
is an strftime(3) format for the marker line.
-s p:s exclude(^)|select protocol (p = TCP|UDP) states by name(s).
-u s exclude(^)|select login|UID set s
-x [fl] cross over +d|+D File systems or symbolic Links
names select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.
Manuel complet :
man lsof
ou version française : [[http://www.delafond.org/traducmanfr/man/man8/lsof.8.html|ici]]
==== l'affichage ====
Appelé seule, lsof liste tous les fichiers ouverts appartenant à tous les processus actifs:
lsof
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 254,0 4096 2 /
init 1 root rtd DIR 254,0 4096 2 /
init 1 root txt REG 254,0 35216 4522 /sbin/init
[...]
lsof 3378 root 6r FIFO 0,8 0t0 12855 pipe
lsof 3379 root cwd DIR 254,2 4096 129537 /home/debi1
lsof 3379 root rtd DIR 254,0 4096 2 /
lsof 3379 root txt REG 254,0 161852 31033 /usr/bin/lsof
ou
| affiché par lsof | correspond à |
| COMMAND | le processus utilisant ce fichier |
| PID | numéro identifiant du processus |
| TID | numéro identifiant de la tâche |
| USER | utilisateur |
| FD | (File Descriptor) REG=fichier régulier , DIR=Dossier... |
| NAME | nom du fichier ouvert |
==== Exemples ====
=== Fichier ouverts par l'utilisateur "toto" ===
lsof -u toto
=== Savoir qui utilise les fichiers d'un répertoire ===
lsof +D /tmp
=== Pour lister tous les fichiers ouverts sur le périphérique /dev/hd4 ===
(pratique pour trouver le fichier encore ouvert sur une partition qui ne peut donc pas être démontée):
lsof /dev/hd4
===Trouver la liste des fichiers ouverts par un processus :===
lsof -p PID
=== Afficher la liste de toutes les connexions réseaux : ===
lsof -i
===Trouver le processus qui écoute sur le port 80 :===
sudo lsof -nP -i tcp:80 | grep LISTEN
==== lsof pour repérer les processus fantômes qui mangent l'espace disque ! ====
Dans un cas, ou votre disque dur se remplissait trop vite, vous avez rapidement supprimé "à la sauvage" des fichiers qui grossissaient ( ex : fichiers logs, comme .xession-errors ); mais étrangement, l'espace disque ne semble pas libéré ! Il faut vérifier si des processus ont gardé ouvert ces fichiers, qui ont été supprimés. Ces processus deviennent des processus fantômes.
lsof +L1
D'après le manuel : « +L1 » will select open files that have been unlinked
Les processus qui n’ont pas libérés les fichiers supprimés sont identifiés avec l’argument (deleted) en fin de ligne.
Pour libérer de l’espace, il faut soit redémarrer le processus si c’est un démon ou le tuer.
Pour plus de détails : https://memo-linux.com/linux-gestion-des-processus-qui-ne-liberent-pas-de-lespace-disque/
===== Voir =====
* [[http://www.delafond.org/traducmanfr/man/man8/lsof.8.html|Manuel de lsof (FR)]]
* [[doc:systeme:infos-systeme | Obtenir des informations sur son système]]
* [[https://memo-linux.com/linux-gestion-des-processus-qui-ne-liberent-pas-de-lespace-disque/|Linux : gestion des processus, qui ne libèrent pas de l’espace disque]]