Commande lsof de Linux

, Author

L’outil de commande « lsof » de Linux est l’un des nombreux outils intégrés qui est super utile pour vérifier la « liste des fichiers ouverts ». Oui, le terme « lsof » est l’abréviation de la tâche.

Il y a un certain nombre de processus qui tournent dans le système tout le temps, accédant à différents fichiers du système. Ces fichiers peuvent être des fichiers disque, des scripts, des sockets réseau, des périphériques, des pipes nommés et autres. En utilisant « lsof », il est possible d’effectuer beaucoup de choses, comme le débogage. C’est aussi très utile pour les administrateurs système pour savoir quels fichiers sont accédés par quels processus. L’un des scénarios les plus utiles que j’ai trouvé est lorsque vous êtes sur le point de démonter un système de fichiers mais qu’il est toujours accédé.

Sans plus attendre, commençons avec « lsof » ! Je suppose que votre système UNIX/Linux actuel a déjà « lsof » installé.

which lsof

Cela rapporte le chemin complet de la commande, dans ce cas, « lsof ».

Version de « lsof »
lsof -v

Cela rapporte des informations approfondies sur la version de « lsof », y compris la date de construction du binaire, la version du compilateur, les drapeaux du compilateur et autres.

Utilisation de base de « lsof »

Exécutez « lsof » par lui-même.

lsof

Cela rapporte une GRANDE liste de tous les fichiers qui sont accédés par le système au moment de l’exécution de la commande.

Bien que tous les champs soient auto-explicatifs, la plupart sont confus au sujet des colonnes « FD » et « TYPE » et de leurs valeurs. Vérifions-les.

FD : Abréviation de « descripteur de fichier ». Il en ressort les valeurs suivantes.

  • cwd : Répertoire de travail actuel
  • rtd : Répertoire racine
  • txt : Texte du programme (données, code, et autres)
  • mem : Fichier mappé en mémoire
  • err : Erreur d’information FD
  • mmap : Périphérique mappé en mémoire
  • ltx : Texte de bibliothèque partagée (données et code)
  • m86 : DOS Merge mapped file

Il y a aussi d’autres valeurs que vous remarquerez dans la colonne, comme « 1u » suivi de la valeur u, r, w, etc. Que signifient-elles ?

  • r : Accès en lecture
  • w : Accès en écriture
  • u : Accès en lecture et en écriture
  • – : Mode inconnu et il contient un caractère de verrouillage
  • ‘ ‘ : Le mode est inconnu et il n’y a pas de caractère de verrouillage

TYPE : Décrit le type de fichier et son identification. Les valeurs sont les suivantes.

  • DIR : répertoire
  • CHR : fichier à caractères spéciaux
  • REG : fichier régulier
  • FIFO : Premier entré, premier sorti

Fichiers ouverts spécifiques à l’utilisateur

Linux est une brillante plateforme multi-utilisateurs. Plusieurs utilisateurs peuvent accéder au système en même temps et effectuer les opérations dont ils ont la permission.

Pour vérifier les fichiers auxquels accède un certain utilisateur, exécutez la commande suivante.

lsof -u <nom d’utilisateur>

Cependant, pour vérifier les utilisateurs de rang supérieur, « lsof » aura besoin du privilège « superutilisateur ».

sudo lsof -u <username>

Que diriez-vous de vérifier toutes les commandes et tous les fichiers auxquels un certain utilisateur accède ? Exécutez la suivante.

lsof -i -u <nomd’utilisateur>

Encore, pour les utilisateurs de rang supérieur, « lsof » aura besoin du privilège « superutilisateur ».

sudo lsof -i -u <nomd’utilisateur>

Processus en cours d’exécution spécifiques au port

Pour connaître tous les processus qui utilisent actuellement un certain port, appelez « lsof » avec le drapeau « -i » suivi des informations sur le protocole et le port.

lsof -i<46><protocole><@hostname|host_address>
:<service|port>

Par exemple, pour vérifier tous les programmes accédant actuellement au port 80 sur le protocole TCP/IP, exécutez la commande suivante.

lsof -i TCP:80

Cette méthode peut également être utilisée pour montrer tous les processus qui utilisent des ports dans une certaine plage, par exemple de 1 à 1000. La structure de la commande est similaire à celle d’avant avec un peu de magie au niveau de la partie numéro de port.

lsof -i TCP:1-1000

Processus spécifiques au protocole

Voici 2 exemples montrant les processus qui utilisent actuellement les protocoles IPv4 et IPv6.

lsof -i 4

lsof -i 6

Lister les connexions réseau

La commande suivante rapportera toutes les connexions réseau du système actuel.

lsof -i

Exclure avec ^

Oui, nous pouvons exclure un utilisateur spécifique, un port, un FD et autres en utilisant le caractère « ^ ». Tout ce que vous avez à faire est de l’utiliser avec prudence afin de ne pas gâcher toute la sortie.

Dans cet exemple, excluons tous les processus de l’utilisateur « root ».

lsof -u^root

Il existe d’autres façons d’utiliser ce mécanisme d’exclusion avec « lsof », par exemple, avec les drapeaux comme « -c », « -d » etc. Tous les drapeaux ne supportent pas ce mécanisme. C’est pourquoi je recommande d’essayer une démo avec cette méthode avec n’importe quel drapeau avant de l’implémenter dans certains scripts.

Recherche du PID

Le PID est une propriété importante de tout processus en cours d’exécution sur le système. Il permet une localisation plus fine d’un certain processus. Le nom du processus n’est pas tout à fait utile dans beaucoup de situations car le même binaire peut créer des copies de lui-même et effectuer différentes tâches en parallèle.

Si vous ne savez pas comment obtenir le PID d’un processus, utilisez simplement « ps » pour lister tous les processus en cours et filtrez la sortie en utilisant « grep » avec le nom du processus et/ou les commandes.

ps -A

Maintenant, effectuez le filtrage en utilisant « grep ».

ps -A | grep <process_or_command>

Maintenant, vérifiez à quels fichiers ce PID accède.

lsof -p <PID >

Liste des fichiers ouverts pour un périphérique spécifique

La fonctionnalité de « lsof » ne se limite pas à ces fonctions. Vous pouvez également filtrer le résultat de « lsof » par base de périphérique également. Dans ce but, la commande ressemblera à quelque chose comme ceci.

lsof <device_mount_point>

Cette commande est super utile pour connaître tous les processus en cours d’exécution avec leurs informations de propriétaire accédant à un système de fichiers particulier. Si vous avez du mal à démonter un système de fichiers, c’est la meilleure façon de procéder.

lsof <busy_device_mount_point>

Liste des fichiers ouverts sous un répertoire

Similaire à l’exemple précédent, il suffit de passer le chemin du répertoire à « lsof » pour savoir si un processus y accède.

Note : « lsof » vérifiera le répertoire de manière récursive, donc cela peut prendre du temps.

=lsof +D <chemin_répertoire>

Bonus : mettre fin à toutes les activités de l’utilisateur

Soyez extrêmement prudent avec cette partie car elle peut tout simplement gâcher tout ce que fait un utilisateur. La commande suivante tuera tous les processus en cours d’exécution d’un utilisateur.

sudo kill -9 `lsof -t -u <username`

Pensées finales

Les fonctionnalités de « lsof » ne s’arrêtent pas seulement ici. Celles qui sont mentionnées ici sont celles dont nous aurons le plus besoin au quotidien. Il y a plein d’autres fonctionnalités de « lsof » qui peuvent s’avérer utiles (dans des cas spécifiques, bien sûr).

Pour toutes les fonctionnalités disponibles et leur utilisation, consultez les pages man et info de « lsof ».

man lsof

info lsof

lsof – ?

Bonheur!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.