La commande lsof est une commande de base disponible sur toutes les distributions Linux.
Elle correspond à ls (lister) et open files soit donc la commande pour lister les fichiers ouverts. Fondamentalement, elle donne les informations pour trouver les fichiers ouverts et par quel processus.
Lorsque vous utilisez la commande lsof, elle énumère tous les fichiers ouverts dans le système et les affiche dans la sortie du terminal
L’utilitaire n’énumère pas que les fichiers du disque, mais aussi les répertoires, les fichiers de bloc, les librairies partagées, les sockets réseaux, les points de montages, fichiers NFS et bien d’autres.
On peut la combiner avec la commande Grep pour chercher des fichiers spécifiques.
Dans ce tutoriel, je vous montre comment utiliser la commande lsof avec de nombreux exemples.
Table des matières
- 1 Comment utiliser la commande lsof
- 2 lsof : utilisations et exemples
- 2.1 Comment voir les processus qui ont ouvert un fichier
- 2.2 Comment lister les fichiers ouverts par un processus
- 2.3 Comment voir tous les fichiers ouverts dans un répertoire
- 2.4 Voir les fichiers ouverts par un utilisateur
- 2.5 Trouver les fichiers ouverts par un utilisateur et une commande ou un processus
- 2.6 Lister les connexions réseaux et ports ouverts
- 2.7 Comment lister les fichiers ouverts d’un processus parent et enfant (récursif)
- 2.8 Comment utiliser l’exclusion et négation avec lsof
- 2.9 Comment lister ou exclure les librairies de la sortie lsof (colonne FD)
- 2.10 Comment lister les unix socket avec lsof
- 2.11 Comment afficher le PID du processus qui ouvre un fichier ou répertoire
- 2.12 Rafraîchir automatiquement l’affichage
- 2.13 Comment tuer le processus qui ouvre un fichier ou répertoire
- 3 Liens
Comment utiliser la commande lsof
Linux / Unix considérons tout comme fichier et maintenance dossier. Donc, “fichiers ou fichier” est très important dans Linux / Unix. Tout en travaillant dans le système Linux / Unix, plusieurs fichiers et dossiers sont utilisés, certains d’entre eux seraient visibles et certains non.
lsof [option][user name]
lsof peut lister les fichiers ouverts provenant de processus système.
Il convient donc de l’utiliser avec sudo pour obtenir les permissions, sinon un message opendir: Permission denied s’affiche.
Les colonnes de lsof
- Command : Nom de la commande associée au processus qui a ouvert le fichier
- PID : Numéro d’identification de processus du processus qui a ouvert le fichier
- TID (Task/Thread Identification number) : Une colonne vierge signifie que ce n’est pas une tâche; C’est un processus.
- User : ID utilisateur ou nom de l’utilisateur à qui le processus appartient, ou l’ID utilisateur ou la connexion de la personne qui possède le répertoire dans /proc où lsof trouve des informations sur le processus.
- FD : Affiche le descripteur de fichier du fichier. Les descripteurs de fichiers sont décrits ci-dessous
- Type : Type de nœud associé au fichier. Les types de notes sont décrits ci-dessous
- Device : Contient les numéros de périphérique, séparés par des virgules, pour un fichier spécial de caractère, bloquez un fichier spécial, régulier, répertoire ou NFS ou une adresse de référence du noyau identifiant le fichier. Il peut également montrer l’adresse de base ou le nom du périphérique d’un dispositif de prise Linux AX.25
- Size/Off : Affiche la taille du fichier ou le décalage de fichier en octets
- Node : Affiche le numéro du nœud d’un fichier local ou le numéro d’inode d’un fichier NFS dans le type d’hôte du serveur ou de protocole Internet. Il peut afficher STR pour un flux ou l’IRQ ou le numéro d’inode d’un dispositif de prise Linux AX.25
- Name : Indique le nom du point de montage et du système de fichiers sur lequel réside le fichier
FD (file descriptor) donne une description du fichier, voici les plus communs :
- cwd (Current Working Directory) – Repertoire de travail courant
- txt (Text files) – Fichiers Texte
- mem (Memory mapped file) – Fichier mappé en mémoire
- mmap (Memory mapped device) – Périphérique mappé en mémoire
- NUMBER – Le descripteur de fichier réel. Il dispose également d’informations sur la permission du fichier qu’il est ouvert dans.
TYPE correspond au type de fichier :
- REG Regular file – Fichier régulier
- DIR Directory – Répertoire
- CHR Character special file – Fichier avec caractère spécial
- FIFO First In First Out
lsof : utilisations et exemples
Comment voir les processus qui ont ouvert un fichier
Pour visualiser les processus qui ouvre un fichier spécifique, utilisez la commande lsof suivi par le chemin du fichier :
lsof <chemin_fichier>
Par exemple pour savoir ce qui ouvre le fichier /var/log/messages :
sudo lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 594 root 11w REG 8,1 59087 112200030 /var/log/messages
Comment lister les fichiers ouverts par un processus
L’option -c donne la possibilité de lister les fichiers ouvert d’un processus en spécifiant le nom de la commande.
sudo lsof -c <commande processus>
Par exemple pour lister les fichiers ouverts par le processus SSH et init :
sudo lsof -c ssh -c init
Mais on peut aussi utiliser l’option -p en spécifiant le PID du processus :
lsof -p <pid>
Comment voir tous les fichiers ouverts dans un répertoire
Si vous vous demandez lequel des fichiers ont été ouverts dans un certain répertoire, vous pouvez utiliser la commande lsof avec option +D.
sudo lsof +D <chemin_fichier>
Par exemple pour lister tous les fichiers ouverts dans le répertoire /var/log/ :
sudo lsof +D /var/log/
Voir les fichiers ouverts par un utilisateur
Il est aussi utile de pouvoir visualiser l’intégralité des fichiers ouverts par un utilisateur.
Cela est possible avec l’option -u :
lsof -u <nom_utilisateur>
Par exemple pour lister les fichiers ouverts par l’utilisateur debian :
lsof -u debian
L’option -u prend aussi plusieurs utilisateurs en les séparant par des virgules :
lsof -u utilisateur1, utilisateur2
Trouver les fichiers ouverts par un utilisateur et une commande ou un processus
Vous pouvez combiner des options telles que l’utilisateur et la commande et un processus à l’aide de l’option -a.
Cela fonctionne comme un opérateur AND. Cela vous donne un filtre supplémentaire pour essayer de réduire les résultats de recherche.
Voici la syntaxe :
lsof -a -u <nom utilisateur> -c <nom commande>
Par exemple pour lister les fichiers ouverts par la commande ssh pour l’utilisateur debian :
lsof -a -u debian -c ssh
Lister les connexions réseaux et ports ouverts
Vous pouvez également utiliser la commande LSOF pour trouver des ports ouverts ou pour rechercher quel processus utilise un port.
sudo lsof -i
Pour lister toutes les connexions TCP avec lsof :
sudo lsof -i tcp
Pour lister les connexions UDP :
sudo lsof -i udp
De plus, on peut filtrer la liste des connexions réseaux par le processus SSH :
lsof -i -a -c ssh
Et si vous souhaitez spécifier le PID, utilisez l’option -p :
sudo lsof -i -a -p 606
Enfin pour lister les connexions sur un port réseau spécifique ainsi que les ports en écoute (port ouvert) :
sudo lsof -i :<numéro port>
Par exemple pour lister les connexions SSH et vérifier si le port 22 est ouvert et en écoute :
sudo lsof -i :22
Notez qu’un intervalle de ports réseau est possible :
sudo lsof -i :0-1024
Pour lister les connexions réseaux sur Linux, vous pouvez utiliser la commande netstat :
Comment lister les fichiers ouverts d’un processus parent et enfant (récursif)
Il existe un grand nombre de processus dans un système qui ouvrent beaucoup de fichiers pour leur fonctionnement.
Il peut y avoir de nombreux processus d’enfants d’un processus et ce processus peut également être qualifié de processus parent.
Pour connaître la liste des fichiers ouverts par la commande ID de processus parent, la commande lsof est utilisée avec l’option -R.
lsof -R
Comment utiliser l’exclusion et négation avec lsof
Vous pouvez aussi exclure des processus, utilisateurs et autres en utilisant l’opérateur ^.
L’opérateur est à placer devant l’élément à exclure.
Par exemple pour lister les fichiers ouverts en excluant ceux de l’utilisateur root et www-data :
lsof -u ^root,^www-data
sudo lsof +D /home -u ^debian
Comment lister ou exclure les librairies de la sortie lsof (colonne FD)
L’option -d permet de cibler sur le FD (File Descriptor).
Vous pouvez donc lister que les librairies, commandes, répertoires, etc.
Par exemple pour ne lister que les librairies ouvertes soit donc du type mem :
sudo lsof -d mem
Pour lister les fichiers ouverts qui ne sont pas des librairies et qui n’appartiennent pas à l’utilisateur root ou www-data :
sudo lsof -u ^root,^www-data -d ^mem -a
Enfin on peut spécifier plusieurs FD, par exemple pour lister les commandes et texte.
Cela fait ressortir une bonne partie des commandes exécutées mais autant utiliser top dans ce cas :
sudo lsof -d txt,cwd
Comment lister les unix socket avec lsof
Comme les sockets utilisent des fichiers descripteurs (comme la plupart des ressources sur Linux), vous pouvez aussi utiliser la commande lsof pour lister les unix domain socket.
Pour cela, on utilise l’option +E comme ceci :
lsof +E -aU
Comment afficher le PID du processus qui ouvre un fichier ou répertoire
Pour voir les ID de processus des processus qui ont ouvert un fichier particulier, utilisez l’option -t et fournissez le nom du fichier sur la ligne de commande.
Par exemple pour obtenir le PID du processus qui ouvre le fichier /var/log/messages :
sudo lsof -t /var/log/messages
Pour lister les PID des processus qui ouvre le dossier /var/log :
sudo lsof -t +D /var/log/
Rafraîchir automatiquement l’affichage
lsof possède aussi une option pour rafraichir automatiquement la liste des fichiers ouvert grâce à l’option -r ou +r.
Indiquez le délai de rafraichissement en seconde.
Par exemple pour lister les fichiers ouverts par le processus SSH pour l’utilisation Debian en rafraichissant la liste toutes les 5 secondes :
sudo lsof -u debian -c ssh -a -r5
Comment tuer le processus qui ouvre un fichier ou répertoire
Vous pouvez combiner la commande Kill avec lsof et son option -t pour demander à tuer les processus qui ouvre un fichier spécifique.
kill -9 `lsof -t /repertoire/fichier`
Liens
- Comment chercher un fichier sur Linux
- Commande find Linux : Exemples d’utilisation pour rechercher des fichiers
- Les commandes Linux réseaux
- Liste de toutes les commandes Linux
- Copier ou déplacer un fichier sur Linux
- La commande cp de Linux : Exemples d’utilisation
- Copier des fichiers ou répertoire dans un terminal sur Linux