• Assurez la sécurité des applications de la bonne manière! Détectez, protégez, surveillez, accélérez et plus encore…
  • lsof est un utilitaire puissant disponible pour les systèmes Linux et Unix qui signifie littéralement «liste (de) fichiers ouverts».

    Sa fonction principale est de récupérer des détails sur différents types de fichiers ouverts par différents processus en cours d'exécution. Ces fichiers peuvent être des fichiers normaux, des répertoires, des fichiers blocs, des sockets réseau, des canaux nommés, etc.

    Avec lsof, vous pouvez trouver différents processus verrouillant un fichier ou un répertoire, un processus écoutant sur un port, la liste des processus d'un utilisateur, quels fichiers un processus verrouille. Nous allons d'abord couvrir son installation et puis quelques communs exemples d'utilisation dans cet article.

    Installation de lsof

    lsof n'est pas disponible par défaut sur la plupart Distributions Linux mais peut être facilement installé. Utilisez la commande ci-dessous pour installer lsof:

    CentOS / RHEL / Fedora :

    $ sudo yum install lsof

    pour CentOS / RHEL 8, vous pouvez utiliser le DNF commander

    $ sudo dnf install lsof

    Ubuntu/Debian :

    $ sudo apt install lsof

    Obtenir de l'aide

    Vous pouvez obtenir une liste résumée des options prises en charge par lsof en utilisant -? or -h drapeau.

    $ lsof -?
    lsof 4.87
     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]] [-Z [Z]] [--] [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 (threads)    -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     -Z Z  context [Z]
      -- 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.
    $

    Pour vérifier les informations détaillées sur la version installée, utilisez:

    $ lsof -v
    lsof version information:
        revision: 4.87
        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
        constructed: Tue Oct 30 16:28:19 UTC 2018
        constructed by and on: [email protected]
        compiler: cc
        compiler version: 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
        compiler flags: -DLINUXV=310000 -DGLIBCV=217 -DHASIPv6 -DHASSELINUX -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DHAS_STRFTIME -DLSOF_VSTR="3.10.0" -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic
        loader flags: -L./lib -llsof  -lselinux
        system info: Linux x86-01.bsys.centos.org 3.10.0-693.17.1.el7.x86_64 #1 SMP Thu Jan 25 20:13:58 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
        Anyone can list all files.
        /dev warnings are disabled.
        Kernel ID check is disabled.
    $

    Champs de sortie

    La structure du champ de sortie lsof par défaut est comme:

    COMMAND    PID  TID         USER   FD      TYPE DEVICE  SIZE/OFF     NODE NAME

    La plupart de ces champs sont explicites, sauf pour  FD et TYPE domaines qui sont quelque peu uniques à lsof et seront explorés brièvement.

    FD fait référence au numéro de descripteur de fichier du fichier et TYPE fait référence au type de nœud associé au fichier. Nous allons maintenant examiner les valeurs prises en charge pour ces deux champs.

    FD Le champ peut contenir les valeurs suivantes:

    cwd  current working directory;
    Lnn  library references (AIX);
    err  FD information error (see NAME column);
    jld  jail directory (FreeBSD);
    ltx  shared library text (code and data);
    Mxx  hex memory-mapped type number xx.
    m86  DOS Merge mapped file;
    mem  memory-mapped file;
    mmap memory-mapped device;
    pd   parent directory;
    rtd  root directory;
    tr   kernel trace file (OpenBSD);
    txt  program text (code and data);
    v86  VP/ix mapped file;

    FD est suivi d'un ou plusieurs caractères décrivant le mode sous lequel le fichier est ouvert:

    r for read access;
    w for write access;
    u for read and write access;
    space if mode unknown and no lock character follows;
    `-' if mode unknown and lock character follows.

    Caractère de mode pour FD puis plus loin peut être suivi par LOCK caractère dont la description est donnée ci-dessous:

    N for a Solaris NFS lock of unknown type;
    r for read lock on part of the file;
    R for a read lock on the entire file;
    w for a write lock on part of the file;
    W for a write lock on the entire file;
    u for a read and write lock of any length;
    U for a lock of unknown type;
    x for an SCO OpenServer Xenix lock on part of the file;
    X for an SCO OpenServer Xenix lock on the entire file;
    space if there is no lock.

    De même, le TYPE le champ peut contenir GDIR, GREG, VDIR, VREG, IPV4, IPV6 etc. Pour obtenir une liste complète des TYPE dans lsof, renvoyez son man Venez regardez des photos heureuses et inspirantes.

    Usage courant

    Vous trouverez ci-dessous quelques-unes des utilisations courantes de la commande lsof. La commande fonctionne sur les variantes Linux et tous les arguments de ligne de commande répertoriés ci-dessous doivent fonctionner sur toutes les plates-formes, en considérant les mêmes lsof version.

    Lister tous les fichiers ouverts

    L'exécution de lsof sans aucune option listera tous les fichiers actuellement ouverts par les processus actifs.

    $ sudo lsof | less

    Sortie :

    COMMAND    PID  TID         USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
    systemd      1              root  cwd       DIR              253,0       224         64 /
    systemd      1              root  rtd       DIR              253,0       224         64 /
    systemd      1              root  txt       REG              253,0   1632776     308905 /usr/lib/systemd/systemd
    systemd      1              root  mem       REG              253,0     20064      16063 /usr/lib64/libuuid.so.1.3.0
    systemd      1              root  mem       REG              253,0    265576     186547 /usr/lib64/libblkid.so.1.1.0
    systemd      1              root  mem       REG              253,0     90248      16051 /usr/lib64/libz.so.1.2.7
    systemd      1              root  mem       REG              253,0    157424      16059 /usr/lib64/liblzma.so.5.2.2
    systemd      1              root  mem       REG              253,0     23968      59696 /usr/lib64/libcap-ng.so.0.0.0
    systemd      1              root  mem       REG              253,0     19896      59686 /usr/lib64/libattr.so.1.1.0
    systemd      1              root  mem       REG              253,0     19248      15679 /usr/lib64/libdl-2.17.so
    systemd      1              root  mem       REG              253,0    402384      16039 /usr/lib64/libpcre.so.1.2.0
    systemd      1              root  mem       REG              253,0   2156272      15673 /usr/lib64/libc-2.17.so
    systemd      1              root  mem       REG              253,0    142144      15699 /usr/lib64/libpthread-2.17.so
    systemd      1              root  mem       REG              253,0     88720         84 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
    systemd      1              root  mem       REG              253,0     43712      15703 /usr/lib64/librt-2.17.so
    systemd      1              root  mem       REG              253,0    277808     229793 /usr/lib64/libmount.so.1.1.0
    systemd      1              root  mem       REG              253,0     91800      76005 /usr/lib64/libkmod.so.2.2.10
    systemd      1              root  mem       REG              253,0    127184      59698 /usr/lib64/libaudit.so.1.0.0
    systemd      1              root  mem       REG              253,0     61680     229827 /usr/lib64/libpam.so.0.83.1
    systemd      1              root  mem       REG              253,0     20048      59690 /usr/lib64/libcap.so.2.22
    systemd      1              root  mem       REG              253,0    155744      16048 /usr/lib64/libselinux.so.1

    Liste par nom de fichier

    Pour lister tous les processus qui ont ouvert un fichier spécifique, nous pouvons spécifier file-name comme argument:

    $ sudo lsof {file-name}

    Sortie :

    $ sudo lsof /var/log/messages
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
    rsyslogd 1000 root    6w   REG  253,0      205 16777741 /var/log/messages
    $

    Répertorier les fichiers ouverts par nom d'utilisateur

    Dans un système multi-utilisateur, vous pouvez filtrer la liste des fichiers par des processus spécifiques appartenant à l'utilisateur, en utilisant -u drapeau suivi de username.

    $ sudo lsof -u {username}

    Sortie :

    $ sudo lsof -u abhisheknair
    COMMAND  PID         USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
    sshd    1239 abhisheknair  cwd    DIR              253,0       224       64 /
    sshd    1239 abhisheknair  rtd    DIR              253,0       224       64 /
    sshd    1239 abhisheknair  txt    REG              253,0    852856   425229 /usr/sbin/sshd
    sshd    1239 abhisheknair  mem    REG              253,0     15488 17204727 /usr/lib64/security/pam_lastlog.so
    sshd    1239 abhisheknair  mem    REG              253,0     15648   229829 /usr/lib64/libpam_misc.so.0.82.0
    sshd    1239 abhisheknair  mem    REG              253,0    309248 17303270 /usr/lib64/security/pam_systemd.so
    sshd    1239 abhisheknair  mem    REG              253,0     19616 17204728 /usr/lib64/security/pam_limits.so
    sshd    1239 abhisheknair  mem    REG              253,0     11168 17204726 /usr/lib64/security/pam_keyinit.so
    sshd    1239 abhisheknair  mem    REG              253,0     40800 17204735 /usr/lib64/security/pam_namespace.so

    Sinon, si vous souhaitez répertorier les fichiers ouverts par n'importe quel utilisateur sauf un utilisateur spécifique, utilisez -u drapeau suivi de ^username comme indiqué ci-dessous:

    $ sudo lsof -u ^{username}

    Sortie :

    $ sudo lsof -u ^root
    COMMAND    PID TID         USER   FD      TYPE             DEVICE  SIZE/OFF     NODE NAME
    dbus-daem  630             dbus  cwd       DIR              253,0       224       64 /
    dbus-daem  630             dbus  rtd       DIR              253,0       224       64 /
    dbus-daem  630             dbus  txt       REG              253,0    223232 50590133 /usr/bin/dbus-daemon
    dbus-daem  630             dbus  mem       REG              253,0     61560    15691 /usr/lib64/libnss_files-2.17.so
    dbus-daem  630             dbus  mem       REG              253,0     68192    59651 /usr/lib64/libbz2.so.1.0.6
    dbus-daem  630             dbus  mem       REG              253,0     90248    16051 /usr/lib64/libz.so.1.2.7
    dbus-daem  630             dbus  mem       REG              253,0     99944    59680 /usr/lib64/libelf-0.176.so
    dbus-daem  630             dbus  mem       REG              253,0     19896    59686 /usr/lib64/libattr.so.1.1.0
    dbus-daem  630             dbus  mem       REG              253,0    402384    16039 /usr/lib64/libpcre.so.1.2.0

    Une façon d'utiliser lsof est pour les situations où vous voulez tuer rapidement tous les processus d'un utilisateur spécifique en une seule commande. Nous pouvons combiner kill lsof comme indiqué dans l'exemple ci-dessous pour y parvenir (exécutez en tant que root):

    # kill -9 `lsof -t -u {username}`

    Comme vu dans l'exemple ci-dessus, nous pouvons utiliser -t flag pour filtrer toutes les autres informations sauf process-id. Cela peut être utile dans l'automatisation et la création de scripts, comme indiqué dans l'exemple précédent en le combinant avec kill commander.

    $ sudo lsof -t -u {username}

    Sortie :

    $ sudo lsof -t -u abhisheknair
    1239
    1240
    $

    Avec lsof, nous pouvons combiner plusieurs arguments en utilisant OR logique comme indiqué ci-dessous:

    $ sudo lsof -u {username} -c {process-name}

    Sortie :

    $ sudo lsof -u ftpuser -c bash
    COMMAND  PID         USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
    bash    1240 abhisheknair  cwd    DIR  253,0       120   510681 /home/abhisheknair
    bash    1240 abhisheknair  rtd    DIR  253,0       224       64 /
    bash    1240 abhisheknair  txt    REG  253,0    964536 50548532 /usr/bin/bash
    bash    1240 abhisheknair  mem    REG  253,0 106172832 50548523 /usr/lib/locale/locale-archive
    bash    1240 abhisheknair  mem    REG  253,0     61560    15691 /usr/lib64/libnss_files-2.17.so
    bash    1240 abhisheknair  mem    REG  253,0   2156272    15673 /usr/lib64/libc-2.17.so
    bash    1240 abhisheknair  mem    REG  253,0     19248    15679 /usr/lib64/libdl-2.17.so
    bash    1240 abhisheknair  mem    REG  253,0    174576    16034 /usr/lib64/libtinfo.so.5.9
    bash    1240 abhisheknair  mem    REG  253,0    163312    15666 /usr/lib64/ld-2.17.so
    bash    1240 abhisheknair  mem    REG  253,0     26970    16003 /usr/lib64/gconv/gconv-modules.cache
    bash    1240 abhisheknair    0u   CHR  136,0       0t0        3 /dev/pts/0
    bash    1240 abhisheknair    1u   CHR  136,0       0t0        3 /dev/pts/0
    bash    1240 abhisheknair    2u   CHR  136,0       0t0        3 /dev/pts/0
    bash    1240 abhisheknair  255u   CHR  136,0       0t0        3 /dev/pts/0
    bash    1425      ftpuser  cwd    DIR  253,0       182 33578272 /home/ftpuser
    bash    1425      ftpuser  rtd    DIR  253,0       224       64 /
    bash    1425      ftpuser  txt    REG  253,0    964536 50548532 /usr/bin/bash
    bash    1425      ftpuser  mem    REG  253,0 106172832 50548523 /usr/lib/locale/locale-archive
    bash    1425      ftpuser  mem    REG  253,0     61560    15691 /usr/lib64/libnss_files-2.17.so
    bash    1425      ftpuser  mem    REG  253,0   2156272    15673 /usr/lib64/libc-2.17.so
    bash    1425      ftpuser  mem    REG  253,0     19248    15679 /usr/lib64/libdl-2.17.so
    bash    1425      ftpuser  mem    REG  253,0    174576    16034 /usr/lib64/libtinfo.so.5.9
    bash    1425      ftpuser  mem    REG  253,0    163312    15666 /usr/lib64/ld-2.17.so
    bash    1425      ftpuser  mem    REG  253,0     26970    16003 /usr/lib64/gconv/gconv-modules.cache
    bash    1425      ftpuser    0u   CHR    4,1       0t0     1043 /dev/tty1
    bash    1425      ftpuser    1u   CHR    4,1       0t0     1043 /dev/tty1
    bash    1425      ftpuser    2u   CHR    4,1       0t0     1043 /dev/tty1
    bash    1425      ftpuser  255u   CHR    4,1       0t0     1043 /dev/tty1
    $

    Alternativement, si vous souhaitez utiliser AND utilisation de la condition logique -a drapeau.

    $ sudo lsof -u {username} -c {process-name} -a

    Sortie :

    $ sudo lsof -u ftpuser -c bash -a
    COMMAND  PID    USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
    bash    1425 ftpuser  cwd    DIR  253,0       182 33578272 /home/ftpuser
    bash    1425 ftpuser  rtd    DIR  253,0       224       64 /
    bash    1425 ftpuser  txt    REG  253,0    964536 50548532 /usr/bin/bash
    bash    1425 ftpuser  mem    REG  253,0 106172832 50548523 /usr/lib/locale/locale-archive
    bash    1425 ftpuser  mem    REG  253,0     61560    15691 /usr/lib64/libnss_files-2.17.so
    bash    1425 ftpuser  mem    REG  253,0   2156272    15673 /usr/lib64/libc-2.17.so
    bash    1425 ftpuser  mem    REG  253,0     19248    15679 /usr/lib64/libdl-2.17.so
    bash    1425 ftpuser  mem    REG  253,0    174576    16034 /usr/lib64/libtinfo.so.5.9
    bash    1425 ftpuser  mem    REG  253,0    163312    15666 /usr/lib64/ld-2.17.so
    bash    1425 ftpuser  mem    REG  253,0     26970    16003 /usr/lib64/gconv/gconv-modules.cache
    bash    1425 ftpuser    0u   CHR    4,1       0t0     1043 /dev/tty1
    bash    1425 ftpuser    1u   CHR    4,1       0t0     1043 /dev/tty1
    bash    1425 ftpuser    2u   CHR    4,1       0t0     1043 /dev/tty1
    bash    1425 ftpuser  255u   CHR    4,1       0t0     1043 /dev/tty1
    $

    Répertorier les fichiers ouverts par processus

    Nous pouvons également lister les fichiers ouverts par un processus particulier en utilisant -c option suivie du nom du processus.

    $ sudo lsof -c {process-name}

    Sortie :

    $ sudo lsof -c ssh
    COMMAND  PID         USER   FD   TYPE             DEVICE SIZE/OFF     NODE NAME
    sshd     997         root  cwd    DIR              253,0      224       64 /
    sshd     997         root  rtd    DIR              253,0      224       64 /
    sshd     997         root  txt    REG              253,0   852856   425229 /usr/sbin/sshd
    sshd     997         root  mem    REG              253,0    61560    15691 /usr/lib64/libnss_files-2.17.so
    sshd     997         root  mem    REG              253,0    68192    59651 /usr/lib64/libbz2.so.1.0.6
    sshd     997         root  mem    REG              253,0    99944    59680 /usr/lib64/libelf-0.176.so
    sshd     997         root  mem    REG              253,0    19896    59686 /usr/lib64/libattr.so.1.1.0
    sshd     997         root  mem    REG              253,0    15688    75906 /usr/lib64/libkeyutils.so.1.5
    sshd     997         root  mem    REG              253,0    67104   186525 /usr/lib64/libkrb5support.so.0.1

    Liste des fichiers ouverts par PID

    Alternativement, pour lister les fichiers ouverts par un processus mais au lieu de process-name vous souhaitez spécifier son identifiant, vous pouvez utiliser -p drapeau suivi de process-id.

    $ sudo lsof -p {process-id}

    Sortie :

    $ sudo lsof -p 663
    COMMAND   PID USER   FD      TYPE             DEVICE  SIZE/OFF     NODE NAME
    firewalld 663 root  cwd       DIR              253,0       224       64 /
    firewalld 663 root  rtd       DIR              253,0       224       64 /
    firewalld 663 root  txt       REG              253,0      7144 50491220 /usr/bin/python2.7
    firewalld 663 root  mem       REG              253,0    298828 50617647 /usr/lib64/girepository-1.0/NM-1.0.typelib
    firewalld 663 root  mem       REG              253,0    343452 50507562 /usr/lib64/girepository-1.0/Gio-2.0.typelib
    firewalld 663 root  mem       REG              253,0     12352 17202092 /usr/lib64/python2.7/lib-dynload/grpmodule.so
    firewalld 663 root  mem       REG              253,0     29184 17202105 /usr/lib64/python2.7/lib-dynload/selectmodule.so
    firewalld 663 root  mem       REG              253,0    168312   388240 /usr/lib64/libdbus-glib-1.so.2.2.2
    firewalld 663 root  mem       REG              253,0     11976 34028597 /usr/lib64/python2.7/site-packages/_dbus_glib_bindings.so
    firewalld 663 root  mem       REG              253,0    185712 50507559 /usr/lib64/girepository-1.0/GLib-2.0.typelib
    • Si vous souhaitez répertorier tous les fichiers ouverts à l'exception de ceux ouverts par un processus particulier, utilisez -p suivie par ^process-id.
    $ sudo lsof -p ^{process-id}

    Répertorier les fichiers ouverts contenant le répertoire

    Pour répertorier les processus qui ont ouvert des fichiers dans un répertoire spécifique, utilisez +D option suivie du chemin du répertoire.

    $ sudo lsof +D {path}

    Sortie :

    $ sudo lsof +D /var/log
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
    auditd     607 root    5w   REG  253,0  1065095   425227 /var/log/audit/audit.log
    firewalld  663 root    3w   REG  253,0    13817 17663786 /var/log/firewalld
    tuned      999 root    3w   REG  253,0    13395 33574994 /var/log/tuned/tuned.log
    rsyslogd  1000 root    6w   REG  253,0     4302 16777753 /var/log/cron
    rsyslogd  1000 root    7w   REG  253,0    64740 16777755 /var/log/messages
    rsyslogd  1000 root    8w   REG  253,0     5513 16787904 /var/log/secure
    rsyslogd  1000 root    9w   REG  253,0      198 16777754 /var/log/maillog
    $

    Si vous ne souhaitez pas lister de manière récursive les fichiers dans les sous-répertoires, utilisez -d drapeau suivi du chemin du répertoire.

    $ sudo lsof +d {path}

    Sortie :

    $ sudo lsof +d /var/log
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
    firewalld  663 root    3w   REG  253,0    13817 17663786 /var/log/firewalld
    rsyslogd  1000 root    6w   REG  253,0     4302 16777753 /var/log/cron
    rsyslogd  1000 root    7w   REG  253,0    64740 16777755 /var/log/messages
    rsyslogd  1000 root    8w   REG  253,0     5833 16787904 /var/log/secure
    rsyslogd  1000 root    9w   REG  253,0      198 16777754 /var/log/maillog
    $

    Mode répétition

    lsof peut être exécuté en mode répétition. En mode de répétition, lsof génère et imprime la sortie à intervalles réguliers. Encore une fois, il existe deux modes de répétition pris en charge par lsof, c'est-à-dire avec -r et +r drapeaux. Avec -r flag, lsof se répète pour s'exécuter jusqu'à ce qu'il reçoive un signal d'interruption / d'arrêt de l'utilisateur alors qu'il +r flag, le mode de répétition de lsof se terminera dès que sa sortie n'aura pas de fichiers ouverts. De plus, nous pouvons spécifier un délai avec -r or +r drapeau.

    $ sudo lsof {arguments} -r{time-interval}

    Sortie :

    $ sudo lsof -u ftpuser -c bash +D /usr/lib -a -r3
    COMMAND  PID    USER  FD   TYPE DEVICE  SIZE/OFF     NODE NAME
    bash    1425 ftpuser mem    REG  253,0 106172832 50548523 /usr/lib/locale/locale-archive
    =======
    COMMAND  PID    USER  FD   TYPE DEVICE  SIZE/OFF     NODE NAME
    bash    1425 ftpuser mem    REG  253,0 106172832 50548523 /usr/lib/locale/locale-archive
    =======
    COMMAND  PID    USER  FD   TYPE DEVICE  SIZE/OFF     NODE NAME
    bash    1425 ftpuser mem    REG  253,0 106172832 50548523 /usr/lib/locale/locale-archive
    =======

    Répertorier les fichiers ouverts avec le protocole réseau

    lsof prend en charge la liste de tout type de fichiers Linux qui inclut les sockets réseau, etc. En tant que tel, nous pouvons lister les détails des connexions réseau ouvertes en utilisant -i drapeau.

    $ sudo lsof -i

    Sortie :

    $ sudo lsof -i
    COMMAND  PID         USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    chronyd  639       chrony    5u  IPv4  14333      0t0  UDP localhost:323
    chronyd  639       chrony    6u  IPv6  14334      0t0  UDP localhost:323
    sshd     997         root    3u  IPv4  17330      0t0  TCP *:ssh (LISTEN)
    sshd     997         root    4u  IPv6  17339      0t0  TCP *:ssh (LISTEN)
    master  1229         root   13u  IPv4  18129      0t0  TCP localhost:smtp (LISTEN)
    master  1229         root   14u  IPv6  18130      0t0  TCP localhost:smtp (LISTEN)
    sshd    1235         root    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    sshd    1239 abhisheknair    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    $

    Pour répertorier toutes les connexions réseau utilisées par un process-id, vous pouvez utiliser lsof comme:

    $ sudo lsof -i -a -p {process-id}

    Sortie :

    $ sudo lsof -i -a -p 997
    COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd    997 root    3u  IPv4  17330      0t0  TCP *:ssh (LISTEN)
    sshd    997 root    4u  IPv6  17339      0t0  TCP *:ssh (LISTEN)
    $

    Ou pour lister toutes les connexions réseau utilisées par un processus spécifique, nous pouvons donner process-name comme:

    $ sudo lsof -i -a -c {process-name}

    Sortie :

    $ sudo lsof -i -a -c ssh
    COMMAND  PID         USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd     997         root    3u  IPv4  17330      0t0  TCP *:ssh (LISTEN)
    sshd     997         root    4u  IPv6  17339      0t0  TCP *:ssh (LISTEN)
    sshd    1235         root    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    sshd    1239 abhisheknair    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    $

    On peut filtrer la sortie de lsof avec -i indicateur par type de protocole réseau, c'est-à-dire TCP or UDP en spécifiant le type de protocole.

    $ sudo lsof -i {protocol}

    Sortie :

    $ sudo lsof -i tcp
    COMMAND  PID         USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd     997         root    3u  IPv4  17330      0t0  TCP *:ssh (LISTEN)
    sshd     997         root    4u  IPv6  17339      0t0  TCP *:ssh (LISTEN)
    master  1229         root   13u  IPv4  18129      0t0  TCP localhost:smtp (LISTEN)
    master  1229         root   14u  IPv6  18130      0t0  TCP localhost:smtp (LISTEN)
    sshd    1235         root    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    sshd    1239 abhisheknair    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    $

    OR

    Sortie :

    $ sudo lsof -i udp
    COMMAND PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    chronyd 639 chrony    5u  IPv4  14333      0t0  UDP localhost:323
    chronyd 639 chrony    6u  IPv6  14334      0t0  UDP localhost:323
    $

    Liste des fichiers ouverts par port

    On peut également filtrer la sortie de lsof avec -i signaler par port number en utilisant la syntaxe de commande comme ci-dessous:

    $ sudo lsof -i :{port-number}

    Sortie :

    $ sudo lsof -i :22
    COMMAND  PID         USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    sshd     997         root    3u  IPv4  17330      0t0  TCP *:ssh (LISTEN)
    sshd     997         root    4u  IPv6  17339      0t0  TCP *:ssh (LISTEN)
    sshd    1235         root    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    sshd    1239 abhisheknair    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    $

    Répertorier les fichiers ouverts par IPv4 / IPv6

    Il existe une option pour filtrer la liste des connexions réseau en la limitant à IPv4 ou IPv6. Utilisez la syntaxe de commande ci-dessous pour obtenir uniquement la liste IP v4:

    $ sudo lsof -i4

    Sortie :

    $ sudo lsof -i4
    COMMAND  PID         USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    chronyd  639       chrony    5u  IPv4  14333      0t0  UDP localhost:323
    sshd     997         root    3u  IPv4  17330      0t0  TCP *:ssh (LISTEN)
    master  1229         root   13u  IPv4  18129      0t0  TCP localhost:smtp (LISTEN)
    sshd    1235         root    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    sshd    1239 abhisheknair    3u  IPv4  18318      0t0  TCP centos7vm:ssh->192.168.1.61:23566 (ESTABLISHED)
    $

    OU pour obtenir uniquement les détails IPv6, utilisez:

    $ sudo lsof -i6

    Sortie :

    $ sudo lsof -i6
    COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    chronyd  639 chrony    6u  IPv6  14334      0t0  UDP localhost:323
    sshd     997   root    4u  IPv6  17339      0t0  TCP *:ssh (LISTEN)
    master  1229   root   14u  IPv6  18130      0t0  TCP localhost:smtp (LISTEN)
    $

    Répertorier les fichiers ouverts sur NFS

    lsof peut également lister tous les fichiers NFS actuellement ouverts par un utilisateur.

    $ sudo lsof -N -u abhisheknair -a

    Répertorier les fichiers supprimés verrouillés

    Il arrive parfois que des fichiers soient supprimés sous Linux mais soient toujours verrouillés par un ou plusieurs processus. En tant que tels, ces fichiers ne figurent pas dans la liste normale du système de fichiers en utilisant ls commande etc. mais ils consomment toujours de l'espace disque comme indiqué par df sortie, cela se produit en particulier pour les fichiers volumineux supprimés exprès pour libérer de l'espace disque sans libérer le verrouillage du processus. Vous pouvez trouver de tels processus utilisant lsof comme:

    $ sudo lsof {path} | grep deleted

    Sortie :

    $ sudo lsof / | grep deleted
    firewalld  654         root    8u   REG  253,0      4096 16777726 /tmp/#16777726 (deleted)
    tuned      968         root    8u   REG  253,0      4096 16777720 /tmp/#16777720 (deleted)
    $

    Conclusion

    lsof propose une gamme d'options pour personnaliser sa sortie en fonction de vos besoins. C'est un utilitaire utile dans le système quotidien et l'administration du réseau Tâches. La possibilité de combiner différents arguments ensemble le rend d'autant plus utile et vous permet d'obtenir facilement la sortie requise. Reportez-vous à la page de manuel lsof pour connaître tous les arguments pris en charge et leur utilisation.

    $ man lsof