Je mets lsof sous Linux pour voir en quelques secondes quel processus maintient ouvert quel fichier, quel socket ou quel port. Cela me permet d'identifier les journaux bloqués, les Ports et je débloque les fichiers bloqués sans détours, tout en résolvant les problèmes de manière ciblée.
Points centraux
Pour bien démarrer, je vais résumer les points les plus importants Aspects en bref.
- Ressources Afficher : processus, fichiers, répertoires, périphériques, pipes, sockets.
- Filtre Utilisation : par nom de processus (-c), PID (-p), utilisateur (-u), fichier, répertoire (+d/+D), port (-i).
- Erreur cerner le problème : identifier les fichiers bloqués, résoudre les conflits de ports, localiser les services bloqués.
- Réseau Vérifier : identifier rapidement les connexions actives et les ports occupés.
- Flux de travail rationaliser : commencer par délimiter le champ d'action, puis examiner de manière ciblée, et enfin agir.
Pourquoi lsof est important au quotidien
J'utilise lsof, lorsqu'un service ne démarre pas, qu'un fichier indique „ occupé “ ou qu'un port est déjà utilisé. L'outil relie le fichier, le processus, l'utilisateur et le réseau dans une vue d'ensemble claire Vue. Je repère immédiatement quel PID bloque l'accès et depuis quand. Je peux ainsi agir en toute certitude plutôt que de deviner, et arrêter le bon processus au lieu d'interrompre par erreur le mauvais service. C’est notamment sur les serveurs de production que cela me fait gagner des minutes, voire des heures, car j’identifie directement la cause au niveau du processus. Cette approche permet d’éviter des tickets, de réduire les pannes et de créer un environnement fiable. Connaissances.
Comprendre la syntaxe de base et l'affichage des résultats
La forme de base est la suivante : lsof [options] et renvoie, sans paramètre, toutes les fenêtres actuellement ouvertes objets. Sur les systèmes très sollicités, je filtre la sortie plutôt que de parcourir des milliers de lignes. Il est important de noter que sous Linux, le terme „ fichier “ a une acception très large : il englobe les répertoires, les périphériques, les bibliothèques et les éléments réseau-Prises. Dans le résultat, des colonnes telles que COMMAND, PID, USER, FD, TYPE et NAME sont utiles. Je me concentre d’abord sur les colonnes FD (descripteur de fichier), TYPE (REG, DIR, IPv4/6) et NAME, avec le chemin d’accès ou le numéro de port. En consultant ces colonnes, on comprend rapidement l’état actuel du système et on peut attribuer clairement les ressources. Processus.
Installation et autorisations : mise en pratique
Sur de nombreuses distributions, lsof Il n'est pas préinstallé. Je vais donc l'installer dès maintenant via le gestionnaire de paquets (apt install lsof, dnf install lsof, yum install lsof ou pacman -S lsof), afin qu'il soit immédiatement disponible en cas d'incident. Pour avoir une vue d'ensemble complète, j'utilise donc généralement sudo car sans droits étendus, de nombreuses entrées se soldent par un „ permission denied “ ou sont tout simplement absentes. Je commence néanmoins délibérément sans accès root, je vérifie jusqu’où je peux aller et je n’élève les privilèges que si cela s’avère nécessaire. Sur les systèmes équipés de SELinux ou d’AppArmor, je tiens compte du fait que les contextes de sécurité peuvent restreindre la visibilité ; selon la version, lsof Je définis également des contextes supplémentaires. Je désactive les avertissements lors des requêtes en masse à l'aide de -w, afin que les scripts restent robustes.
Lire les champs et les types FD en toute sécurité
La rubrique FD C'est ma clé pour comprendre. Les valeurs courantes sont :
cwd: répertoire de travail actuel du processus.txt: le fichier exécutable (segment de texte) du processus.mem: bibliothèques partagées chargées et fichiers mappés en mémoire (memory mappings).0h, 1s, 2s: Descripteurs standard (stdin, stdout, stderr) avec moder(lire),w(écrire) ouu(lecture/écriture).- des chiffres plus élevés, tels que
3u,7r: des descripteurs ouverts standard, souvent des fichiers, des sockets ou des tubes.
Extrait de TYPE je lis la classe d'objet : REG (fichier standard), DIR (répertoire), CHR/BLK (appareil de dessin/de blocage), FIFO (Pipe), IPv4/IPv6 (réseau), UNIX (socket de domaine Unix). Dans NOM le chemin d'accès ou, dans le cas des sockets, le point de terminaison, par exemple. TCP *:80 (ÉCOUTE) ou UDP 127.0.0.1:123. Quand je (supprimé) Quand je regarde à la fin, je constate qu'un fichier a été supprimé, mais qu'il est toujours retenu par un PID – une cause typique de l'espace disque „ disparu “.
Filtrage ciblé : fichiers, répertoires, ports
Je commence par définir le contexte, puis je commence par un Filtre. Pour un répertoire, j'utilise lsof +D /var/log (récursif) ou lsof +d /var/log (uniquement le dossier lui-même). Je vérifie les fichiers individuels directement, par exemple lsof /var/log/syslog, pour voir les processus en cours d'écriture. Pour les ports, je définis lsof -i:80, lsof -i:443 ou de manière générique lsof -i . J'aime bien l'associer à -nP, afin que lsof ne résolve pas les adresses IP et les ports et fonctionne plus rapidement. Ainsi, à partir d'un état du système confus, on obtient en un temps record une vue d'ensemble ciblée Image.
Combiner et affiner les filtres
Pour obtenir des analyses reproductibles, je combine des filtres avec -a liées logiquement. Je n'obtiens ainsi que les entrées qui remplissent toutes les conditions. Exemples :
lsof -a -p 1234 -d cwd,txt,mem– uniquement le répertoire de travail, le fichier binaire et les bibliothèques chargées d'un processus.lsof -a -iTCP -sTCP:ESTABLISHED -p 1234– uniquement les connexions TCP établies d'un PID.lsof -a -u www-data +d /var/www– Les fichiers situés dans le répertoire /var/www qui maintiennent ouverts des processus de l'utilisateur www-data.
Avec -d je filtre par des descripteurs (des chiffres ou des noms tels que cwd, mem). -U Cela me permet d'afficher de manière ciblée les sockets de domaine Unix lorsque je souhaite analyser des problèmes d'IPC locaux. Je réduis ainsi le bruit et je vois exactement ce qui correspond à ma question.
Attribuer rapidement des processus et des utilisateurs
Si je connais le nom d'un service, cela me donne lsof -c nginx tous les fichiers ouverts du serveur web, y compris Bibliothèques, les configurations et les sockets. Pour une analyse précise, j'utilise souvent le PID : lsof -p 1234 affiche tous les descripteurs d'un processus donné. Pour effectuer des vérifications spécifiques à l'utilisateur, j'utilise lsof -u mysql ou un autre compte, afin de rendre visibles les ressources ouvertes d'un compte de service. Dans le cadre d'analyses plus approfondies, je complète la vue des processus avec Comptabilité par processus et je peux ainsi voir à quelle fréquence et pendant combien de temps les programmes utilisent les ressources. Cette combinaison des vues « processus », « utilisateur » et « activité » me permet d'identifier rapidement les phénomènes complexes Cause.
Cas particuliers : fichiers supprimés, Logrotate et fichiers volumineux
Lorsque l'espace disque „ vient à manquer “, je trouve souvent la cause avec lsof +L1: Il répertorie les fichiers qui ont déjà été supprimés, mais qui sont encore ouverts par des processus. Il s'agit généralement de fichiers journaux tournés, de fichiers temporaires volumineux ou de vidages de débogage. Au lieu d’agrandir la partition à la hâte, je termine de manière ciblée les PID affichés ou j’envoie le signal habituel pour forcer le rechargement. Pour les services de journaux, je préfère effectuer un rechargement propre du service concerné, afin que les descripteurs soient rouverts. Les solutions de secours telles que tronquer ou la suppression directe sans redémarrage du processus ne font que repousser le problème.
Pour les longs flux de données, je vérifie également la colonne SIZE/OFF (visible selon la version) pour déterminer si un processus est lié à un décalage très important. Cela explique pourquoi un descripteur occupe autant d'espace mémoire, alors que le fichier est marqué comme supprimé.
Résoudre systématiquement les scénarios d'erreurs typiques
Je supprime les fichiers verrouillés après lsof m'a montré la procédure à suivre. Au lieu d'arrêter des services au hasard, je termine le PID de manière ciblée ou je redémarre précisément ce service. Je résous les conflits de ports avec lsof -i:, je vérifie le PID correspondant, puis j'ajuste le port, le service ou le pare-feu en conséquence. Si un processus est bloqué, je vérifie ses descripteurs ouverts à l'aide de lsof -p et déterminer s'il attend un fichier, un tube ou un socket. Pour des analyses approfondies, je complète cette vue avec strace de manière ciblée, afin de surveiller les appels système en temps réel. Cela me permet de résoudre de manière fiable les dysfonctionnements récurrents et de documenter les étapes à suivre pour l'avenir Incidents.
Prendre en compte les conteneurs et les espaces de noms
Explications pour les environnements conteneurisés (par exemple, avec leurs propres espaces de noms réseau) lsof Je constate des incohérences entre l'hôte et le conteneur. Je lance lsof soit directement dans le conteneur, soit en accédant depuis l'hôte à l'espace de noms du processus cible. Cela me permet de comprendre pourquoi un port se trouve à l'état LISTEN dans le conteneur, alors qu'il semble „ libre “ sur l'hôte : ils se trouvent dans des espaces de noms différents. Je procède de manière similaire avec les espaces de noms de montage : les montages liés (bind mounts) et les systèmes de fichiers superposés (overlay) apparaissent dans la colonne NAME avec leurs chemins réels, ce qui permet de repérer les volumes mal configurés. Je classe également les descripteurs ouverts par utilisateur et par cgroup lorsque je gère des services via des superviseurs ou des solutions d’orchestration.
Analyse du réseau avec lsof -i
Avec lsof -i je détecte les connexions actives et je surveille les ports occupés Ports. Filtres tels que lsof -iTCP -sTCP:LISTEN répertorie de manière ciblée les services en état « LISTEN ». Pour certains protocoles, j'utilise lsof -iUDP ou sur des ports spécifiques tels que lsof -i:25 pour les serveurs de messagerie. Je vérifie également si un PID maintient plusieurs sockets ouverts, ce qui peut indiquer des fuites ou des boucles sans fin. Lors des contrôles de sécurité, je compare les services attendus avec les résultats et détecte les services indésirables ou oubliés Services. Cette vue d'ensemble du réseau me fait gagner du temps, car je n'ai pas besoin de consulter plusieurs outils en parallèle et je vois tout au même endroit.
Approfondir les détails du réseau
Pour les requêtes particulièrement ciblées, j'utilise la syntaxe d'adresse et de port de -i: Je limite la recherche aux adresses source ou de destination (lsof [email protected]) ou combine l'adresse et le port (lsof [email protected]:443). Avec -sTCP:ESTABLISHED je constate que les sessions sont productives, tandis que -sTCP:LISTEN qui n'émet que des écouteurs. J'utilise les analyses UDP pour mettre en évidence les services comportant de nombreux sockets éphémères (DNS, Syslog, NTP). Je vérifie également si certains processus sont exposés au réseau plus que nécessaire (par exemple, des écouteurs sur 0.0.0.0 (au lieu d'une interface locale). Cela réduit les efforts de renforcement de la sécurité ultérieurs.
Tableau récapitulatif : options courantes
J'utilise très régulièrement quelques options de base et je les adapte en fonction de Scénario. Le tableau suivant répertorie les commutateurs les plus importants, accompagnés d'une brève explication et d'un exemple. Cela me permet de trouver plus rapidement la forme appropriée et d'éviter de devoir consulter de longues pages d'aide. J'utilise ces options de manière modulaire, ce qui me permet de rester flexible. En maîtrisant cet ensemble de base, on peut résoudre de nombreux problèmes à l'aide d'un seul appel.
| Option | Objectif | Exemple |
|---|---|---|
| -i | Afficher les connexions réseau et les ports occupés | lsof -i:443 |
| -c NOM | Filtrer par nom de processus (correspondance de préfixe) | lsof -c nginx |
| -p PID | Tous les fichiers ouverts associés à un PID | lsof -p 1234 |
| -u UTILISATEUR | Ressources ouvertes d'un utilisateur | lsof -u mysql |
| +d DIR | Uniquement le répertoire indiqué | lsof +d /var/log |
| +D DIR | Parcourir le répertoire de manière récursive | lsof +D /var/log |
| -nP | Pas de recherche de nom DNS ni de port (plus rapide) | lsof -nP -i |
| -t | Afficher uniquement les PID (compatible avec les scripts) | lsof -t -i:80 |
| +L1 | Afficher les fichiers supprimés mais toujours ouverts | lsof +L1 |
J'utilise -t souvent utilisé pour transmettre directement des PID à des scripts, par exemple à tuer ou systemctl. Avec +L1 je repère les processus qui maintiennent ouverts des fichiers supprimés et bloquent ainsi de l'espace disque. En combinaison avec -r (encore une fois), je constate des changements à court terme distances. En procédant par étapes, on évite les erreurs d'interprétation et on travaille de manière cohérente. Le diagnostic reste ainsi reproductible et mesurable clair.
Traiter efficacement les données de sortie
Je continue à formater directement le résultat afin d'obtenir les résultats plus rapidement utilise. Avec lsof -t -i:80 | xargs -r kill -TERM je ferme par exemple tous les processus qui occupent le port 80. Pour les rapports, j'utilise lsof -nP -i | grep LISTEN revenir en arrière et filtrer des états de manière ciblée. Également awk aide à : lsof -nP | awk '{print $1,$2,$3,$9}' limite l'affichage au nom, au PID, à l'utilisateur et au chemin d'accès. Je documente les commandes en une seule ligne qui fonctionnent et m'évite ainsi d'avoir à Recherche selon des modèles adaptés. De petits accessoires tels que watch 'lsof -nP -i:443' montrent les changements en temps réel et permettent de prendre des décisions plus rapidement.
Automatisation et sortie analysable
Pour les contrôles récurrents, j'utilise le format lisible par machine de lsof avec -F. Je ne sélectionne que les champs dont j'ai besoin (par exemple : processus, commande, utilisateur, FD, nom) et je continue à les analyser de manière stable. Exemples :
lsof -Fn -Fp -Fc -Fu -t -i:443– des champs minimalistes pour les scripts qui ne nécessitent que des PID ou des noms.lsof -Fpcun -a -iTCP -sTCP:LISTEN– Recueillir les commentaires des auditeurs et les traiter de manière ciblée.
Avec -r 2 Je génère une vue „ en direct “ toutes les deux secondes et je compare les instantanés. Dans les pipelines, je fusionne les modifications (trier, uniq, diff), afin de détecter les handles nouvellement créés ou en train de disparaître. Je prévois délibérément des délais d'expiration afin que les requêtes ne se bloquent pas en cas de charge élevée et que les tâches de surveillance se terminent correctement.
Bonnes pratiques et aspects liés à la sécurité
Je lance les analyses avec des droits minimaux et je ne les étends qu'ensuite à racine, lorsque je ne dispose pas des autorisations nécessaires. Cela me permet de réduire les risques et de garder des journaux clairs. Je vérifie régulièrement les analyses avec lsof -i en plus des services que je prévois de mettre en place pour détecter les écouteurs ou les connexions inhabituels. J'examine ensuite de manière ciblée les PID suspects à travers les fichiers, les bibliothèques et Prises. Pendant les fenêtres de maintenance, je veille à ce qu’aucun fichier supprimé mais toujours ouvert ne gaspille de l’espace. Ceux qui prennent la sécurité au sérieux intègrent lsof dans leurs listes de contrôle et réagissent aux anomalies à l’aide de procédures bien définies Étapes.
Les écueils courants et les solutions efficaces
- Toutes les entrées ne sont pas visibles : Sans accès root, il m'arrive souvent de ne pas avoir accès à certains processus d'autres utilisateurs ou à certains descripteurs liés au noyau. J'utilise spécifiquement
sudo. - Affichage lent : Je désactive les résolutions à l'aide de
-nP, évite la récursivité et limite avec-afort. - +D trop cher : Les itérations récursives sur les répertoires peuvent être très volumineuses. Je commence par
+dou des chemins d'accès précis, et je ne les étendrai qu'en cas de besoin. - Port occupé, processus indéterminé : Je combine
lsof -i: -nPavec-tpour le PID et je passe àlsof -pplus bas. - „Il manque de l'espace “ libre » :
lsof +L1Permet de retrouver les fichiers ouverts mais supprimés. Redémarrez ou arrêtez ensuite le processus de manière ciblée. - Conteneurs/Espaces de noms : Je vérifie la requête dans l'espace de noms approprié, sinon je risque de voir des écouteurs erronés ou de ne pas remarquer des fichiers ouverts.
Comprendre les performances et les limites
Sur les très grands systèmes, une analyse complète avec lsof prend du temps et génère une charge notable Dernier. C'est pourquoi j'applique des filtres dès le début et je passe à -nP toutes les résolutions. Lorsque les nombres de « handle » sont très élevés, je vérifie en parallèle les Limites des descripteurs de fichiers et, si nécessaire, augmentez-les. Les scripts doivent prévoir des délais d'attente et utiliser -t Je ne transmets que les PID afin de limiter le volume de données. Je documente les exceptions et intègre des vérifications récurrentes dans les automatisations. Ainsi, le diagnostic reste fiable et clair, même en cas de charge élevée. maîtrisable.
Flux de travail pratique : du symptôme à la cause
Je commence par poser la question suivante : s'agit-il d'un fichier, d'un processus ou Port? Ensuite, je choisis l'introduction qui convient, par exemple lsof /chemin/vers/le/fichier, lsof -p ou lsof -i:. Je vérifie les champs USER, FD, TYPE et NAME, et je note ce qui me semble normal et ce qui me surprend. Ensuite, j'interviens : je redémarre le processus, j'ajuste la configuration, j'augmente la limite ou je libère un port. En cas de doute, je fige l’état actuel, je sauvegarde les journaux et je répète la mesure après la modification. Ce processus me permet de rester concentré et fournit une analyse claire Chaîne de preuves.
Liste de contrôle : recettes rapides pour le quotidien
- Qui bloque ce fichier ?
lsof /chemin/vers/le/fichier– Lire le PID, redémarrer ou arrêter le processus de manière ciblée. - Quel service utilise ce port ?
lsof -nP -i:– Résoudre le conflit, modifier le port ou l'adresse Bind. - Où disparaît l'espace disque ?
lsof +L1– rechercher les fichiers ouverts ou supprimés, redémarrer les PID concernés. - Le processus est-il bloqué au niveau des E/S ?
lsof -p– surveiller les pipes, les sockets ou les fichiers ; si nécessaire, compléter avec strace. - Quels sont les écouteurs qui fonctionnent vraiment ?
lsof -nP -iTCP -sTCP:LISTEN– comparer avec la liste des attentes. - Quelles ressources un compte de service utilise-t-il ?
lsof -u– Détecter les anomalies par compte.
Résumé pour la vie quotidienne
lsof me montre qui bloque quel fichier, quel répertoire ou quel port. Avec -c, -p, -u, +d/+D et -i Je restreins rapidement le champ de vision. Je débloque les fichiers verrouillés, identifie les conflits de ports et détecte les éléments inhabituels Connexions. En combinaison avec -nP Je travaille rapidement et veille à ce que les résultats restent clairs. Pour des analyses plus approfondies, j'utilise des outils complémentaires, je documente les commandes d'une ligne qui fonctionnent et j'intègre des vérifications récurrentes dans des automatisations. Ainsi, le diagnostic avec lsof reste direct, fiable et mesurable. efficacement.


