Présentation
À un moment donné de leur carrière, tout le monde va résoudre un problème. Et chacun a son étape de dépannage préférée à utiliser. Pour de nombreux administrateurs système, la première étape consiste à s'assurer que tout est à jour. Pour d'autres, il suffit de vérifier les fichiers journaux avant de trouver votre solution. Pour moi et d'autres ici à Atlantic.Net, c'est lsof ; un utilitaire de ligne de commande utilisé pour répertorier les informations sur les fichiers ouverts par divers processus.
Principalement utilisé pour résoudre les problèmes de connexion réseau, lsof est une application puissante mais trop peu connue. Si vous êtes familier avec les commandes Linux générales, lsof est un outil facile à retenir car il "répertorie les fichiers ouverts".
Prérequis
lsof est une commande spécifique à Unix. Afin de l'utiliser pour identifier les informations système, vous devrez utiliser un système de style Unix, tel que CentOS ou Ubuntu. lsof est préinstallé sur ces systèmes.
Si vous utilisez un système Windows, vous pouvez obtenir des résultats similaires en utilisant le menu Process Explorer, ainsi que les commandes netstat et sysinternals.
lsof Indicateurs d'utilisation
Une chose qu'il est important de comprendre est que lsof a un grand nombre d'indicateurs disponibles qui peuvent être utilisés pour modifier la sortie que vous recevez. Vous trouverez ci-dessous tous les drapeaux disponibles :
[[email protected] ~]# lsof --help usage: [-?abhlnNoOPRtUvVX] [+|-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]] [--] [names]
Passer en revue chaque drapeau serait un article beaucoup plus long, nous allons donc garder les choses simples et ne couvrir que les options les plus utilisées au jour le jour.
Drapeaux d'options clés
Il est important de comprendre comment fonctionne lsof, en particulier par défaut. Lorsque vous transmettez des options à la commande lsof, le comportement par défaut est OU les résultats. Cela signifie que l'exécution de lsof en utilisant à la fois -i
ainsi que le -p
flag vous obtiendrez les résultats des deux.
Voici les indicateurs les plus souvent utilisés dans notre dépannage :
default : with no options flags, lsof lists all open files for active processes grouping : it's possible to group options, such as passing the flags though -nPi. Just keep an eye out for which options take additional parameters -a : AND the result (instead of the default OR) -l : show the userID instead of the username in the output -h : get help -i : selects the listing of files that match -n : stop host name resolution of network numbers -t : get process IDs only -P : stop conversion of port numbers to port names
Mise en route
Répertorier tous les fichiers ouverts.
# lsof
Lister tous les fichiers ouverts.
Afficher toutes les connexions :
# lsof -i
Afficher toutes les connexions
Le serveur sur lequel nous testons est un nouveau serveur Atlantic.Net CentOS6 sur lequel aucun progiciel supplémentaire n'est installé. Vous pouvez voir dans la sortie ci-dessus que le serveur n'écoute que le trafic SSH et SMTP. Si vous souhaitez voir le numéro de port réel au lieu du nom du service, nous devrons exécuter la commande à l'aide de -Pi
drapeau :
lsof -Pi
Afficher toutes les connexions écoutant sur les ports sans résoudre le nom du service.
Comme vous pouvez le voir, tous les *:ssh et localhost :smtp la sortie a été convertie en *:22 et localhost :25 . Pour la plupart des administrateurs système, en particulier si vous n'êtes pas habitué à parcourir et à analyser les services système, il est souvent plus facile de résoudre les problèmes en identifiant directement le port au lieu d'utiliser le nom du service.
Afficher les connexions sur les ports IPv6 :
lsof -i6
Afficher les connexions sur les ports IPv6
Par rapport à lsof -i
commande plus tôt, cette commande recherche spécifiquement les services avec un TYPE de IPv6 .
Afficher les connexions sur un port spécifique sans résoudre le nom du service :
lsof -Pi :25
Afficher les connexions sur un port spécifique sans résoudre le nom du service
La recherche spécifique de tous les processus en cours d'écoute sur le port 25 montre qu'il y a deux processus en cours sur le système (un IPv4, un IPv6) en cours d'exécution. Aucun de ces processus n'écoute les connexions externes.
Afficher les ports d'écoute :
lsof -i -sTCP:LISTEN
Afficher les ports d'écoute
Cette commande répertorie tous les processus en cours d'exécution qui se trouvent dans LISTEN état, ce qui signifie qu'ils écoutent activement les connexions entrantes.
Afficher qui utilise un fichier :
lsof /path/of/file
Vous pouvez voir dans la commande ci-dessus que deux processus sont en cours d'exécution et utilisent le /var/log/ messages fichier d'une manière ou d'une autre.
Afficher de manière récursive tous les fichiers ouverts dans un répertoire :
lsof +D /usr/lib
Afficher récursivement tous les fichiers ouverts dans un répertoire
Sur notre système de test, en utilisant le +D
flag montre six processus ouverts distincts provenant de /usr/lib répertoire.
Afficher les fichiers ouverts par utilisateur :
lsof -u atlantic-noc
Afficher les fichiers ouverts par utilisateur
L'utilisateur atlantic-noc a une session SSH active avec un ID de processus (PID) de 7769.
Afficher tous les fichiers ouverts avec un ID de processus spécifique :
lsof -p 7790
Afficher tous les fichiers ouverts avec un ID de processus spécifique
Le -p
L'option a filtré les fichiers ouverts afin que seuls ceux avec l'ID de processus spécifié soient affichés. Dans ce cas, PID 7790. Vous pouvez sélectionner plusieurs PID en spécifiant une virgule, comme -p 7789,7790
Afficher toutes les activités du réseau pour un utilisateur spécifique :
lsof -a -u atlantic-noc -i
Le -a
flag combine (modifie le comportement OU par défaut en ET) le -u
et -i
drapeaux pour fournir une liste d'utilisation des fichiers réseau pour l'utilisateur atlantic-noc ; dans ce cas une seule session SSH.
Autre chose ?
Les commandes présentées ci-dessus ne sont qu'un début pour lsof; un outil polyvalent qui peut être utilisé seul ou en combinaison avec d'autres outils de dépannage Unix, tels que strace. Mais c'est un article pour une autre fois.
N'oubliez pas de consulter notre blog pour toute mise à jour de cet article, d'autres articles liés à Linux et d'autres introductions aux commandes Unix ou en savoir plus sur nos services d'hébergement VPS fiables.