Le lsof La commande sous Linux affiche dans sa sortie des informations sur les fichiers ouverts par les processus. Dans cet article, nous discuterons de l'outil Linux lsof à l'aide de 15 exemples faciles à comprendre. Veuillez noter que tous les exemples mentionnés dans ce didacticiel ont été testés sur Ubuntu 20.04 LTS, mais ils fonctionneront également sur d'autres distributions Linux telles que Debian, Fedora et CentOS.
À propos de la commande lsof
Si vous voulez voir rapidement le nom des fichiers qui ont été ouverts par un processus particulier (ou tous les processus), la commande lsof vous permet de le faire. Un fichier ouvert peut être un fichier normal ou un répertoire, une bibliothèque, un fichier spécial ou un périphérique bloc, un fichier spécial de caractères, une référence de texte en cours d'exécution, ou même un flux ou un fichier réseau. Vous pouvez également répertorier les processus par numéro de port. Si vous n'êtes pas connecté en tant qu'utilisateur root, vous devrez peut-être ajouter "sudo" aux commandes.
Installer la commande Linux lsof
La plupart des distributions Linux sont livrées avec lsof pré-installé. S'il n'est pas encore installé sur votre système, utilisez les commandes suivantes :
Sur Ubuntu et Debian :
$ sudo apt install lsof
Sur CentOS et Fedora :
$ dnf install lsof
1. Comment lister tous les fichiers ouverts
Pour lister tous les fichiers ouverts, exécutez la commande lsof sans aucun argument :
lsof
Par exemple, voici la capture d'écran d'une partie de la sortie de la commande ci-dessus produite sur mon système :
La première colonne représente le processus tandis que la dernière colonne contient le nom du fichier. Pour plus de détails sur toutes les colonnes, rendez-vous sur la page de manuel de la commande.
2. Comment lister les fichiers ouverts par des processus appartenant à un utilisateur spécifique
L'outil vous permet également de lister les fichiers ouverts par des processus appartenant à un utilisateur spécifique. Cette fonctionnalité est accessible en utilisant le -u option de ligne de commande.
lsof -u [nom d'utilisateur]
Par exemple :
lsof -u administrateur
3. Comment répertorier les fichiers en fonction de leur adresse Internet
L'outil vous permet de répertorier les fichiers en fonction de leur adresse Internet. Cela peut être fait en utilisant le -i option de ligne de commande. Par exemple, si vous le souhaitez, vous pouvez afficher séparément les fichiers IPv4 et IPv6. Pour IPv4, exécutez la commande suivante :
lsof -i 4
Par exemple :
De même, pour IPv6, exécutez la commande suivante :
lsof -i 6
Par exemple :
lsof -i 6
4. Comment lister tous les fichiers par nom d'application
L'option de ligne de commande -c vous permet d'obtenir tous les fichiers ouverts par nom de programme.
$ lsof -c apache
Vous n'êtes pas obligé d'utiliser le nom complet du programme car tous les programmes qui commencent par le mot « apache » sont affichés. Donc dans notre cas, il listera tous les processus de l'application 'apache2'.
L'option -c n'est en fait qu'un raccourci pour les deux commandes :
$ lsof | grep apache
5. Comment lister les fichiers spécifiques à un processus
L'outil vous permet également d'afficher les fichiers ouverts en fonction des numéros d'identification de processus (PID). Cela peut être fait en utilisant le -p option de ligne de commande.
lsof -p [PID]
Par exemple :
lsof -p 856
Pour continuer, vous pouvez également exclure des PID spécifiques dans la sortie en ajoutant le ^ symbole devant eux. Pour exclure un PID spécifique, vous pouvez exécuter la commande suivante :
lsof -p [^PID]
Par exemple :
lsof -p ^1
Comme vous pouvez le voir dans la capture d'écran ci-dessus, le processus avec l'identifiant 1 est exclu de la liste.
6. Comment répertorier les ID des processus qui ont ouvert un fichier particulier
L'outil vous permet de répertorier les ID des processus qui ont ouvert un fichier particulier. Cela peut être fait en utilisant le -t option de ligne de commande.
$ lsof -t [file-name]
Par exemple :
$ lsof -t /usr/lib/x86_64-linux-gnu/libpcre2-8.so.0.9.0
7. Comment lister tous les fichiers ouverts dans un répertoire
Si vous le souhaitez, vous pouvez également faire en sorte que lsof recherche toutes les instances ouvertes d'un répertoire (y compris tous les fichiers et répertoires qu'il contient). Cette fonctionnalité est accessible en utilisant le +D option de ligne de commande.
$ lsof +D [chemin-répertoire]
Par exemple :
$ lsof +D /usr/lib/locale
8. Comment répertorier tous les fichiers réseau Internet et x.25 (HP-UX)
Ceci est possible en utilisant le -i option de ligne de commande que nous avons décrite précédemment. Juste que vous devez l'utiliser sans aucun argument.
$ lsof -i
9. Découvrez quel programme utilise un port
Le commutateur -i de la commande vous permet de trouver un processus ou une application qui écoute un numéro de port spécifique. Dans l'exemple ci-dessous, j'ai vérifié quel programme utilise le port 80.
$ lsof -i :80
Au lieu du numéro de port, vous pouvez utiliser le nom du service comme indiqué dans le /etc/services dossier. Exemple pour vérifier quelle application écoute sur le port HTTPS (443) :
$ lsof -i :https
Résultat :
Les exemples ci-dessus vérifieront à la fois TCP et UDP. Si vous souhaitez vérifier TCP ou UDP uniquement, ajoutez le mot « tcp » ou « udp ». Par exemple, quelle application utilise le port 25 TCP :
$ lsof -i tcp:25
ou quelle application utilise le port UDP 53 :
$ lsof -i udp:53
10. Comment répertorier les fichiers ouverts en fonction de la plage de ports
L'utilitaire vous permet également de répertorier les fichiers ouverts en fonction d'un port ou d'une plage de ports spécifique. Par exemple, pour afficher les fichiers ouverts pour le port 1-1024, utilisez la commande suivante :
$ lsof -i :1-1024
11. Comment répertorier les fichiers ouverts en fonction du type de connexion (TCP ou UDP)
L'outil vous permet de lister les fichiers en fonction du type de connexion. Par exemple, pour les fichiers spécifiques à UDP, utilisez la commande suivante :
$ lsof -i udp
De même, vous pouvez faire en sorte que lsof affiche des fichiers spécifiques à TCP.
12. Comment faire de la liste lsof le PID parent des processus
Il existe également une option qui oblige lsof à répertorier le numéro d'identification du processus parent (PPID) dans la sortie. L'option en question est -R .
$ lsof -R
Pour obtenir des informations sur le PPID d'un PID spécifique, vous pouvez exécuter la commande suivante :
$ lsof -p [PID] -R
Par exemple :
$ lsof -p 3 -R
13. Comment trouver l'activité du réseau par utilisateur
En utilisant une combinaison des options de ligne de commande -i et -u, nous pouvons rechercher toutes les connexions réseau d'un utilisateur Linux. Cela peut être utile si vous inspectez un système qui pourrait avoir été piraté. Dans cet exemple, nous vérifions toute l'activité réseau de l'utilisateur www-data :
$ lsof -a -i -u www-data
14. Lister tous les fichiers mappés en mémoire
Cette commande répertorie tous les fichiers mappés en mémoire sous Linux.
$ lsof -d mem
15. Lister tous les fichiers NFS
L'option -N affiche une liste de tous les fichiers NFS (Network File System).
$lsof -N
Conclusion
Bien que lsof offre une pléthore d'options, celles dont nous avons discuté ici devraient suffire à vous aider à démarrer. Une fois que vous avez fini de vous entraîner, rendez-vous sur la page de manuel de l'outil pour en savoir plus. Oh, et au cas où vous auriez des doutes ou des questions, laissez un commentaire ci-dessous.