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…
apt-get update && apt-get install 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<fmt>]] repeat every t seconds (15); + until no files, - forever. An optional suffix to t is m<fmt>; m must separate t from <fmt> and <fmt> 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 : ici
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 |
lsof -u toto
lsof +D /tmp
(pratique pour trouver le fichier encore ouvert sur une partition qui ne peut donc pas être démontée):
lsof /dev/hd4
lsof -p PID
lsof -i
sudo lsof -nP -i tcp:80 | grep LISTEN
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
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/