- SYNOPSIS
- DESCRIPTION
- OPTIONS
- AFS
- SÉCURITÉ
- SORTIE
- LOCKS
- OUTPUT FOR OTHER PROGRAMS
- BLOCAGES ET DÉLAIS
- ÉVITER LES BLOCAGES DU NOYAU
- NUMÉROS DE PÉRIPHÉRIQUE ALTERNATIFS
- CACHE DE NOMS DU NOYAU
- FICHIER CACHE DE PÉRIPHÉRIQUE
- PERMISSIONS DE LSOF QUI AFFECTENT L’ACCÈS AUX FICHIERS DE CACHE DE PÉRIPHÉRIQUES
- CHEMIN DU FICHIER DE CACHE DE PÉRIPHÉRIQUE À PARTIR DE L’OPTION -D
- CHEMIN DU CACHE DES PÉRIPHÉRIQUES À PARTIR D'UNE VARIABLE D'ENVIRONNEMENT
- CHEMIN DU CACHE DES PÉRIPHÉRIQUES À L'ÉCHELLE DU SYSTÈME
- CHEMIN DU CACHE DES PÉRIPHÉRIQUES PERSONNEL (PAR DÉFAUT)
- CHEMIN DU CACHE DE PÉRIPHÉRIQUE PERSONNEL MODIFIÉ
- DIAGNOSTICS
- EXEMPLES
- DÉFAUTS
- ENVIRONNEMENT
- FAQ
- FICHIERS
- AUTEURS
- DISTRIBUTION
- VOIR AUSSI
lsof - afficher la liste des fichiers ouverts
SYNOPSIS
lsof [ -?abChHlnNOPQRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ] [ +|-e s ] [ +|-E ]
[ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [ -K k ] [ +|-L [l] ] [ +|-m m ] [
+|-M ] [ -o [o] ] [ -p s ] [ +|-r [t[m<fmt>]] ] [ -s [p:s] ] [ -S [t] ] [ -T [t] ] [ -u s ] [
+|-w ] [ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [noms]
DESCRIPTION
Lsof, version 4.99.4, affiche sur sa sortie standard des informations sur les fichiers ouverts par les processus pour les dialectes UNIX suivants :
Apple Darwin 9, Mac OS X 10, macOS 11 et versions ultérieures
FreeBSD 8.2 et versions ultérieures
Linux 2.1.72 et versions ultérieures
NetBSD 1.2 et versions ultérieures
OpenBSD 7.2 et versions ultérieures
Solaris 9, 10 et 11 et versions ultérieures
OpenIndiana 5.11 et versions ultérieures
(Consultez la section DISTRIBUTION de cette page de manuel pour obtenir des informations sur la manière
d’obtenir la dernière version de lsof.)
Un fichier ouvert peut être un fichier ordinaire, un répertoire, un fichier spécial bloc, un fichier spécial caractère, une référence de texte en cours d’exécution, une bibliothèque, un flux ou un fichier réseau (socket Internet, fichier NFS ou socket de domaine UNIX). Un fichier spécifique ou tous les fichiers d’un système de fichiers peuvent être sélectionnés par son chemin.
Au lieu d’un affichage formaté, lsof produira une sortie qui peut être analysée par d’autres programmes. Voir l’option -F, la description et la section SORTIE POUR D’AUTRES PROGRAMMES pour plus d’informations.
En plus de produire une seule liste de résultats, lsof s’exécutera en mode répétition. En mode répétition, il
produira une sortie, attendra, puis répétera l’opération de sortie jusqu’à ce qu’elle soit interrompue par un signal d’interruption ou de fin.
Voir la description de l’option +|-r [t[m
OPTIONS
En l’absence d’options, lsof affiche tous les fichiers ouverts appartenant à tous les processus actifs.
Si une option de demande de liste est spécifiée, les autres demandes de liste doivent être spécifiées explicitement, par exemple, si -U est spécifié pour la liste des fichiers de socket UNIX, les fichiers NFS ne seront pas listés à moins que l’option -N ne soit également spécifiée ; ou si une liste d’utilisateurs est spécifiée avec l’option -u, les fichiers de socket de domaine UNIX appartenant à des utilisateurs qui ne sont pas dans la liste ne seront pas affichés à moins que l’option -U ne soit également spécifiée.
Normalement, les options de liste qui sont explicitement indiquées sont combinées avec l’opérateur OU (i.e., la spécification de l’option -i sans adresse et l’option -ufoo produit une liste de tous les fichiers réseau OU des fichiers appartenant à des processus appartenant à l’utilisateur « foo ». Les exceptions sont :
1 le nom d’utilisateur ou l’ID utilisateur (UID) précédé de « ^ », spécifié avec l’option -u ;
2 l’ID de processus (PID) précédé de « ^ », spécifié avec l’option -p ;
3 l’ID de groupe de processus (PGID) précédé de « ^ », spécifié avec l’option -g ;
4 la commande `^` (négation), spécifiée avec l'option -c ;
5 les noms d'état de protocole TCP ou UDP (`)` négatifs, spécifiés avec l'option -s [p:s].
Étant donné qu'ils représentent des exclusions, ils sont appliqués sans OR ou AND et prennent effet avant tous les autres critères de sélection.
L'option -a peut être utilisée pour effectuer un AND des sélections. Par exemple, la spécification de -a, -U et -ufoo produit une liste des fichiers de socket UNIX qui appartiennent aux processus appartenant à l'utilisateur « foo ».
Attention : l'option -a provoque l'application d'un AND à toutes les options de sélection ; elle ne peut pas être utilisée
pour provoquer l'application d'un AND à des paires d'options de sélection sélectionnées en la plaçant entre elles, même si son placement à cet endroit est acceptable. Partout où -a est placé, il provoque l'application d'un AND à toutes les options de sélection.
Les éléments du même ensemble de sélection (noms de commandes, descripteurs de fichiers, adresses réseau, identifiants de processus, identifiants d'utilisateur, noms de zones, contextes de sécurité) sont regroupés dans un seul ensemble OR et appliqués avant que le résultat ne participe à l'application d'un AND. Ainsi, par exemple, la spécification de -_, -_, -a et -ufff,ggg sélectionnera la liste des fichiers qui appartiennent à l'un ou l'autre des logins « fff » OU « ggg » ET qui ont des connexions réseau à l'un ou l'autre des hôtes aaa.bbb OU ccc.ddd.
Les options peuvent être regroupées après un seul préfixe, par exemple, l'ensemble d'options « -a -b -C » peut être indiqué comme -abC. Cependant, comme les valeurs sont facultatives après +|-f, -F, -g, -i, +|-L, -o, +|-r, -s, -S, -T, -x et -z, lorsque vous n'avez pas de valeurs pour celles-ci, veillez à ce que le caractère suivant ne soit pas ambigu. Par exemple, -Fn peut représenter les options -F et -n, ou il peut représenter le caractère d'identifiant de champ n qui suit l'option -F. Lorsque l'ambiguïté est possible, commencez une nouvelle option avec un caractère « - », par exemple, « -F -n ». Si l'option suivante est un nom de fichier, suivez l'option potentiellement ambiguë avec « -- », par exemple, « -F -- name ».
Soit le préfixe « + » soit le préfixe « - » peut être appliqué à un groupe d'options. Les options qui n'ont pas de significations distinctes pour chaque préfixe (par exemple, -i) peuvent être regroupées sous l'un ou l'autre des préfixes. Ainsi, par exemple, « +M -i » peut être indiqué comme « +Mi » et le groupe a la même signification que les options séparées. Faites attention au regroupement de préfixes lorsque l'une ou plusieurs des options du groupe ont des significations distinctes sous différents préfixes, par exemple, +|-M ; « -iM » n'est pas la même demande que « -i +M ». En cas de doute, utilisez des options séparées avec les préfixes appropriés.
-? -h Ces deux options équivalentes sélectionnent une liste de sortie d'aide. Lsof affiche une forme raccourcie de cette sortie lorsqu'il détecte une erreur dans les options fournies, après avoir affiché des messages expliquant chaque erreur. (Échappez le caractère « ? » comme l'exige votre shell).
-a provoque l'application d'un AND aux options de sélection de liste, comme décrit ci-dessus.
-A A est disponible sur les systèmes configurés pour AFS dont le code du noyau AFS est implémenté via des modules dynamiques. Il permet à l'utilisateur de lsof de spécifier A comme un fichier de liste de noms alternatif où les adresses du noyau des modules dynamiques peuvent être trouvées. Consultez la FAQ de lsof (la section FAQ indique son emplacement) pour plus d'informations sur les modules dynamiques, leurs symboles et leur impact sur lsof.
-b force lsof à éviter les fonctions du noyau qui pourraient bloquer : lstat(2), [readlink]({filename}../../readlink)(2) et
stat(2).
Consultez les sections « BLOCAGES ET DÉLAIS » et « COMMENT ÉVITER LES BLOCAGES DU NOYAU » pour plus d’informations sur l’utilisation de cette option.
-c c sélectionne la liste des fichiers pour les processus exécutant la commande qui commence par les
caractères de c. Plusieurs commandes peuvent être spécifiées à l’aide de plusieurs options -c. Elles
sont combinées dans un seul ensemble OR avant de participer à la sélection avec l’option AND.
Si c commence par un « ^ », les caractères qui suivent spécifient un nom de commande dont les
processus doivent être ignorés (exclus).
Si c commence et se termine par une barre oblique (« / »), les caractères entre les barres obliques sont interprétés comme une expression régulière. Les métacaractères du shell dans l’expression régulière doivent être
protégés pour éviter leur interprétation par le shell. La barre oblique de fermeture peut être suivie
par les modificateurs suivants :
b l’expression régulière est une expression régulière de base.
i ignorer la casse des lettres.
x l’expression régulière est une expression régulière étendue
(par défaut).
Consultez la FAQ de lsof (la section FAQ indique son emplacement) pour plus d’informations sur les
expressions régulières de base et étendues.
La spécification de commande simple est testée en premier. Si ce test échoue, l’expression régulière de commande est appliquée. Si le test de commande simple réussit, le test d’expression régulière de commande n’est pas effectué. Cela peut entraîner des messages tels que « aucune commande trouvée pour l’expression régulière »
lorsque l’option -V de lsof est spécifiée.
+c w définit le nombre maximal de caractères initiaux du nom, fourni par le dialecte UNIX, de la commande UNIX associée à un processus à afficher dans la colonne COMMANDE. (La valeur par défaut de lsof est de neuf.)
Notez que de nombreux dialectes UNIX ne fournissent pas tous les caractères de nom de commande à lsof dans
les fichiers et les structures à partir desquels lsof obtient le nom de la commande. Souvent, les dialectes limitent le
nombre de caractères fournis dans ces sources. Par exemple, Linux 2.4.27 et Solaris 9
limitent tous les deux la longueur du nom de la commande à 16 caractères.
Si w est zéro (« 0 »), tous les caractères de commande fournis à lsof par le dialecte UNIX seront
affichés.
Si w est inférieur à la longueur du titre de la colonne, « COMMANDE », il sera augmenté à cette
longueur.
-C désactive le signalement de tout composant de nom de chemin à partir de la mémoire cache de noms du noyau. Consultez
la section « MÉMOIRE CACHE DE NOMS DU NOYAU » pour plus d’informations.
+d s force lsof à rechercher toutes les instances ouvertes du répertoire s et des fichiers et répertoires qu’il contient à son niveau supérieur. +d ne parcourt PAS l’arborescence de répertoires, dont la racine est s.
L’option +D D peut être utilisée pour demander une recherche complète de l’arborescence de répertoires, dont la racine est le
répertoire D.
Le traitement de l'option +d ne suit pas les liens symboliques dans s, à moins que les options -x ou -x l ne soient également spécifiées. De même, elle ne recherche pas les fichiers ouverts sur les points de montage du système de fichiers dans les sous-répertoires de s, à moins que les options -x ou -x f ne soient également spécifiées.
Remarque : l'autorité de l'utilisateur de cette option limite la recherche aux fichiers que l'utilisateur est autorisé à examiner à l'aide de la fonction stat(2) du système.
-d s spécifie une liste de descripteurs de fichiers (FD) à exclure ou à inclure dans la liste de sortie. Les descripteurs de fichiers sont spécifiés dans l'ensemble s, séparés par des virgules, par exemple : « cwd,1,3 », « ^6,^2 ». (Il ne doit pas y avoir d'espaces dans l'ensemble.)
La liste est une liste d'exclusion si tous les éléments de l'ensemble commencent par « ^ ». C'est une liste d'inclusion si aucun élément ne commence par « ^ ». Les listes mixtes ne sont pas autorisées.
Une plage de numéros de descripteurs de fichiers peut être présente dans l'ensemble, à condition que ni l'un ni l'autre des membres ne soient vides, que les deux membres soient des nombres et que le membre final soit supérieur au membre initial, par exemple : « 0-7 » ou « 3-10 ». Les plages peuvent être spécifiées pour l'exclusion si elles ont le préfixe « ^ », par exemple : « ^0-7 » exclut tous les descripteurs de fichiers de 0 à 7.
Plusieurs numéros de descripteurs de fichiers sont joints dans un ensemble unique, qui participe ensuite à la sélection basée sur l'option AND.
Lorsque des membres d'exclusion et d'inclusion sont présents dans l'ensemble, lsof les signale comme des erreurs et quitte le programme avec un code de retour différent de zéro.
Consultez la description des valeurs de sortie du descripteur de fichier (FD) dans la section SORTIE pour plus d'informations sur les noms de descripteurs de fichiers.
fd est un pseudo-nom de descripteur de fichier qui spécifie toute la plage de numéros de descripteurs de fichiers possibles. fd n'apparaît pas dans la colonne FD de la sortie.
+D D indique à lsof de rechercher toutes les instances ouvertes du répertoire D et tous les fichiers et répertoires qu'il contient, jusqu'à sa profondeur complète.
Le traitement de l'option +D ne suit pas les liens symboliques dans D, à moins que les options -x ou -x l ne soient également spécifiées. De même, elle ne recherche pas les fichiers ouverts sur les points de montage du système de fichiers dans les sous-répertoires de D, à moins que les options -x ou -x f ne soient également spécifiées.
Remarque : l'autorité de l'utilisateur de cette option limite la recherche aux fichiers que l'utilisateur est autorisé à examiner à l'aide de la fonction stat(2) du système.
Autre remarque : lsof peut traiter cette option lentement et nécessiter une grande quantité de mémoire dynamique pour ce faire. En effet, il doit parcourir tout l'arborescence de répertoires, à partir de D, en appelant stat(2) pour chaque fichier et répertoire, en créant une liste de tous les fichiers qu'il trouve, et en recherchant dans cette liste une correspondance avec chaque fichier ouvert. Lorsque le répertoire D est volumineux, ces étapes peuvent prendre beaucoup de temps, alors utilisez cette option avec prudence.
-D D indique à lsof d'utiliser le fichier de cache de périphérique. L'utilisation de cette option est parfois restreinte. Consultez la section FICHIER DE CACHE DE PÉRIPHÉRIQUE et les sections qui la suivent pour plus d'informations sur cette option.
-D doit être suivi d'une lettre de fonction ; la lettre de fonction peut être suivie, de manière facultative, d'un nom de chemin. Lsof reconnaît les lettres de fonction suivantes :
? - affiche les chemins d'accès aux fichiers du cache d'appareils
b - crée le fichier du cache d'appareils
i - ignore le fichier du cache d'appareils
r - lit le fichier du cache d'appareils
u - lit et met à jour le fichier du cache d'appareils
Les fonctions b, r et u, accompagnées d'un nom de chemin, sont parfois restreintes. Lorsque ces fonctions sont restreintes, elles n'apparaissent pas dans la description de l'option -D qui accompagne la sortie des options -h ou -?. Voir la section FICHIER DE CACHE D'APPARREILS et les sections qui suivent pour plus d'informations sur ces fonctions et sur les moments où elles sont restreintes.
La fonction ? affiche les chemins d'accès en lecture seule et en écriture que lsof peut utiliser pour le fichier du cache d'appareils, les noms de toutes les variables d'environnement dont lsof examinera les valeurs lors de la création du chemin d'accès au fichier du cache d'appareils, et le format du chemin d'accès au fichier du cache d'appareils personnel. (Échappez le caractère « ? » comme l'exige votre shell.)
Lorsque disponibles, les fonctions b, r et u peuvent être suivies du chemin d'accès du fichier du cache d'appareils. La valeur par défaut est .lsof_hostname dans le répertoire personnel de l'ID utilisateur réel qui exécute lsof, mais cette valeur peut avoir été modifiée lors de la configuration et de la compilation de lsof. (La sortie des options -h et -? affiche le préfixe par défaut actuel, par exemple « .lsof ». ) Le suffixe, hostname, est le premier composant du nom de l'hôte renvoyé par gethostname(2).
Lorsque disponible, la fonction b indique à lsof de créer un nouveau fichier de cache d'appareils à l'emplacement par défaut ou spécifié.
La fonction i indique à lsof d'ignorer le fichier de cache d'appareils par défaut et d'obtenir ses informations sur les appareils via des appels directs au noyau.
La fonction r indique à lsof de lire le fichier de cache d'appareils à l'emplacement par défaut ou spécifié, mais l'empêche de créer un nouveau fichier de cache d'appareils lorsqu'il n'en existe pas ou que celui-ci est mal structuré. La fonction r, lorsqu'elle est spécifiée sans nom de chemin, empêche lsof de mettre à jour un fichier de cache d'appareils incorrect ou obsolète, ou de créer un nouveau fichier à sa place. La fonction r est toujours disponible lorsqu'elle est spécifiée sans argument de nom de chemin ; elle peut être restreinte par les autorisations du processus lsof.
Lorsque disponible, la fonction u indique à lsof de lire le fichier de cache d'appareils à l'emplacement par défaut ou spécifié, si possible, et de le reconstruire, si nécessaire. Il s'agit de la fonction de fichier de cache d'appareils par défaut lorsqu'aucune option -D n'a été spécifiée.
+|-e s exclut le système de fichiers dont le nom de chemin est s des appels de fonction du noyau qui pourraient bloquer. L'option +e exclut les appels de fonction du noyau [stat]({filename}../../stat)(2), lstat(2) et la plupart des appels [readlink]({filename}../../readlink)(2). L'option -e exclut uniquement les appels de fonction du noyau [stat]({filename}../../stat)(2) et lstat(2). Plusieurs systèmes de fichiers peuvent être spécifiés avec des spécifications +|-e distinctes, et chacun peut avoir ou non des appels [readlink]({filename}../../readlink)(2) exclus.
Cette option est actuellement implémentée uniquement pour Linux.
ATTENTION : cette option peut facilement être mal appliquée à d’autres systèmes de fichiers que celui visé, car elle utilise le nom de chemin plutôt que les numéros d’appareil et d’inode, qui sont plus fiables.
(Les numéros d’appareil et d’inode sont obtenus via l’appel système stat(2), qui peut bloquer le processus, et ne sont donc pas disponibles. Voir l’option +|-m m comme alternative possible pour fournir les numéros d’appareil.) Utilisez cette option avec prudence et spécifiez entièrement le nom de chemin du système de fichiers à exclure.
Lorsque des fichiers ouverts sur des systèmes de fichiers exclus sont signalés, il peut ne pas être possible d’obtenir toutes leurs informations. Par conséquent, certaines colonnes d’informations seront vides, les caractères « UNKNOWN » précéderont les valeurs dans la colonne TYPE, et l’option d’exclusion applicable sera ajoutée entre parenthèses à la fin de la colonne NAME. (Certaines informations sur les numéros d’appareil peuvent être disponibles via l’option +|-m m.)
+|-E +E spécifie que les pipes Linux, les sockets UNIX Linux, les sockets INET(6) Linux fermés sur un hôte local, les fichiers de pseudoterminal Linux, l’implémentation de file d’attente de messages POSIX en Linux et les fichiers eventfd doivent être affichés avec les informations sur les points de terminaison, et les fichiers des points de terminaison doivent également être affichés.
Note 1 : les informations sur les points de terminaison des fichiers de socket UNIX ne sont disponibles que lorsque la ligne « features enabled » de la sortie -v contient « uxsockept », et les informations sur les points de terminaison des fichiers de pseudoterminal ne sont disponibles que lorsque la ligne « features enabled » contient « ptyept ».
Note 2 : les informations sur les fichiers de file d’attente de messages POSIX ne sont disponibles que lorsque le système de fichiers mqueue est monté.
Les informations sur les points de terminaison des pipes sont affichées dans la colonne NAME sous la forme « PID,cmd,FDmode », où PID est l’ID de processus du point de terminaison ; cmd est la commande du processus du point de terminaison ; FD est le descripteur du fichier du point de terminaison ; et mode est le mode d’accès du fichier du point de terminaison.
Les informations sur les points de terminaison des pseudoterminaux sont affichées dans la colonne NAME sous la forme « ->/dev/ptsmin PID,cmd,FDmode » ou « PID,cmd,FDmode ». La première forme est pour un périphérique maître ; la seconde, pour un périphérique esclave. « min » est le numéro de périphérique mineur d’un périphérique esclave, et PID, cmd, FD et mode sont les mêmes que pour les informations sur les points de terminaison des pipes. Remarque : les informations sur les points de terminaison des pseudoterminaux ne sont disponibles que lorsque la ligne « features enabled » de la sortie -v contient « ptyept ». De plus, cette fonctionnalité fonctionne sur les noyaux Linux supérieurs à 4.13.0.
Les informations sur les fichiers de socket UNIX sont affichées dans la colonne NAME sous la forme « type=TYPE ->INO=INODE PID,cmd,FDmode », où TYPE est le type de socket ; INODE est le numéro d’inode du socket connecté ; et PID, cmd, FD et mode sont les mêmes que pour les informations sur les points de terminaison des pipes. Remarque : les informations sur les fichiers de socket UNIX ne sont disponibles que lorsque la ligne « features enabled » de la sortie -v contient « uxsockept ».
Les informations sur le point de terminaison du fichier socket INET sont insérées dans la valeur de la colonne NAME sous la forme
`` -> PID,cmd,FDmode '', où PID, cmd, FD et mode sont les mêmes que pour les informations sur le point de terminaison du pipe. Les informations sur le point de terminaison ne sont disponibles que si la socket est utilisée pour la communication inter-processus locale ; les deux points de terminaison sont liés à la même adresse IPv4 ou IPv6 locale.
Les informations sur le point de terminaison de la file d'attente de messages POSIX sont affichées dans la colonne NAME sous la même forme que celles du pipe.
Les informations sur le point de terminaison eventfd sont affichées dans la colonne NAME sous la même forme que celles du pipe. Cette fonctionnalité fonctionne sur les noyaux Linux version 5.2.0 et ultérieures.
Plusieurs occurrences de ces informations peuvent apparaître dans la colonne NAME d'un fichier.
-E spécifie que les fichiers prenant en charge les points de terminaison doivent être affichés avec les informations sur le point de terminaison, mais pas les fichiers des points de terminaison eux-mêmes.
+|-f [cfgGn]
f seul précise la manière dont les arguments de nom de chemin doivent être interprétés. S'il est suivi de c, f, g, G ou n, en n'importe quelle combinaison, il spécifie que la liste des informations sur la structure de fichier du noyau doit être activée (`+`) ou désactivée (`-`).
Normalement, un argument de nom de chemin est considéré comme un nom de système de fichiers s'il correspond à un nom de répertoire monté signalé par [mount]({filename}../../mount)(8), ou s'il représente un périphérique bloc, nommé dans la sortie de la commande mount et associé à un nom de répertoire monté. Lorsque +f est spécifié, tous les arguments de nom de chemin seront considérés comme des noms de système de fichiers, et lsof se plaindra si certains ne le sont pas. Cela peut être utile, par exemple, lorsque le nom du système de fichiers (périphérique monté) n'est pas un périphérique bloc. Cela se produit pour certains systèmes de fichiers CD-ROM.
Lorsque -f est spécifié seul, tous les arguments de nom de chemin seront considérés comme des fichiers simples. Ainsi, par exemple, les arguments ``-f -- /'' indiquent à lsof de rechercher les fichiers ouverts avec un nom de chemin `/`, et non tous les fichiers ouverts dans le système de fichiers `/` (racine).
Veillez à vous assurer que +f et -f sont correctement terminés et ne sont pas suivis d'un caractère (par exemple, du fichier ou du nom du système de fichiers) qui pourrait être interprété comme un paramètre. Par exemple, utilisez ``--'' après +f et -f, comme dans les exemples suivants.
$ lsof +f -- /file/system/name
$ lsof -f -- /file/name
La liste des informations provenant des structures de fichiers du noyau, demandée avec l'option +f [cfgGn], est normalement désactivée et n'est pas disponible en totalité ou en partie pour certains systèmes d'exploitation, tels que les noyaux Linux basés sur /proc versions antérieures à 2.6.22. Lorsque le préfixe de f est un signe plus (`+`), ces caractères demandent des informations sur la structure de fichier :
c nombre d'utilisations de la structure de fichier (non pris en charge sur Linux)
f adresse de la structure de fichier (non pris en charge sur Linux)
g abréviations des indicateurs de fichier (Linux 2.6.22 et versions ultérieures)
Abréviation Indicateur dans le code C (voir open(2))
W O_WRONLY
RW O_RDWR
CR O_CREAT
EXCL O_EXCL
NTTY O_NOCTTY
TR O_TRUNC
AP O_APPEND
ND O_NDELAY
SYN O_SYNC
ASYN O_ASYNC
DIR O_DIRECT
DTY O_DIRECTORY
NFLK O_NOFOLLOW
NATM O_NOATIME
DSYN O_DSYNC
RSYN O_RSYNC
LG O_LARGEFILE
CX O_CLOEXEC
TMPF O_TMPFILE
G indicateurs de fichiers en hexadécimal (Linux 2.6.22 et versions ultérieures)
n adresse du nœud de structure de fichier (non Linux)
Lorsque le préfixe est un signe moins (`-'), les caractères correspondants désactivent l'affichage des valeurs indiquées.
Les adresses de structure de fichier, les nombres d'utilisations, les indicateurs et les adresses de nœud peuvent être utilisés pour détecter plus facilement les fichiers identiques hérités par les processus enfants et les fichiers identiques utilisés par différents processus. La sortie des colonnes de lsof peut être triée en fonction des colonnes de sortie contenant les valeurs et listée pour identifier l'utilisation de fichiers identiques, ou la sortie des champs lsof peut être analysée par un script post-filtre AWK ou Perl, ou par un programme C.
-F f spécifie une liste de caractères, f, qui sélectionne les champs à afficher pour le traitement par un autre programme, et le caractère qui termine chaque champ de sortie. Chaque champ à afficher est spécifié par un seul caractère dans f. Le terminateur de champ par défaut est NL, mais il peut être modifié en NUL (000). Voir la section AFFICHER POUR D'AUTRES PROGRAMMES pour une description des caractères d'identification des champs et du processus de sortie des champs.
Lorsque la liste des caractères de sélection des champs est vide, tous les champs standard sont sélectionnés (à l'exception du champ de périphérique brut, du contexte de sécurité et du champ de zone, pour des raisons de compatibilité) et le terminateur de champ NL est utilisé.
Lorsque la liste des caractères de sélection des champs contient uniquement un zéro (`0'), tous les champs sont sélectionnés (à l'exception du champ de périphérique brut, pour des raisons de compatibilité) et le caractère terminateur NUL est utilisé.
Les autres combinaisons de champs et de leurs caractères terminateur de champ associés doivent être définies avec des entrées explicites dans f, comme décrit dans la section AFFICHER POUR D'AUTRES PROGRAMMES.
Lorsqu'un caractère de sélection de champ identifie un élément que lsof n'affiche pas normalement, par exemple PPID, sélectionné avec l'option -R - spécification du caractère de champ, par exemple ``-FR'' - affiche également l'élément.
Lorsque la liste des caractères de sélection des champs contient le caractère unique `?', lsof affichera une liste d'aide des caractères d'identification des champs. (Échappez le caractère `?' comme l'exige votre shell.)
-g [s] exclut ou sélectionne l'affichage des fichiers pour les processus dont les identifiants de groupe de processus (PGID) facultatifs sont inclus dans l'ensemble séparé par des virgules s, par exemple ``123'' ou ``123,^456''. (Il ne doit y avoir aucun espace dans l'ensemble.)
Les numéros PGID qui commencent par `^' (négation) représentent des exclusions.
Plusieurs numéros PGID sont joints dans un seul ensemble OU avant de participer à une sélection par AND. Cependant, les exclusions PGID sont appliquées sans OU ou AND et prennent effet avant que d'autres critères de sélection ne soient appliqués.
L'option -g active également l'affichage des numéros PGID. Lorsqu'elle est spécifiée sans ensemble PGID, c'est tout ce qu'elle fait.
-H indique à `lsof` d'afficher des tailles lisibles par l'homme, par exemple 123,4K 456,7M.
-i [i] sélectionne l'affichage des fichiers dont l'une des adresses Internet correspond à l'adresse spécifiée dans i. Si aucune adresse n'est spécifiée, cette option sélectionne l'affichage de tous les fichiers Internet et réseau 25 (HP-UX).
Si -i4 ou -i6 est spécifié sans adresse suivante, seuls les fichiers de la version IP indiquée, IPv4 ou IPv6, sont affichés. (Une spécification IPv6 ne peut être utilisée que si la variante prend en charge IPv6, comme indiqué par [46] et IPv[46] dans la sortie de lsof avec les options -h ou -?). Spécifier séquentiellement -i4, suivi de -i6 est la même chose que spécifier -i, et vice versa. Spécifier -i4 ou -i6 après -i est la même chose que spécifier -i4 ou -i6 seul.
Plusieurs adresses (jusqu’à une limite de 100) peuvent être spécifiées avec plusieurs options -i. Elles sont combinées dans un ensemble OR unique avant de participer à la sélection des options AND.
Une adresse Internet est spécifiée sous la forme suivante (les éléments entre crochets sont facultatifs) :
[46][protocole][@nom_hôte|adresse_hôte][:service|port]
où :
`46` spécifie la version IP, IPv4 ou IPv6,
qui s’applique à l’adresse suivante.
`6` ne peut être spécifié que si la variante UNIX prend en charge IPv6. Si ni `4` ni `6` n’est spécifié, l’adresse suivante s’applique à toutes les versions IP.
`protocole` est un nom de protocole : TCP, UDP ou UDPLITE.
`nom_hôte` est un nom d’hôte Internet. Sauf si une version IP spécifique est spécifiée, les fichiers réseau ouverts associés aux noms d’hôtes de toutes les versions seront sélectionnés.
`adresse_hôte` est une adresse IPv4 numérique sous forme décimale ou une adresse IPv6 numérique sous forme hexadécimale, entre crochets si la variante UNIX prend en charge IPv6. Lorsqu’une version IP est sélectionnée, seules ses adresses numériques peuvent être spécifiées.
`service` est un nom dans `/etc/services` : par exemple, smtp ou une liste de ces noms.
`port` est un numéro de port ou une liste de numéros de ports.
Les options IPv6 ne peuvent être utilisées que si la variante UNIX prend en charge IPv6. Pour savoir si la variante prend en charge IPv6, exécutez lsof et spécifiez les options `-h` ou `-?` (aide). Si la description affichée de l’option `-i` contient `[46]` et `IPv[46]`, IPv6 est pris en charge.
Les noms d’hôtes et les adresses IPv4 ne peuvent pas être spécifiés si la sélection des fichiers réseau est limitée à IPv6 avec `-i 6`. Les noms d’hôtes et les adresses IPv6 ne peuvent pas être spécifiés si la sélection des fichiers réseau est limitée à IPv4 avec `-i 4`. Lorsqu’une adresse de fichier réseau IPv4 ouvert est mappée dans une adresse IPv6, le type du fichier ouvert sera IPv6, et non IPv4, et son affichage sera sélectionné par `6`, et non par `4`.
Au moins un composant d’adresse : `4`, `6`, `protocole`, `nom_hôte`, `adresse_hôte` ou `service` doit être fourni. Le caractère `@` en tête de la spécification d’hôte est toujours requis, ainsi que les deux points `:` en tête de la spécification de port. Spécifiez soit un nom d’hôte, soit une adresse d’hôte. Spécifiez soit une liste de noms de service, soit une liste de numéros de ports. Si une liste de noms de service est spécifiée, le protocole doit également être spécifié si les numéros de port TCP, UDP et UDPLITE pour le nom de service sont différents. Utilisez n’importe quelle casse (majuscule ou minuscule) pour le protocole.
Les noms de service et les numéros de port peuvent être combinés dans une liste dont les entrées sont séparées par des virgules et dont les entrées de plage numérique sont séparées par des tirets. Il ne doit y avoir aucun espace intégré, et tous les noms de service doivent appartenir au protocole spécifié. Étant donné que les noms de service peuvent contenir des tirets, l'entrée de départ d'une plage ne peut pas être un nom de service ; il peut s'agir d'un numéro de port, cependant.
Voici quelques exemples d'adresses :
-i6 - IPv6 uniquement
TCP :25 - TCP et port 25
@1.2.3.4 - Adresse IPv4 Internet 1.2.3.4
@[3ffe :1ebc ::1] :1234 - Adresse IPv6 Internet
3fe :1ebc ::1, port 1234
UDP :who - Port de service UDP who
_ :513 - TCP, port 513 et nom d'hôte lsof.itap
tcp@foo :1-10,smtp,99 - TCP, ports 1 à 10,
nom de service smtp, port 99, nom d'hôte foo
tcp@bar :1-smtp - TCP, ports 1 à smtp, hôte bar
:time - TCP, UDP ou UDPLITE, port de service time
-K k sélectionne la liste des tâches (threads) des processus, sur les dialectes où le rapport sur les tâches (threads) est pris en charge. (Si la sortie d'aide, c'est-à-dire la sortie des options -h ou -?, affiche cette option, alors le rapport sur les tâches (threads) est pris en charge par le dialecte.)
Si -K est suivi d'une valeur, k, celle-ci doit être ``i''. Cela permet à lsof d'ignorer les tâches, en particulier dans le cas par défaut où tout est affiché et aucune autre option n'est spécifiée.
Lorsque -K et -a sont tous deux spécifiés sur Linux, et que les tâches d'un processus principal sont sélectionnées par d'autres options, le processus principal sera également répertorié comme s'il s'agissait d'une tâche, mais sans ID de tâche. (Voir la description de la colonne TID dans la section OUTPUT.)
Là où la version FreeBSD prend en charge les threads, tous les threads seront répertoriés avec leurs ID.
En général, les threads et les tâches héritent des fichiers de l'appelant, mais peuvent en fermer certains et en ouvrir d'autres, de sorte que lsof signale toujours tous les fichiers ouverts des threads et des tâches.
-k k spécifie un fichier de liste de noms de noyau, k, à la place de /vmunix, /mach, etc. -k n'est pas disponible sous AIX sur IBM RISC/System 6000.
-l empêche la conversion des numéros d'ID utilisateur en noms de connexion. Ceci est également utile lorsque la recherche de noms de connexion ne fonctionne pas correctement ou est lente.
+|-L [l] active (`+`) ou désactive (`-`) l'affichage des nombres de liens de fichiers, lorsque cela est disponible - par exemple, ce n'est pas disponible pour les sockets, ou la plupart des FIFO et des canaux.
Lorsque +L est spécifié sans nombre suivant, tous les nombres de liens seront affichés. Lorsque -L est spécifié (par défaut), aucun nombre de liens ne sera affiché.
Lorsque +L est suivi d'un nombre, seuls les fichiers ayant un nombre de liens inférieur à ce nombre seront affichés. (Aucun nombre ne peut suivre -L.) Une spécification de la forme ``+L1'' sélectionnera les fichiers ouverts qui ont été désolidarisés. Une spécification de la forme ``+aL1 <file_system>'' sélectionnera les fichiers ouverts désolidarisés sur le système de fichiers spécifié.
Pour d'autres comparaisons de nombres de liens, utilisez la sortie de champ (-F) et un script ou un programme de post-traitement.
+|-m m spécifie un fichier de mémoire de noyau alternatif ou active le traitement de compléments de table de montage.
L'option -m m spécifie un fichier mémoire du noyau, m, à la place de /dev/kmem ou /dev/mem ; par exemple, un fichier de vidage de la mémoire en cas de plantage.
L'option +m demande qu'un fichier supplémentaire de montage soit écrit dans le fichier de sortie standard. Toutes les autres options sont ignorées silencieusement.
Il y aura une ligne dans le fichier supplémentaire de montage pour chaque système de fichiers monté, contenant le répertoire du système de fichiers monté, suivi d'un seul espace, suivi du numéro de périphérique au format hexadécimal « 0x » ; par exemple :
/ 0x801
Lsof peut utiliser le fichier supplémentaire de montage pour obtenir les numéros de périphériques des systèmes de fichiers lorsque stat(2) ou lstat(2) ne peuvent pas le faire.
L'option +m m identifie m comme un fichier supplémentaire de montage.
Remarque : les options +m et +m m ne sont pas disponibles pour tous les dialectes pris en charge. Vérifiez la sortie des options -h ou -? de lsof pour voir si les options +m et +m m sont disponibles.
+|-M Active (+) ou désactive (-) le signalement des enregistrements de portmapper pour les ports TCP, UDP et UDPLITE locaux, lorsque le mappage de ports est pris en charge. (Voir le dernier paragraphe de cette description d'option pour des informations sur les environnements dans lesquels le signalement des enregistrements de portmapper est pris en charge.)
Le mode de signalement par défaut est défini par le créateur de lsof avec la macro HASPMAPENABLED dans le fichier d'en-tête machine.h du dialecte ; lsof est distribué avec la macro HASPMAPENABLED désactivée, de sorte que le signalement du portmapper est désactivé par défaut et doit être demandé avec +M. La spécification de l'option -h ou -? de lsof signalera le mode par défaut. Il est acceptable de désactiver le signalement de l'enregistrement de portmapper lorsqu'il est déjà désactivé ou de l'activer lorsqu'il est déjà activé. Lorsque le signalement de l'enregistrement de portmapper est activé, lsof affiche l'enregistrement de portmapper (le cas échéant) pour les ports TCP, UDP ou UDPLITE locaux entre crochets immédiatement après les numéros de port ou les noms de service ; par exemple : « :1234[nom] » ou « :nom[100083] ». Les informations d'enregistrement peuvent être un nom ou un nombre, en fonction de ce que le programme d'enregistrement a fourni au portmapper lors de l'enregistrement du port.
Lorsque le signalement de l'enregistrement de portmapper est activé, lsof peut fonctionner un peu plus lentement ou même être bloqué lorsque l'accès au portmapper devient congestionné ou s'arrête. Inversez le mode de signalement pour déterminer si le signalement de l'enregistrement de portmapper ralentit ou bloque lsof.
À des fins de signalement de l'enregistrement de portmapper, lsof considère qu'un port TCP, UDP ou UDPLITE est local si : il se trouve dans la partie locale de sa structure de noyau ; ou s'il se trouve dans la partie étrangère de sa structure de noyau et que les adresses Internet locales et étrangères sont identiques ; ou s'il se trouve dans la partie étrangère de sa structure de noyau et que l'adresse Internet étrangère est INADDR_LOOPBACK (127.0.0.1). Cette règle peut amener lsof à ignorer certains ports étrangers sur les machines dotées de plusieurs interfaces lorsque l'adresse Internet étrangère se trouve sur une interface différente de l'interface locale.
Consultez la FAQ de lsof (la section FAQ indique son emplacement) pour plus d’informations sur les problèmes liés au signalement de l’enregistrement du portmapper.
Le signalement de l’enregistrement du portmapper est pris en charge uniquement pour les dialectes qui disposent de fichiers d’en-tête RPC. (Certaines distributions Linux avec GlibC 2.14 ne les ont pas.) Lorsque le signalement de l’enregistrement du portmapper est pris en charge, la sortie d’aide -h ou -? affichera l’option +|-M.
-n empêche la conversion des numéros de réseau en noms d’hôte pour les fichiers réseau. L’empêchement de la conversion peut rendre lsof plus rapide. Il est également utile lorsque la résolution des noms d’hôte ne fonctionne pas correctement.
-N sélectionne l’affichage des fichiers NFS.
-o indique à lsof d’afficher le décalage de fichier en permanence. Cela modifie le titre de la colonne SIZE/OFF en OFFSET. Remarque : sur certains dialectes UNIX, lsof ne peut pas obtenir d’informations précises ou cohérentes sur le décalage de fichier à partir de ses sources de données du noyau, parfois uniquement pour certains types de fichiers (par exemple, les fichiers socket). Consultez la FAQ de lsof (la section FAQ indique son emplacement) pour plus d’informations.
Les options -o et -s sont mutuellement exclusives ; elles ne peuvent pas être toutes les deux spécifiées. Lorsque ni l’une ni l’autre n’est spécifiée, lsof affiche la valeur appropriée et disponible (taille ou décalage) pour le type de fichier.
-o o définit le nombre de chiffres décimaux (o) à imprimer après « 0t » pour un décalage de fichier avant que le format ne passe à « 0x... ». Une valeur o de zéro (illimitée) indique à lsof d’utiliser le format « 0t » pour toute la sortie de décalage.
Cette option n’indique PAS à lsof d’afficher le décalage en permanence ; spécifiez -o (sans chiffre à la fin) pour ce faire. -o o ne spécifie que le nombre de chiffres après « 0t » dans la sortie de taille et de décalage mixtes ou dans la sortie de décalage uniquement. Ainsi, par exemple, pour indiquer à lsof d’afficher le décalage en permanence avec un nombre de chiffres décimaux de 10, utilisez :
-o -o 10
ou
-oo10
Le nombre par défaut de chiffres autorisés après « 0t » est généralement de 8, mais il peut avoir été modifié par le créateur de lsof. Consultez la description de l’option -o o dans la sortie de l’option -h ou -? pour déterminer la valeur par défaut en vigueur.
-O indique à lsof de contourner la stratégie qu’il utilise pour éviter d’être bloqué par certaines opérations du noyau, c’est-à-dire en les effectuant dans des processus enfants dérivés. Consultez les sections BLOQUAGES ET DÉLAIS et ÉVITER LES BLOQUAGES DU NOYAU pour plus d’informations sur les opérations du noyau qui peuvent bloquer lsof.
Bien que l’utilisation de cette option réduise le surcoût de démarrage de lsof, elle peut également amener lsof à se bloquer lorsque le noyau ne répond pas à une fonction. Utilisez cette option avec prudence.
-p s exclut ou sélectionne l’affichage des fichiers pour les processus dont les identifiants de processus (PID) facultatifs sont inclus dans l’ensemble séparé par des virgules s, par exemple « 123 » ou « 123,^456 ». (Il ne doit y avoir aucun espace dans l’ensemble.)
Les numéros d’ID de processus qui commencent par `^` (négation) représentent des exclusions.
Plusieurs numéros d’ID de processus sont joints dans un seul ensemble OR avant de participer à une sélection AND. L’option -P empêche la conversion des numéros de port en noms de port pour les fichiers réseau (le mappage est généralement appris à partir de /etc/services). Empêcher la conversion peut rendre l’exécution de lsof un peu plus rapide. C’est également utile lorsque la recherche de noms de port ne fonctionne pas correctement.
-Q ignore les termes de recherche ayant échoué. Lorsque lsof est invité à rechercher les utilisateurs d’un fichier, ou les utilisateurs d’un périphérique, ou un ID de processus spécifique, ou certains protocoles utilisés par cet ID de processus, et ainsi de suite, lsof renvoie une erreur si l’un des résultats de recherche est vide. L’option -Q modifiera ce comportement de sorte que lsof renvoie à la place un code de sortie réussi (0) même si l’un des résultats de recherche est vide. De plus, les termes de recherche manquants ne seront pas signalés à stderr.
+|-r [t[c<N>][m<fmt>]]
place lsof en mode répétitif. Dans ce mode, lsof liste les fichiers ouverts comme sélectionné par les autres options, attend t secondes (par défaut quinze), puis répète la liste, en attendant et en listant de manière répétitive jusqu’à ce qu’il soit arrêté par une condition définie par le préfixe de l’option.
Si le préfixe est un \`-\`, le mode répétitif est infini. Lsof doit être arrêté avec un signal d’interruption ou de fin. \`c<N\>` est utilisé pour spécifier les limites de la répétition ; si le nombre d’itérations atteint `<N>`, Lsof s’arrête.
Si le préfixe est un `+`, le mode répétitif se termine lors du premier cycle où aucun fichier ouvert n’est répertorié et, bien sûr, lorsque lsof est arrêté avec un signal d’interruption ou de fin. Lorsque le mode répétitif se termine parce qu’aucun fichier n’est répertorié, le code de sortie du processus sera zéro si des fichiers ouverts ont déjà été répertoriés ; un, si aucun n’a jamais été répertorié.
Lsof marque la fin de chaque liste : si la sortie de champ est en cours (l’option -F a été spécifiée), le marqueur par défaut est `m ; sinon, le marqueur par défaut est `========`. Le marqueur est suivi d’un caractère NL.
L’argument facultatif « m<fmt> » spécifie un format pour la ligne de marqueur. Les caractères <fmt> qui suivent \`m\` sont interprétés comme une spécification de format pour la fonction strftime(3), lorsque cette dernière et la fonction localtime(3) sont disponibles dans la bibliothèque C du dialecte. Consultez la documentation de strftime(3) pour savoir ce qui peut apparaître dans sa spécification de format. Notez que lorsque la sortie de champ est demandée avec l’option -F, <fmt> ne peut pas contenir le format NL, \`\`%n\`. Notez également que lorsque <fmt> contient des espaces ou d’autres caractères qui affectent l’interprétation des arguments par le shell, <fmt> doit être correctement entouré de guillemets.
Le mode répétitif réduit la surcharge de démarrage de lsof, il est donc plus efficace d’utiliser ce mode que d’appeler lsof de manière répétitive à partir d’un script shell, par exemple.
Pour utiliser le mode répétitif de la manière la plus efficace, accompagnez +|-r de la spécification d’autres options de sélection de lsof, afin que la quantité d’accès à la mémoire du noyau effectuée par lsof soit maintenue au minimum. Les options qui filtrent au niveau du processus (par exemple, -c, -g, -p, -u) sont les sélecteurs les plus efficaces.
Le mode de répétition est utile lorsqu'il est associé à la sortie de champ (voir la description de l'option -F) et à un script awk ou Perl de supervision, ou à un programme C.
-R indique à lsof d'afficher le numéro d'identification du processus parent dans la colonne PPID.
-s [p:s] s seul indique à lsof d'afficher la taille du fichier en permanence. Cela modifie le titre de la colonne de sortie SIZE/OFF en SIZE. Si le fichier n'a pas de taille, rien n'est affiché.
La forme optionnelle -s p:s n'est disponible que pour certains dialectes et uniquement lorsque la sortie d'aide -h ou -? l'indique.
Lorsque la forme optionnelle est disponible, le s peut être suivi d'un nom de protocole (p), soit TCP ou UDP, d'un deux-points (:) et d'une liste de noms d'état de protocole séparés par des virgules. Cette option permet d'exclure les fichiers TCP et UDP ouverts si leurs noms d'état sont dans la liste (s) précédés d'un ^, ou de les inclure s'ils ne sont pas précédés de ce caractère.
Les dialectes qui prennent en charge cette option peuvent ne prendre en charge qu'un seul protocole. Lorsqu'un protocole non pris en charge est spécifié, un message s'affiche indiquant que les noms d'état pour le protocole ne sont pas disponibles.
Lorsqu'une liste d'inclusion est définie, seuls les fichiers réseau dont les noms d'état se trouvent dans la liste seront présents dans la sortie de lsof. Par conséquent, la spécification d'un seul nom d'état signifie que seuls les fichiers réseau avec ce nom d'état seront répertoriés.
La casse n'a pas d'importance dans les noms de protocole ou d'état, mais il ne doit pas y avoir d'espaces et les deux-points (:) séparant le nom du protocole (p) et la liste des noms d'état (s) sont obligatoires.
Si seuls les fichiers TCP et UDP doivent être répertoriés, comme contrôlé par les exclusions et inclusions spécifiées, l'option -i doit également être spécifiée. Si seuls les fichiers d'un seul protocole doivent être répertoriés, ajoutez son nom comme argument de l'option -i.
Par exemple, pour répertorier uniquement les fichiers réseau avec l'état TCP LISTEN, utilisez :
-iTCP -sTCP:LISTEN
Ou, par exemple, pour répertorier les fichiers réseau avec tous les états UDP sauf Idle, utilisez :
-iUDP -sUDP:^Idle
Les noms d'état varient selon les dialectes UNIX, il n'est donc pas possible de fournir une liste complète. Certains noms d'état TCP courants sont : CLOSED, IDLE, BOUND, LISTEN, ESTABLISHED, SYN_SENT, SYN_RCDV, ESTABLISHED, CLOSE_WAIT, FIN_WAIT1, CLOSING, LAST_ACK, FIN_WAIT_2 et TIME_WAIT. Deux noms d'état UDP courants sont Unbound et Idle.
Voir les FAQ de lsof (la section FAQ indique son emplacement) pour plus d'informations sur la façon d'utiliser l'exclusion et l'inclusion de l'état du protocole, y compris des exemples.
Les options -o (sans chiffre décimal suivant) et -s (sans nom de protocole et liste d'état suivants) sont mutuellement exclusives ; elles ne peuvent pas être toutes les deux spécifiées. Lorsque ni l'une ni l'autre n'est spécifiée, lsof affiche la valeur appropriée et disponible pour le type de fichier (taille ou décalage).
Étant donné que certains types de fichiers n'ont pas de taille réelle (sockets, FIFO, tubes, etc.), lsof affiche pour leur taille les quantités de contenu dans leurs tampons de noyau associés, si possible.
-S [t] spécifie une valeur de délai d'attente en secondes (facultative) pour les fonctions du noyau - `lstat(2)`, `[readlink]({filename}../../readlink)(2)` et `[stat]({filename}../../stat)(2)` - qui pourraient autrement provoquer un blocage. La valeur minimale pour `t` est deux ; la valeur par défaut est quinze ; lorsqu'aucune valeur n'est spécifiée, la valeur par défaut est utilisée.
Voir la section BLOCKS AND TIMEOUTS pour plus d'informations.
-T [t] permet de contrôler l'affichage de certaines informations TCP/TPI, également affichées par `[netstat]({filename}../../netstat)(1)`, après les adresses réseau. Dans la sortie normale, les informations apparaissent entre parenthèses, chaque élément étant identifié par un mot-clé, suivi d'un '=' et séparé des autres par un seul espace :
<Nom de l'état TCP ou TPI>
QR=<longueur de la file d'attente de lecture>
QS=<longueur de la file d'attente d'envoi>
SO=<options et valeurs du socket>
SS=<états du socket>
TF=<indicateurs et valeurs TCP>
WR=<longueur de la fenêtre de lecture>
WW=<longueur de la fenêtre d'écriture>
Toutes les valeurs ne sont pas signalées pour tous les dialectes UNIX. Les valeurs des éléments (lorsqu'elles sont disponibles) sont affichées après le nom de l'élément et le signe '='.
Lorsque le mode de sortie de champ est en vigueur (voir SORTIE POUR D'AUTRES PROGRAMMES), chaque élément apparaît en tant que champ avec un caractère 'T' en tête.
-T sans caractères de clé suivants désactive l'affichage des informations TCP/TPI.
-T avec des caractères suivants permet de sélectionner l'affichage des informations TCP/TPI spécifiques :
f sélectionne l'affichage des options du socket, des états et des valeurs, ainsi que des indicateurs et des valeurs TCP.
q sélectionne l'affichage de la longueur de la file d'attente.
s sélectionne l'affichage de l'état de la connexion.
w sélectionne l'affichage de la taille de la fenêtre.
Toutes les sélections ne sont pas activées pour certains dialectes UNIX. L'état peut être sélectionné pour tous les dialectes et est affiché par défaut. La sortie d'aide -h ou -? pour l'option -T indique les sélections qui peuvent être utilisées avec le dialecte UNIX.
Lorsque -T est utilisé pour sélectionner des informations, c'est-à-dire qu'il est suivi d'un ou de plusieurs caractères de sélection, l'affichage de l'état est désactivé par défaut et il doit être sélectionné explicitement à nouveau dans les caractères qui suivent -T. (Dans ce cas, la valeur par défaut est équivalente à -Ts.) Par exemple, si les longueurs de file d'attente et l'état sont souhaités, utilisez -Tqs.
Les options de socket, les états de socket, certaines valeurs de socket, les indicateurs TCP et une valeur TCP peuvent être signalés (lorsqu'ils sont disponibles dans le dialecte UNIX) sous la forme des noms qui apparaissent généralement après SO_, so_, SS_, TCP_ et TF_ dans les fichiers d'en-tête du dialecte - le plus souvent <sys/socket.h>, <sys/socketvar.h> et <netinet/tcp_var.h>. Consultez ces fichiers d'en-tête pour connaître la signification des indicateurs, des options, des états et des valeurs.
``SO='' précède les options et les valeurs du socket ; ``SS='', les états du socket ; et ``TF='', les indicateurs et les valeurs TCP.
Si un indicateur ou une option a une valeur, cette valeur suit un '=' et le nom - par exemple, SO=LINGER=5'',SO=QLIM=5'', ``TF=MSS=512''. Les sept valeurs suivantes peuvent être signalées :
Nom Signalé Description (Symbole courant)
KEEPALIVE temps d’attente pour maintenir la connexion (SO_KEEPALIVE)
LINGER temps d’attente pour la fermeture (SO_LINGER)
MSS taille maximale du segment (TCP_MAXSEG)
PQLEN connexions partielles dans la file d’attente d’écoute
QLEN connexions établies dans la file d’attente d’écoute
QLIM limite des connexions établies dans la file d’attente d’écoute
RCVBUF longueur du tampon de réception (SO_RCVBUF)
SNDBUF longueur du tampon d’envoi (SO_SNDBUF)
Les détails concernant les options et valeurs de socket, les états de socket et les indicateurs et valeurs TCP qui peuvent être affichés pour des variantes UNIX spécifiques peuvent être trouvés dans les réponses aux questions « Pourquoi lsof n’affiche-t-il pas les options de socket, les états de socket et les indicateurs et valeurs TCP pour ma variante ? » et « Pourquoi lsof n’affiche-t-il pas le nombre de connexions partielles dans la file d’attente d’écoute pour ma variante ? » dans la FAQ de lsof (la section FAQ indique son emplacement). Sur Linux, cette option affiche également l’état des sockets de domaine UNIX.
-t produit une sortie concise composée uniquement des identifiants de processus (sans en-tête), afin de faciliter son utilisation de manière programmatique. par exemple :
# recharger tout ce qui utilise une ancienne version de SSL
lsof -t /lib/*/libssl.so.* | xargs -r kill -HUP
# obtenir la liste des processus, puis itérer sur eux (uniquement pour Bash)
mapfile -t pids < <(
lsof -wt /var/log/your.log
)
for pid in "${pids[@]}" ; do
your_command -p "$pid"
done
L’option -t implique l’option -w.
-u s sélectionne la liste des fichiers pour l’utilisateur dont les noms d’utilisateur ou les numéros d’identification utilisateur sont dans l’ensemble séparé par des virgules s, par exemple « abe » ou « 548,root ». (Il ne doit pas y avoir d’espaces dans l’ensemble.)
Plusieurs noms d’utilisateur ou numéros d’identification utilisateur sont combinés dans un seul ensemble OU avant de participer à une sélection d’options combinées (AND).
Si un nom d’utilisateur ou un numéro d’identification utilisateur est précédé d’un « ^ », il devient une négation : c’est-à-dire que les fichiers des processus appartenant au nom d’utilisateur ou à l’identification utilisateur ne seront jamais répertoriés. Une sélection de nom d’utilisateur ou d’identification utilisateur négative n’est ni combinée (AND), ni ajoutée à un ensemble (OU) avec d’autres sélections ; elle est appliquée avant toutes les autres sélections et exclut absolument la liste des fichiers du processus. Par exemple, pour demander à lsof d’exclure la liste des fichiers appartenant aux processus root, spécifiez « -u^root » ou « -u^0 ».
-U sélectionne la liste des fichiers de socket de domaine UNIX.
-v sélectionne la liste des informations de version de lsof, y compris : numéro de révision ; date de construction du binaire lsof ; qui a construit le binaire et où ; le nom du compilateur utilisé pour construire le binaire lsof ; le numéro de version du compilateur lorsque cela est facilement disponible ; les indicateurs de compilateur et de chargeur utilisés pour construire le binaire lsof ; et les informations système, généralement la sortie de l’option -a de uname.
-V demande à lsof d’indiquer les éléments pour lesquels il a été invité à rechercher et qu’il n’a pas pu trouver : noms de commandes, noms de fichiers, adresses ou fichiers Internet, noms d’utilisateur, fichiers NFS, PID, PGID et UID.
Lorsque d’autres options sont combinées (AND) avec des options de recherche, ou que des options de compilation limitent la liste de certains fichiers, lsof peut ne pas signaler qu’il n’a pas pu trouver un élément de recherche lorsqu’une option combinée (AND) ou une option de compilation empêche la liste du fichier ouvert contenant l’élément de recherche trouvé.
Par exemple, lsof -V -iTCP@foobar -a -d 999'' peut ne pas signaler l'échec de la recherche de fichiers ouverts àTCP@foobar'' et peut ne pas afficher de résultats si aucun fichier n'a un numéro de descripteur de fichier de 99. Une situation similaire se produit lorsque HASSECURITY et HASNOSOCKSECURITY sont définis au moment de la compilation et qu'ils empêchent l'affichage des fichiers ouverts.
+|-w Active (+) ou désactive (-) la suppression des messages d'avertissement.
Le programme de construction de lsof peut choisir d'avoir les messages d'avertissement désactivés ou activés par défaut. L'état par défaut des messages d'avertissement est indiqué dans la sortie de l'option -h ou -?. Désactiver les messages d'avertissement lorsqu'ils sont déjà désactivés ou les activer lorsqu'ils sont déjà activés est acceptable.
L'option -t implique l'option -w.
-x [fl] peut accompagner les options +d et +D pour diriger leur traitement afin de traverser les liens symboliques et/ou les points de montage du système de fichiers rencontrés lors de l'analyse du répertoire (+d) ou de l'arborescence de répertoires (+D).
Si -x est spécifié seul, sans paramètre suivant, le traitement de traversée des liens symboliques et des points de montage du système de fichiers est activé. Notez que lorsque -x est spécifié sans paramètre, l'argument suivant doit commencer par '-' ou '+'.
Le paramètre optionnel 'f' active le traitement de traversée des points de montage du système de fichiers ; 'l', le traitement de traversée des liens symboliques.
L'option -x ne peut pas être fournie sans fournir également une option +d ou +D.
-X Il s'agit d'une option spécifique à une dialecte.
AIX :
Cette option IBM AIX RISC/System 6000 demande l'affichage des références aux fichiers texte exécutables et aux bibliothèques partagées.
AVERTISSEMENT : étant donné que cette option utilise la fonction readx() du noyau, son utilisation sur un système AIX occupé peut entraîner le blocage complet d'un processus d'application, de sorte qu'il ne puisse être ni tué ni arrêté. Je n'ai jamais vu cela se produire ni reçu de rapport à ce sujet, mais je pense qu'il existe une possibilité, même faible, que cela puisse se produire.
Par défaut, l'utilisation de readx() est désactivée. Sur AIX 5L et les versions ultérieures, lsof peut avoir besoin d'une autorisation setuid-root pour effectuer les actions demandées par cette option.
Le programme de construction de lsof peut spécifier que l'option -X soit restreinte aux processus dont l'UID réel est root. Si cela a été fait, l'option -X n'apparaîtra pas dans la sortie d'aide des options -h ou -? à moins que l'UID réel du processus lsof ne soit root. La distribution par défaut de lsof permet à tout UID de spécifier -X, donc par défaut, elle apparaîtra dans la sortie d'aide.
Lorsque l'utilisation de readx() d'AIX est désactivée, lsof peut ne pas être en mesure de signaler des informations pour toutes les références de fichiers texte et de chargeur, mais il peut également éviter d'aggraver un bogue de recherche de répertoire du noyau AIX, connu sous le nom de bogue de l'ID de segment obsolète.
La fonction readx(), utilisée par lsof ou tout autre programme pour accéder à certaines sections de la mémoire virtuelle du noyau, peut déclencher le bogue de l'ID de segment obsolète. Cela peut amener la fonction dir_search() du noyau à croire à tort qu'une partie d'une copie en mémoire d'un répertoire du système de fichiers a été remise à zéro. Un autre processus d'application, distinct de lsof, demandant au noyau de rechercher dans le répertoire - par exemple, en utilisant open(2) - peut amener dir_search() à boucler indéfiniment, ce qui bloque le processus d'application.
Consultez la FAQ de lsof (la section FAQ indique son emplacement) et le fichier 00README de la distribution lsof pour une description plus complète du bogue « Stale Segment ID », de son APAR et des méthodes permettant de définir l’utilisation de readx() lors de la compilation de lsof.
Linux : Cette option Linux demande à lsof de ne pas afficher les informations sur tous les fichiers TCP, UDP et UDPLITE IPv4 et IPv6 ouverts.
Cette option Linux est la plus utile lorsque le système a un très grand nombre de fichiers TCP, UDP et UDPLITE ouverts, et que le traitement de leurs informations dans les fichiers /proc/net/tcp* et /proc/net/udp* prendrait beaucoup de temps pour lsof, et que l’affichage de ces informations n’est pas nécessaire.
Utilisez cette option avec prudence et uniquement lorsque vous êtes certain que les informations que vous souhaitez afficher avec lsof ne sont pas associées aux fichiers de socket TCP, UDP ou UDPLITE ouverts.
Solaris 10 et versions ultérieures : Cette option Solaris 10 et versions ultérieures demande l’affichage des chemins mis en cache pour les fichiers qui ont été supprimés, c’est-à-dire supprimés avec rm(1) ou unlink(2).
Le chemin mis en cache est suivi de la chaîne « (supprimé) » afin d’indiquer que le chemin par lequel le fichier a été ouvert a été supprimé.
Étant donné que les modifications apportées au chemin, c’est-à-dire les renommages avec mv(1) ou rename(2), ne sont pas enregistrées dans le chemin mis en cache, ce que lsof affiche n’est que le chemin par lequel le fichier a été ouvert, et non son chemin final, qui peut être différent.
-z [z] spécifie la manière dont les informations de zone Solaris 10 et versions ultérieures doivent être gérées.
Sans argument suivant, par exemple, NO z, cette option indique que les noms de zone doivent être affichés dans la colonne ZONE.
L’option -z peut être suivie d’un nom de zone, z. Cela indique à lsof d’afficher uniquement les fichiers ouverts pour les processus de cette zone. Plusieurs options -z z et leurs arguments peuvent être spécifiés pour former une liste de noms de zone. Tout fichier ouvert de tout processus dans l’une des zones sera affiché, sous réserve des autres conditions spécifiées par les autres options et arguments.
-Z [Z] spécifie la manière dont les contextes de sécurité SELinux doivent être gérés. La prise en charge de cette option et du caractère de sortie du champ « Z » est désactivée lorsque SELinux est désactivé dans le noyau Linux en cours d’exécution.
Pour plus d’informations sur le caractère de sortie du champ « Z », consultez la section « SORTIE POUR D’AUTRES PROGRAMMES ».
Sans argument suivant, par exemple, NO Z, cette option indique que les contextes de sécurité doivent être affichés dans la colonne CONTEXTE DE SÉCURITÉ.
L’option -Z peut être suivie d’un nom de contexte de sécurité générique, Z. Cela indique à lsof d’afficher uniquement les fichiers ouverts pour les processus de ce contexte de sécurité. Plusieurs options -Z Z et leurs arguments peuvent être spécifiés pour former une liste de contextes de sécurité. Tout fichier ouvert de tout processus dans l’un des contextes de sécurité sera affiché, sous réserve des autres conditions spécifiées par les autres options et arguments. Notez que Z peut être A:B:C ou *:B:C ou A:B:* ou *:*:* pour correspondre au contexte A:B:C.
-- Le double signe moins est une option qui signale la fin des options avec clé.
Elle peut être utilisée, par exemple, lorsque le premier nom de fichier commence par un signe moins. Elle peut également être utilisée lorsque l’absence d’une valeur pour la dernière option avec clé doit être indiquée par la présence d’un signe moins dans l’option suivante et avant le début des noms de fichiers.
names Il s’agit des noms de chemin d’accès de fichiers spécifiques à lister. Les liens symboliques sont résolus avant utilisation. Le premier nom peut être séparé des options précédentes par l’option \`\`--''.
Si un nom est le répertoire de montage d’un système de fichiers ou le périphérique du système de fichiers, lsof listera tous les fichiers ouverts sur le système de fichiers. Pour être considéré comme un système de fichiers, le nom doit correspondre à un nom de répertoire de montage dans la sortie de [mount]({filename}../../mount)(8), ou correspondre au nom d’un périphérique de bloc associé à un nom de répertoire de montage. L’option +|-f peut être utilisée pour forcer lsof à considérer un nom comme un identifiant de système de fichiers (+f) ou comme un simple fichier (-f).
Si un nom est un chemin d’accès à un répertoire qui n’est pas le nom de répertoire de montage d’un système de fichiers, il est traité de la même manière qu’un fichier ordinaire, c’est-à-dire que sa liste est limitée aux processus qui l’ont ouvert en tant que fichier ou en tant que répertoire spécifique au processus, tel que le répertoire racine ou le répertoire de travail actuel. Pour demander à lsof de rechercher les fichiers ouverts dans un nom de répertoire, utilisez les options +d s et +D D.
Si un nom est le nom de base d’une famille de fichiers multiplexés, par exemple, /dev/pt[cs] d’AIX, lsof listera tous les fichiers multiplexés associés sur le périphérique qui sont ouverts, par exemple, /dev/pt[cs]/1, /dev/pt[cs]/2, etc.
Si un nom est un nom de socket de domaine UNIX, lsof effectuera généralement une recherche en fonction des caractères du nom lui-même, exactement comme il est spécifié et enregistré dans la structure de socket du noyau. (Voir le paragraphe suivant pour une exception à cette règle pour Linux.) La spécification d’un chemin d’accès relatif, par exemple, ./file, au lieu du chemin d’accès absolu du fichier, par exemple, /tmp/file, ne fonctionnera pas, car lsof doit faire correspondre les caractères que vous spécifiez à ce qu’il trouve dans les structures de socket de domaine UNIX du noyau.
Si un nom est un nom de socket de domaine UNIX Linux, dans un cas, lsof est capable d’effectuer une recherche en fonction de son numéro de périphérique et de son numéro d’i-nœud, ce qui permet à name d’être un chemin d’accès relatif. Ce cas nécessite que le chemin d’accès absolu, c’est-à-dire un chemin d’accès commençant par une barre oblique (« / »), soit utilisé par le processus qui a créé le socket, et donc qu’il soit stocké dans le fichier /proc/net/unix, et il nécessite que lsof puisse obtenir les numéros de périphérique et d’i-nœud du chemin d’accès absolu dans /proc/net/unix et de name via des appels système [stat]({filename}../../stat)(2) réussis. Lorsque ces conditions sont remplies, lsof sera en mesure de rechercher le socket de domaine UNIX lorsqu’un chemin d’accès à celui-ci est spécifié dans name. Ainsi, par exemple, si le chemin d’accès est /dev/log, et qu’une recherche lsof est lancée lorsque le répertoire de travail est /dev, alors name peut être ./log.
Si un nom ne correspond à aucune des catégories ci-dessus, lsof listera tous les fichiers ouverts dont le numéro de périphérique et le numéro d’i-nœud correspondent à celui du chemin spécifié.
Si vous avez également spécifié l’option -b, les seuls noms que vous pouvez spécifier en toute sécurité sont les systèmes de fichiers pour lesquels votre table de montage fournit des numéros de périphériques alternatifs. Voir les sections ÉVITER LES BLOCAGES DU NOYAU et NUMÉROS DE PÉRIPHÉRIQUES ALTERNATIFS pour plus d’informations.
Plusieurs noms de fichiers sont combinés dans un seul ensemble OR avant de participer à une sélection d’options AND.
AFS
Lsof prend en charge la reconnaissance des fichiers AFS pour les dialectes (et versions AFS) suivants :
AIX 4.1.4 (AFS 3.4a)
HP-UX 9.0.5 (AFS 3.4a)
Linux 1.2.13 (AFS 3.3)
Solaris 2.[56] (AFS 3.4a)
Il peut reconnaître les fichiers AFS sur d’autres versions de ces dialectes, mais cela n’a pas été testé. Selon la façon dont AFS est implémenté, lsof peut reconnaître les fichiers AFS dans d’autres dialectes, ou peut avoir des difficultés à reconnaître les fichiers AFS dans les dialectes pris en charge.
Lsof peut avoir du mal à identifier tous les aspects des fichiers AFS dans les dialectes pris en charge lorsque le support du noyau AFS est implémenté via des modules dynamiques dont les adresses n’apparaissent pas dans la liste des noms de variables du noyau. Dans ce cas, lsof peut devoir deviner l’identité des fichiers AFS et peut ne pas être en mesure d’obtenir les informations de volume du noyau nécessaires au calcul des numéros de nœud de volume AFS. Lorsque lsof ne peut pas calculer les numéros de nœud de volume, il affiche « vide » dans la colonne NODE.
L’option -A A est disponible dans certaines implémentations de dialecte de lsof pour spécifier le fichier de liste de noms où les adresses de noyau des modules dynamiques peuvent être trouvées. Lorsque cette option est disponible, elle sera répertoriée dans la sortie d’aide de lsof, affichée en réponse aux options -h ou -?.
Voir la FAQ de lsof (la section FAQ indique son emplacement) pour plus d’informations sur les modules dynamiques, leurs symboles et la façon dont ils affectent les options lsof.
Étant donné que les recherches de chemin AFS ne semblent pas participer aux opérations de cache de noms du noyau, lsof ne peut pas identifier les composants de nom de chemin pour les fichiers AFS.
SÉCURITÉ
Lsof possède trois fonctionnalités qui peuvent soulever des problèmes de sécurité. Tout d’abord, son mode de compilation par défaut permet à quiconque de lister tous les fichiers ouverts à l’aide de l’outil. Deuxièmement, par défaut, il crée un fichier de cache de périphérique lisible et accessible en écriture par l’utilisateur dans le répertoire personnel de l’ID utilisateur réel qui exécute lsof. (Les fonctionnalités de liste de tous les fichiers ouverts et de cache de périphérique peuvent être désactivées lors de la compilation de lsof). Troisièmement, ses options -k et -m nomment des fichiers de liste de noms ou de mémoire alternatifs du noyau.
La restriction de la liste de tous les fichiers ouverts est contrôlée par les options de compilation HASSECURITY et HASNOSOCKSECURITY. Lorsque HASSECURITY est défini, lsof n’autorisera que l’utilisateur root à lister tous les fichiers ouverts. L’utilisateur non root ne peut lister que les fichiers ouverts des processus ayant le même numéro d’identification utilisateur que le numéro d’identification utilisateur réel du processus lsof (celui avec lequel l’utilisateur s’est connecté).
Cependant, si HASSECURITY et HASNOSOCKSECURITY sont tous deux définis, n’importe qui peut lister les fichiers de sockets ouverts, à condition qu’ils soient sélectionnés avec l’option -i.
Lorsque HASSECURITY n’est pas défini, n’importe qui peut lister tous les fichiers ouverts.
Le message d’aide, affiché en réponse aux options -h ou -?, indique le statut des définitions HASSECURITY et HASNOSOCKSECURITY.
Consultez la section Sécurité du fichier 00README de la distribution de lsof pour obtenir des informations sur la compilation de lsof avec les options HASSECURITY et HASNOSOCKSECURITY activées.
La création et l’utilisation d’un fichier de cache de périphérique accessible en lecture et en écriture par l’utilisateur sont contrôlées par l’option de compilation HASDCACHE. Consultez la section FICHIER DE CACHE DE PÉRIPHÉRIQUE et les sections qui suivent pour plus de détails sur la façon dont son chemin est formé. Pour des raisons de sécurité, il est important de noter que, dans la distribution par défaut de lsof, si l’ID utilisateur réel sous lequel lsof est exécuté est root, le fichier de cache de périphérique sera écrit dans le répertoire personnel de root, par exemple, / ou /root. Lorsque HASDCACHE n’est pas défini, lsof n’écrit pas et ne tente pas de lire un fichier de cache de périphérique.
Lorsque HASDCACHE est défini, le message d’aide de lsof, affiché en réponse aux options -h, -D? ou -?, fournira des informations sur la gestion du fichier de cache de périphérique. Lorsque HASDCACHE n’est pas défini, la sortie des options -h ou -? ne contiendra aucune description de l’option -D.
Avant de décider de désactiver la fonction de fichier de cache de périphérique (son activation améliore les performances de lsof en réduisant la surcharge de démarrage liée à l’examen de tous les nœuds dans /dev ou /devices), lisez la discussion à ce sujet dans le fichier 00DCACHE de la distribution de lsof et dans les FAQ de lsof (la section FAQ indique son emplacement).
EN CAS DE DOUTE, VOUS POUVEZ DÉSACTIVER TEMPORAIREMENT L’UTILISATION DU FICHIER DE CACHE DE PÉRIPHÉRIQUE AVEC L’OPTION `-Di`.
Lorsque l’utilisateur de lsof déclare une liste de noms de noyau alternatifs ou des fichiers de mémoire avec les options -k et -m, lsof vérifie l’autorisation de l’utilisateur à les lire avec la fonction access(2). Ceci vise à empêcher les pouvoirs spéciaux que les modes de lsof pourraient conférer de permettre à lsof de lire des fichiers qui ne seraient pas normalement accessibles via l’autorité de l’ID utilisateur réel.
SORTIE
Cette section décrit les informations que lsof liste pour chaque fichier ouvert. Consultez la section SORTIE POUR D’AUTRES PROGRAMMES pour obtenir des informations supplémentaires sur la sortie qui peut être traitée par un autre programme.
Lsof ne produit que des caractères 8 bits imprimables (déclarés comme tels par isprint(3)). Les caractères non imprimables sont affichés sous l’une des trois formes suivantes : la forme C \``\[bfrnt]`` ; la forme de caractère de contrôle^(par exemple,^@) ; ou la forme hexadécimale précédée de\x(par exemple,\xab). L’espace est non imprimable dans la colonne COMMAND (\x20`) et est imprimable ailleurs.
Pour certains dialectes, si HASSETLOCALE est défini dans le fichier d’en-tête machine.h du dialecte, lsof affichera les caractères étendus de 8 bits d’une langue. Le processus lsof doit se voir fournir une variable d’environnement de langue (par exemple, LANG) dont la valeur représente une langue connue dans laquelle les caractères étendus sont considérés comme imprimables par isprint(3). Sinon, lsof considère les caractères étendus comme non imprimables et les affiche conformément à ses règles pour les caractères non imprimables, mentionnées ci-dessus. Consultez la page de manuel setlocale(3) de votre dialecte pour connaître les noms des autres variables d’environnement qui peuvent être utilisées à la place de LANG ; par exemple, LC_ALL, LC_CTYPE, etc.
La prise en charge des paramètres régionaux linguistiques de Lsof pour un dialecte couvre également les caractères larges, par exemple UTF-8, lorsque HASSETLOCALE et HASWIDECHAR sont définis dans le fichier d'en-tête machine.h du dialecte, et lorsqu'un paramètre régional linguistique approprié a été défini dans la variable d'environnement appropriée pour le processus Lsof. Les caractères larges sont affichables dans ces conditions si iswprint(3) indique qu'ils le sont.
Si HASSETLOCALE, HASWIDECHAR et un paramètre régional linguistique approprié ne sont pas définis, ou si iswprint(3) indique que les caractères larges ne sont pas affichables, Lsof considère ces caractères larges comme non imprimables et affiche chacun de leurs 8 bits conformément à ses règles pour les caractères non imprimables, telles que décrites ci-dessus.
Consultez les réponses aux questions concernant la « prise en charge des paramètres régionaux linguistiques » dans la FAQ de Lsof (la section FAQ indique son emplacement) pour plus d'informations.
Lsof ajuste dynamiquement la taille des colonnes de sortie à chaque exécution, garantissant ainsi une taille minimale pour chaque colonne. Il garantit également que chaque colonne est séparée de sa colonne précédente par au moins un espace.
COMMAND contient les neuf premiers caractères du nom de la commande UNIX associée au processus. Si une valeur non nulle w est spécifiée avec l'option +c w, la colonne contient les w premiers caractères du nom de la commande UNIX associée au processus, jusqu'à la limite des caractères fournis à Lsof par le dialecte UNIX. (Voir la description de la commande +c w ou la FAQ de Lsof pour plus d'informations. La section FAQ indique son emplacement.)
Si w est inférieur à la longueur du titre de la colonne, « COMMAND », cette dernière sera augmentée jusqu'à cette longueur.
Si une valeur w nulle est spécifiée avec l'option +c w, la colonne contient tous les caractères du nom de la commande UNIX associée au processus.
Tous les caractères du nom de la commande stockés par le noyau dans ses structures sont affichés dans la sortie des champs lorsque le descripteur de nom de commande (c) est spécifié. Voir la section OUTPUT FOR OTHER COMMANDS pour obtenir des informations sur la sélection de la sortie des champs et le descripteur de nom de commande associé.
PID est le numéro d'identification du processus (Process IDentification).
TID est le numéro d'identification de tâche (thread), si la prise en charge du reporting des tâches (threads) est assurée par le dialecte et qu'une tâche (thread) est listée. (Si la sortie d'aide, c'est-à-dire la sortie des options -h ou -?, affiche cette option, alors la prise en charge du reporting des tâches (threads) est assurée par le dialecte.)
Une colonne TID vide dans Linux indique un processus, c'est-à-dire un processus non-tâche.
TASKCMD est le nom de la commande de tâche. En général, il est identique au processus nommé dans la colonne COMMAND, mais certaines implémentations de tâches (par exemple, Linux) permettent à une tâche de modifier son nom de commande.
La largeur de la colonne TASKCMD est soumise à la même limitation de taille que la colonne COMMAND.
ZONE est le nom de la zone Solaris 10 ou version ultérieure. Cette colonne doit être sélectionnée avec l’option -z.
SECURITY-CONTEXT est le contexte de sécurité SELinux. Cette colonne doit être sélectionnée avec l’option -Z. Notez que l’option -Z est désactivée lorsque SELinux est désactivé dans le noyau Linux en cours d’exécution.
PPID est l’identifiant du processus parent du processus. Il n’est affiché que lorsque l’option -R a été spécifiée.
PGID est l’identifiant du groupe de processus associé au processus. Il n’est affiché que lorsque l’option -g a été spécifiée.
USER est l’ID d’utilisateur ou le nom de connexion de l’utilisateur auquel le processus appartient, généralement le même que celui indiqué par [ps]({filename}../../ps)(1). Cependant, sous Linux, USER est l’ID d’utilisateur ou le nom de connexion qui possède le répertoire dans /proc où lsof trouve des informations sur le processus. Habituellement, il s’agit de la même valeur que celle indiquée par [ps]({filename}../../ps)(1), mais elle peut différer lorsque le processus a modifié son ID d’utilisateur effectif. (Voir la description de l’option -l pour plus d’informations sur la façon dont un ID d’utilisateur ou un nom de connexion est affiché.)
FD est le numéro de descripteur de fichier du fichier, ou :
cwd répertoire de travail actuel ;
Lnn références de bibliothèque (AIX) ;
ctty tty de contrôle ;
DEL fichier supprimé ;
err erreur d’information FD (voir la colonne NAME) ;
fp. Fileport (Darwin) ;
jld répertoire jail (FreeBSD) ;
ltx texte de bibliothèque partagée (code et données) ;
Mxx numéro de type de mémoire mappée hexadécimal xx ;
m86 fichier mappé DOS Merge ;
mem fichier mappé en mémoire ;
mmap périphérique mappé en mémoire ;
NOFD pour un répertoire Linux /proc/
FD est suivi de l’un de ces caractères, décrivant le mode dans lequel le fichier est ouvert :
r pour l’accès en lecture ;
w pour l’accès en écriture ;
u pour l’accès en lecture et en écriture ;
espace si le mode est inconnu et qu’il n’y a pas de verrou ;
caractère suivant ;
`-` si le mode est inconnu et qu’il y a un verrou ;
caractère suivant.
Le caractère de mode est suivi de l’un de ces caractères de verrou, décrivant le type de verrou appliqué au fichier :
N pour un verrou NFS Solaris de type inconnu ;
r pour un verrou en lecture sur une partie du fichier ;
R pour un verrou en lecture sur l’ensemble du fichier ;
w pour un verrou en écriture sur une partie du fichier ;
W pour un verrou en écriture sur l’ensemble du fichier ;
u pour un verrou en lecture et en écriture de n’importe quelle longueur ;
U pour un verrou de type inconnu ;
x pour un verrou Xenix SCO OpenServer sur une partie du fichier ;
X pour un verrou Xenix SCO OpenServer sur l’ensemble du fichier ;
espace s’il n’y a pas de verrou.
Consultez la section LOCKS pour plus d’informations sur le caractère d’information de verrouillage.
Le contenu de la colonne FD constitue un seul champ à analyser dans les scripts de post-traitement. Les numéros FD supérieurs à 9999 sont abrégés en « * » suivi des trois derniers chiffres. Par exemple, 10001 apparaît sous la forme « *001 ».
TYPE est le type du nœud associé au fichier, par exemple, VDIR, VREG, etc.
ou « ax25 » pour une socket Linux AX.25 ;
ou « a_inode » pour un inode anonyme ;
ou « icmp » pour une socket ICMP ;
ou « inet » pour une socket de domaine Internet ;
ou « ipx » pour une socket IPX ;
ou « key » pour une socket de gestion de clés interne ;
ou « lla » pour un fichier d’accès au niveau de la liaison HP-UX ;
ou « ndrv » pour une socket de pilote réseau ;
ou « netlink » pour une socket netlink ;
ou « pack » pour une socket de paquet ;
ou « ppp » pour une socket PPP ;
ou « raw » pour une socket brute ;
ou « raw6 » pour une socket brute IPv6 ;
ou « rte » pour une socket AF_ROUTE ;
ou « sock » pour une socket de domaine inconnu ;
ou « systm » pour une socket système ;
ou « unix » pour une socket de domaine UNIX ;
ou « x.25 » pour une socket x.25 HP-UX ;
ou « ATALK » pour une socket AppleTalk ;
ou « BLK » pour un fichier de périphérique de bloc ;
ou « CHR » pour un fichier de périphérique de caractères ;
ou « DEL » pour un fichier de mappage Linux qui a été supprimé ;
ou « DIR » pour un répertoire ;
ou « DOOR » pour un fichier VDOOR ;
ou « EVENTFD » pour un événement eventfd ;
ou « FIFO » pour un fichier FIFO ;
ou « FSEVENTS » pour fsevents ;
ou « IPv4 » pour une socket IPv4 ;
ou « IPv6 » pour un fichier réseau IPv6 ouvert, même si son adresse est IPv4 et est mappée dans une adresse IPv6 ;
ou « KQUEUE » pour un fichier de file d’attente d’événements de noyau de type BSD ;
ou « LINK » pour un fichier de lien symbolique ;
ou « MPB » pour un fichier de bloc multiplexé ;
ou « MPC » pour un fichier de caractères multiplexé ;
ou « PAS » pour un fichier /proc/as ;
ou « PAXV » pour un fichier /proc/auxv ;
ou « PCRE » pour un fichier /proc/cred ;
ou « PCTL » pour un fichier de contrôle /proc ;
ou « PCUR » pour le processus actuel /proc ;
ou « PCWD » pour le répertoire de travail actuel /proc ;
ou « PDIR » pour un répertoire /proc ;
ou « PETY » pour le type exécutable (etype) /proc ;
ou « PFD » pour un descripteur de fichier /proc ;
ou « PFDR » pour un répertoire de descripteur de fichier /proc ;
ou « PFIL » pour un fichier exécutable /proc ;
ou « PFPR » pour un ensemble de registres FP /proc ;
ou « PGD » pour un fichier /proc/pagedata ;
ou « PGID » pour un fichier de notification de groupe /proc ;
ou « PIPE » pour les pipes ;
ou « PLC » pour un fichier /proc/lwpctl ;
ou « PLDR » pour un répertoire /proc/lpw ;
ou « PLDT » pour un fichier /proc/ldt ;
ou « PLPI » pour un fichier /proc/lpsinfo ;
ou « PLST » pour un fichier /proc/lstatus ;
ou « PLU » pour un fichier /proc/lusage ;
ou « PLWG » pour un fichier /proc/gwindows ;
ou « PLWI » pour un fichier /proc/lwpsinfo ;
ou « PLWS » pour un fichier /proc/lwpstatus ;
ou « PLWU » pour un fichier /proc/lwpusage ;
ou « PLWX » pour un fichier /proc/xregs ;
ou « PMAP » pour un fichier de mappage /proc (map) ;
ou « PMPS » pour un fichier /proc/maps ;
ou « PMEM » pour un fichier d’image mémoire /proc ;
ou « PNTF » pour un fichier de notification de processus /proc ;
ou « POBJ » pour un fichier d’objet /proc ;
ou « PODR » pour un répertoire d’objet /proc ;
ou « POLP » pour un fichier de processus léger au format ancien /proc ;
ou « POPF » pour un fichier PID au format ancien /proc ;
ou « POPG » pour un fichier de données de page au format ancien /proc ;
ou « PORT » pour un canal nommé SYSV ;
ou « PREG » pour un fichier de registre /proc ;
ou « PRMP » pour un fichier /proc/rmap ;
ou « PROCDSC » pour un descripteur de processeur ;
ou « PRTD » pour un répertoire racine /proc ;
ou « PSGA » pour un fichier /proc/sigact ;
ou « PSIN » pour un fichier /proc/psinfo ;
ou « PSTA » pour un fichier d’état /proc ;
ou « PSXMQ » pour un fichier de file d’attente de messages POSIX ;
ou « PSXSEM » pour un fichier de sémaphore POSIX ;
ou « PSXSHM » pour un fichier de mémoire partagée POSIX ;
ou « PTS » pour un fichier /dev/pts ;
ou « PUSG » pour un fichier /proc/usage ;
ou « PW » pour un fichier /proc/watch ;
ou « PXMP » pour un fichier /proc/xmap ;
ou « REG » pour un fichier ordinaire ;
ou « SHM » pour un fichier de mémoire partagée ;
ou « SMT » pour un fichier de transport de mémoire partagée ;
ou « STR » pour les flux ;
ou « STSO » pour une socket de flux ;
ou « UNKN » pour un fichier de type inconnu ;
ou « UNKNcwd » pour un répertoire de travail actuel inconnu ;
ou « UNKNdel » pour un fichier supprimé inconnu ;
ou « UNKNfd » pour un descripteur de fichier inconnu ;
ou « UNKNmem » pour un fichier mappé en mémoire inconnu ;
ou « UNKNrtd » pour un répertoire racine inconnu ;
ou « UNKNtxt » pour un texte de programme inconnu ;
ou « UNNM » pour un fichier de type non nommé ;
ou « XNAM » pour un fichier spécial OpenServer Xenix de type inconnu ;
ou « XSEM » pour un fichier de sémaphore OpenServer Xenix ;
ou « XSD » pour un fichier de données partagées OpenServer Xenix ;
ou « UNSP » pour un fichier non pris en charge ;
ou les quatre octets du numéro de type si le nom correspondant n’est pas connu.
FILE-ADDR contient l’adresse de la structure de fichier du noyau lorsque l’option f a été spécifiée avec +f ;
FCT contient le nombre de références de fichier de la structure de fichier du noyau lorsque l’option c a été spécifiée avec +f ;
FILE-FLAG lorsque les options g ou G ont été spécifiées avec +f, ce champ contient le contenu du membre f_flag[s] de la structure de fichier du noyau et les indicateurs de fichier ouverts par processus du noyau (si disponibles) ; « G » fait que ces derniers sont affichés en hexadécimal ; « g », sous forme de noms abrégés ; deux listes peuvent être affichées avec des entrées séparées par des virgules, les listes étant séparées par des points-virgules ( ; ) ; la première liste peut contenir des noms abrégés pour les valeurs f_flag[s] du tableau suivant :
AIO E/S asynchrones (par exemple, FAIO)
AP ajouter
ASYN E/S asynchrones (par exemple, FASYNC)
BAS bloc, test et ensemble en cours d’utilisation
BKIU bloquer si en cours d’utilisation
BL utiliser les décalages de bloc
BSK recherche de bloc
CA éviter la copie
CIO E/S simultanées
CLON cloner
CLRD lecture CL
CR créer
DF différer
DFI différer IND
DFLU vidage des données
DIR direct
DLY retard
DOCL cloner
DSYN intégrité des données uniquement
DTY doit être un répertoire
EVO événement uniquement
EX ouvrir pour l’exécution
EXCL ouverture exclusive
FSYN écritures synchrones
GCDF différer pendant unp_gc() (AIX)
GCMK marquer pendant unp_gc() (AIX)
GTTY accessible via /dev/tty
HUP HUP en cours
KERN noyau
KIOC ioctl émis par le noyau
LCK a un verrou
LG fichier volumineux
MBLK bloc de message de flux
MK marquer
MNT monter
MSYN synchronisation multiplexée
NATM ne pas mettre à jour atime
NB E/S non bloquantes
NBDR ne pas effectuer de vérification BDRM
NBIO E/S non bloquantes SYSV
NBF tamponage en vigueur
NC pas de cache
ND pas de délai
NDSY pas de synchronisation des données
NET réseau
NFLK ne pas suivre les liens
NMFS système de fichiers NM
NOTO désactiver l’arrêt en arrière-plan
NSH pas de partage
NTTY pas de TTY de contrôle
OLRM miroir OLR
PAIO E/S asynchrones POSIX
PATH chemin
PP canal POSIX
R lire
RC cache de verrouillage de fichiers et d’enregistrements
REV révoqué
RSH lecture partagée
RSYN synchronisation de la lecture
RW accès en lecture et en écriture
SL verrou partagé
SNAP instantané cuit
SOCK socket
SQSH ensemble partagé de Sequent à l’ouverture
SQSV ensemble SVM de Sequent à l’ouverture
SQR ensemble de réparation de Sequent à l’ouverture
SQS1 ouverture partagée complète de Sequent
SQS2 ouverture partagée partielle de Sequent
STPI arrêter les E/S
SWR lecture synchrone
SYN intégrité du fichier pendant l’écriture
TCPM éviter les collisions TCP
TMPF fichier temporaire
TR tronquer
W écrire
WKUP synchronisation des E/S parallèles
WTG synchronisation des E/S parallèles
XNAM fichier spécial OpenServer Xenix de type inconnu
XSEM fichier de sémaphore OpenServer Xenix
XSD fichier de données partagées OpenServer Xenix
Cette liste de noms a été dérivée des macros `#define` du dialecte dans les fichiers d’en-tête <fcntl.h>,
<linux/fs.h>, <sys/fcntl.c>, <sys/fcntlcom.h> et <sys/file.h> ; consultez le fichier d’en-tête common.h pour obtenir une liste montrant la correspondance entre les noms abrégés ci-dessus
et les définitions des fichiers d’en-tête ;
la deuxième liste (après le point-virgule) peut contenir des noms abrégés pour les drapeaux d’accès aux fichiers ouverts par processus du noyau à partir du tableau suivant :
ALLC alloué
BR le fichier a été lu
BHUP l’activité a été interrompue par SIGHUP
BW le fichier a été écrit
CLSG en cours de fermeture
CX fermeture lors de l’exécution (voir fcntl(F_SETFD))
LCK un verrou a été appliqué
MP en mémoire
OPIP ouverture en cours
RSVW attente réservée
SHMT UF_FSHMAT défini (AIX)
USE en cours d’utilisation (multithread)
NODE-ID (ou INODE-ADDR pour certains dialectes) contient un identificateur unique pour le nœud de fichier (généralement l’adresse du nœud ou de l’inode du noyau, mais parfois aussi une concaténation du numéro de périphérique et du numéro de nœud) lorsque n a été spécifié avec +f ;
DEVICE contient les numéros de périphérique, séparés par des virgules, pour un fichier spécial de caractères, un fichier spécial de blocs, un fichier régulier, un répertoire ou un fichier NFS ;
ou « mémoire » pour un nœud de système de fichiers mémoire sous Tru64 UNIX ;
ou l’adresse de la zone de données privée d’un flux de socket Solaris ;
ou une adresse de référence du noyau qui identifie le fichier (l’adresse de référence du noyau peut être utilisée pour les FIFO, par exemple) ;
ou l’adresse de base ou le nom de périphérique d’un socket AX.25 Linux.
Généralement, seuls les trente-deux bits inférieurs des adresses du noyau Tru64 UNIX sont affichés.
SIZE, SIZE/OFF, ou OFFSET
est la taille du fichier ou le décalage du fichier en octets. Une valeur n’est affichée dans cette colonne que si elle est disponible. Lsof affiche la valeur appropriée, qu’il s’agisse de la taille ou du décalage, en fonction du type de fichier et de la version de lsof.
Sur certains dialectes UNIX, lsof ne peut pas obtenir des informations de décalage de fichier précises ou cohérentes à partir de ses sources de données du noyau, parfois uniquement pour certains types de fichiers (par exemple, les fichiers socket). Dans d’autres cas, les fichiers n’ont pas de taille réelle (par exemple, les sockets, les FIFO, les tubes), de sorte que lsof affiche pour leur taille les quantités de contenu qu’il trouve dans leurs descripteurs de mémoire tampon du noyau (par exemple, les compteurs de taille de mémoire tampon de socket ou les tailles de fenêtre TCP/IP). Consultez la FAQ de lsof (la section FAQ indique son emplacement) pour plus d’informations.
La taille du fichier est affichée en décimal ; le décalage est généralement affiché en décimal avec un préfixe « 0t » s’il contient 8 chiffres ou moins ; en hexadécimal avec un préfixe « 0x » s’il est supérieur à 8 chiffres. (Consultez la description de l’option -o o pour obtenir des informations sur le moment où 8 peut par défaut prendre une autre valeur.)
Ainsi, les préfixes « 0t » et « 0x » identifient un décalage lorsque la colonne peut contenir à la fois une taille et un décalage (c’est-à-dire que son titre est SIZE/OFF).
Si l’option -o est spécifiée, lsof affiche toujours le décalage du fichier (ou rien si aucun décalage n’est disponible) et étiquette la colonne OFFSET. Le décalage commence toujours par « 0t » ou « 0x » comme décrit ci-dessus.
L’utilisateur de lsof peut contrôler le passage de « 0t » à « 0x » avec l’option -o o. Consultez sa description pour plus d’informations.
Si l’option -s est spécifiée, lsof affiche toujours la taille du fichier (ou rien si aucune taille n’est disponible) et étiquette la colonne SIZE. Les options -o et -s sont mutuellement exclusives ; elles ne peuvent pas être toutes les deux spécifiées.
Si l’option -H est spécifiée, lsof affiche la taille du fichier sous une forme lisible par l’homme.
Pour les fichiers qui n’ont pas de taille fixe (par exemple, qui ne résident pas sur un périphérique de disque), lsof affichera les informations appropriées sur la taille ou la position actuelle du fichier si elles sont disponibles dans les structures du noyau qui définissent le fichier.
NLINK contient le nombre de liens du fichier lorsque +L a été spécifié ;
NODE est le numéro de nœud d’un fichier local ;
ou le numéro d’inode d’un fichier NFS sur l’hôte serveur ;
ou le type de protocole Internet (par exemple, « TCP ») ;
ou « STR » pour un flux ;
ou « CCITT » pour un socket x.25 HP-UX ;
ou le numéro IRQ ou inode d’un périphérique de socket AX.25 Linux.
NAME est le nom du point de montage et du système de fichiers sur lequel réside le fichier ;
ou le nom d’un fichier spécifié dans l’option names (après que tous les liens symboliques ont été résolus) ;
ou le nom d’un périphérique spécial caractère ou d’un périphérique spécial bloc ;
ou les adresses Internet locales et distantes d’un fichier réseau ; l’hôte local ou le numéro IP est suivi d’un deux-points (:) , du port, de « -> » et de l’adresse distante en deux parties ; les adresses IP peuvent être signalées sous forme de nombres ou de noms, en fonction des options +|-M, -n et -P ; les nombres IPv6 séparés par des deux-points sont entourés de crochets ; les adresses IPv4 INADDR_ANY et IPv6 IN6_IS_ADDR_UNSPECIFIED, et les numéros de port zéro, sont représentés par un astérisque (« * ») ; une adresse de destination UDP peut être suivie de la quantité de temps écoulée depuis que le dernier paquet a été envoyé à la destination ; les adresses distantes TCP, UDP et UDPLITE peuvent être suivies d’informations TCP/TPI entre parenthèses (état, par exemple « (ESTABLISHED) », « (Unbound) »), des tailles de file d’attente et des tailles de fenêtre (pas tous les dialectes) d’une manière similaire à ce que [netstat](filename:netstat.md)(1) signale ; consultez la description de l’option -T ou la description du champ TCP/TPI dans OUTPUT FOR OTHER PROGRAMS pour plus d’informations sur l’état, la taille de la file d’attente et la taille de la fenêtre.
ou l’adresse ou le nom d’un socket de domaine UNIX, incluant éventuellement le nom d’un dispositif de clonage de flux, le chemin d’accès d’un objet de système de fichiers, les adresses locales et distantes du noyau,
les informations de paire de sockets et l’adresse du nœud v (vnode) auquel il est lié ;
ou les noms des points de montage locaux et distants d’un fichier NFS ;
ou « STR », suivi du nom du flux ;
ou le nom d’un dispositif de flux de caractères, suivi de « -> » et du nom du flux ou d’une liste de
noms de modules de flux, séparés par « -> » ;
ou « STR : », suivi des noms de dispositif et de module de flux SCO OpenServer, séparés
par « -> » ;
ou le nom du répertoire système, « -- », et autant de composants du nom de chemin que
lsof peut trouver dans la mémoire cache du noyau pour les dialectes sélectionnés (voir la section « CACHE DU NOM DU NOYAU » pour plus d’informations) ;
ou « PIPE-> », suivi d’une adresse de destination de pipe du noyau Solaris ;
ou « COMMON : », suivi du nom du dispositif de la structure d’informations du nœud v (vnode) commun, pour
un nœud v (vnode) commun Solaris ;
ou la famille d’adresses, suivie d’une barre oblique (« / »), suivie de quatorze octets séparés par des virgules d’une adresse de socket brut non Internet ;
ou l’adresse locale HP-UX x.25, suivie du numéro de connexion virtuelle (le cas échéant), suivie de l’adresse distante (le cas échéant) ;
ou « (dead) » pour les fichiers Tru64 UNIX dissociés ; généralement, il s’agit de fichiers terminaux qui ont été marqués avec l’ioctl TIOCNOTTY et fermés par des démons ;
ou « rd=<offset> » et « wr=<offset> » pour les valeurs des décalages de lecture et d’écriture d’un FIFO ;
ou « clone n:/dev/event » pour les clones de fichiers SCO OpenServer du dispositif /dev/event, où n est le numéro de périphérique secondaire du fichier ;
ou « (socketpair : n) » pour un socket de domaine UNIX Solaris 2.6, 8, 9 ou 10, créé par la fonction de réseau socketpair(3N) ;
ou « no PCB » pour les fichiers de socket qui n’ont pas de bloc de protocole associé, suivi éventuellement de « , CANTSENDMORE » si l’envoi sur le socket a été désactivé,
ou de « , CANTRCVMORE » si la réception sur le socket a été désactivée (par exemple, par la fonction [shutdown]({filename}../../shutdown)(2)) .
ou les adresses locales et distantes d'un fichier socket IPX Linux, sous la forme
<réseau>:[<nœud>:]<port>, suivies entre parenthèses des tailles des files d'attente d'émission et de réception, et de l'état de la connexion ;
ou « dgram » ou « stream » pour le type de sockets de domaine UNIX en noyau pour UnixWare 7.1.1 et versions ultérieures, suivies d'un deux-points (:) et du nom de chemin local lorsqu'il est disponible, suivi de « -> » et du nom de chemin distant ou de l'adresse de socket du noyau en hexadécimal lorsqu'il est disponible ;
ou la valeur d'association, l'index d'association, la valeur de point de terminaison, l'adresse locale, le port local, l'adresse distante et le port distant pour les sockets SCTP Linux ;
ou « protocole : » suivi de l'attribut de protocole du socket Linux.
Pour les dialectes qui prennent en charge un système de fichiers « namefs », permettant de joindre un fichier à un autre avec fattach(3C), lsof ajoutera « (FA:<adresse1><direction><adresse2>) » à la colonne NAME. <adresse1> et <adresse2> sont des adresses de nœud hexadécimales. <direction> sera « <- » si <adresse2> a été attaché à ce nœud dont l'adresse est <adresse1>, et « -> » si <adresse1>, l'adresse de ce nœud, a été attaché à <adresse2>. <adresse1> peut être omis s'il apparaît déjà dans la colonne DEVICE.
Lsof peut ajouter deux notes entre parenthèses à la colonne NAME pour les fichiers ouverts Solaris 10 : « (?) » si lsof considère que le nom de chemin est d'une précision douteuse, et « (deleted) » si l'option -X a été spécifiée et que lsof détecte que le nom de chemin du fichier ouvert a été supprimé. Consultez la FAQ de lsof (la section FAQ indique son emplacement) pour plus d'informations sur ces ajouts à la colonne NAME.
LOCKS
Lsof ne peut pas signaler de manière adéquate la grande variété de verrous de fichiers UNIX dans un seul caractère. Ce qu'il rapporte dans un seul caractère est un compromis entre les informations qu'il trouve dans le noyau et les limites du format de rapport.
De plus, lorsqu'un processus détient plusieurs verrous au niveau de l'octet sur un fichier, lsof ne signale que l'état du premier verrou qu'il rencontre. S'il s'agit d'un verrou au niveau de l'octet, le caractère de verrou sera rapporté en minuscules (c'est-à-dire `r`, `w` ou `x`) plutôt qu'en majuscules, comme cela se fait pour un verrou de fichier complet.
En général, lsof ne peut signaler que les verrous détenus par les processus locaux sur les fichiers locaux. Lorsqu'un processus local définit un verrou sur un fichier monté à distance (par exemple, NFS), le serveur hôte distant enregistre généralement l'état du verrou. Une exception est Solaris : à certains niveaux de correctifs de 2.3 et dans toutes les versions supérieures à 2.4, le noyau Solaris enregistre les informations sur les verrous distants dans les structures locales.
Lsof a du mal à signaler les verrous pour certains dialectes UNIX. Consultez la section BUGS de cette page de manuel ou la FAQ de lsof (la section FAQ indique son emplacement) pour plus d'informations.
OUTPUT FOR OTHER PROGRAMS
Lorsque l'option -F est spécifiée, lsof produit une sortie adaptée au traitement par un autre programme, par exemple un script awk ou Perl, ou un programme C.
Chaque unité d'information est affichée dans un champ identifié par un caractère de début et terminée par un saut de ligne (012) (ou par un caractère NUL (000) si le caractère d'identifiant de champ « 0 » est spécifié). Les données du champ suivent immédiatement le caractère d'identification du champ et s'étendent jusqu'au terminateur de champ.
Il est possible de considérer la sortie des champs comme des ensembles de processus et de fichiers. Un ensemble de processus commence par un champ dont l'identifiant est « p » (pour l'identifiant de processus (PID)). Il s'étend jusqu'au début du champ PID suivant ou jusqu'au début du premier ensemble de fichiers du processus, selon ce qui se produit en premier. L'ensemble de processus comprend des champs qui identifient la commande, l'identifiant du groupe de processus (PGID), l'identifiant de tâche (TID) et l'identifiant d'utilisateur (UID) ou le nom d'utilisateur.
Un ensemble de fichiers commence par un champ dont l'identifiant est « f » (pour le descripteur de fichier). Il est suivi de lignes qui décrivent le mode d'accès, l'état de verrouillage, le type, le périphérique, la taille, le décalage, l'inode, le protocole, le nom et les noms des modules de flux du fichier. Il s'étend jusqu'au début de l'ensemble de fichiers ou de processus suivant, selon ce qui se produit en premier.
Lorsque le terminateur de champ NUL (000) a été sélectionné avec le caractère d'identifiant de champ « 0 », lsof termine chaque ensemble de processus et de fichiers avec un caractère de saut de ligne (012).
Lsof produit toujours un champ, le champ PID (« p »). En mode répétitif, le marqueur (« m ») est également produit. Tous les autres champs peuvent être déclarés de manière facultative dans la liste des caractères d'identifiant de champ qui suit l'option -F. Lorsqu'un caractère de sélection de champ identifie un élément que lsof n'affiche pas normalement, la spécification du caractère de champ avec l'option -R (par exemple, « -FR ») sélectionne également l'affichage de l'élément.
Les versions de lsof de 4.88 à 4.93.2 produisaient toujours un champ de plus, le champ descripteur de fichier (« f »). Cependant, cette version de lsof ne le produit pas. Ce changement a pour but de prendre en charge le cas d'utilisation dans lequel un utilisateur n'a besoin que du champ PID et n'a pas besoin du champ descripteur de fichier. Spécifiez « f » explicitement si vous avez besoin de ce champ.
Il est tout à fait possible de sélectionner un ensemble de champs qui ne peut pas être facilement analysé, par exemple, si le champ descripteur de fichier n'est pas sélectionné, il peut être difficile d'identifier les ensembles de fichiers. Pour vous aider à éviter cette difficulté, lsof prend en charge l'option -F ; elle sélectionne la sortie de tous les champs avec des terminateurs de saut de ligne (l'option -F0 sélectionne la sortie de tous les champs avec des terminateurs NUL). Pour des raisons de compatibilité, ni -F ni -F0 ne sélectionnent le champ de périphérique brut.
Voici les champs que lsof produira. Le caractère unique répertorié en premier est l'identifiant du champ.
a mode d'accès au fichier
c nom de la commande du processus (tous les caractères de la structure proc ou utilisateur)
C nombre d'occurrences de la structure de fichier
d code de caractère du périphérique du fichier
D numéro de périphérique principal/secondaire du fichier (0x<hexadécimal>)
f descripteur de fichier
F adresse de la structure de fichier (0x<hexadécimal>)
G indicateurs de fichier (0x<hexadécimal> ; noms si +fg suit)
g identifiant du groupe de processus
i numéro d'inode du fichier
K identifiant de tâche
k nombre de liens
l état de verrouillage du fichier
L nom d'utilisateur du processus
m marqueur entre les sorties répétées (toujours sélectionné en mode répétitif)
M nom de la commande de la tâche
n nom du fichier, commentaire, adresse Internet
N identifiant de nœud (0x<hexadécimal>)
o décalage du fichier (0t<décimal> ou 0x<hexadécimal>, voir -o o)
p identifiant de processus (toujours sélectionné)
P nom du protocole
r numéro de périphérique brut (0x<hexadécimal>)
R identifiant du processus parent
s taille du fichier (décimale)
S identifiant du flux du fichier
t type de fichier
T informations TCP/TPI, identifiées par des préfixes (le « = » fait partie du préfixe) :
QR = taille de la file d'attente de lecture
QS = taille de la file d'attente d'envoi
SO = options et valeurs de socket (pas pour tous les dialectes)
SS = états de socket (pas pour tous les dialectes)
ST = état de connexion
TF = indicateurs et valeurs TCP (pas pour tous les dialectes)
WR = taille de lecture de la fenêtre (pas pour tous les dialectes)
WW = taille d'écriture de la fenêtre (pas pour tous les dialectes)
(les informations TCP/TPI ne sont pas signalées pour tous les dialectes UNIX pris en charge. La sortie -h ou -? pour l'option -T indiquera quelles informations TCP/TPI peuvent être demandées).
u identifiant d'utilisateur du processus
z nom de zone de Solaris 10 et versions ultérieures
Z contexte de sécurité SELinux (désactivé lorsque SELinux est désactivé)
0 utiliser le caractère de terminateur de champ NUL à la place de saut de ligne
19 identifiants de champ spécifiques au dialecte (la sortie de -F? identifie les informations que l'on trouve dans les champs spécifiques au dialecte).
Vous pouvez obtenir de l’aide en ligne sur ces caractères et leurs descriptions en spécifiant l’option
-F? . (Échappez le caractère ? comme l’exige votre shell.) Des informations supplémentaires sur le
contenu des champs peuvent être trouvées dans la section SORTIE.
Par exemple, -F pcfn sélectionnera l’ID de processus (p), le nom de la commande (c), le descripteur
de fichier (f) et le nom du fichier (n) avec un caractère de terminaison de champ NL ; -F pcfn0
sélectionne la même sortie avec un caractère de terminaison de champ NUL (000).
Lsof ne produit pas tous les champs pour chaque processus ou ensemble de fichiers, mais uniquement ceux qui sont disponibles. Certains champs sont mutuellement exclusifs : les caractères de périphérique de fichier et les numéros de périphérique principal/secondaire du fichier ; le numéro d’inode du fichier et le nom du protocole ; le nom du fichier et l’identification du flux ; la taille du fichier et le décalage. L’un ou l’autre membre de ces ensembles mutuellement exclusifs apparaîtra dans la sortie des champs, mais pas les deux.
Normalement, lsof termine chaque champ avec un caractère NL (012). Le caractère d’identification de champ 0 (zéro) peut être spécifié pour modifier le caractère de terminaison de champ en NUL (000). Un terminateur NUL peut être plus facile à traiter avec xargs (1), par exemple, ou avec des programmes dont les mécanismes de citation peuvent ne pas gérer facilement la gamme de caractères dans la sortie des champs. Lorsque le terminateur de champ NUL est utilisé, lsof termine chaque processus et ensemble de fichiers avec un caractère NL (012).
Trois outils pour créer des programmes capables de traiter la sortie des champs de lsof sont inclus dans la distribution de lsof. Le premier est un fichier d’en-tête C, lsof_fields.h, qui contient des symboles pour les caractères d’identification des champs, des index pour les stocker dans un tableau et des chaînes d’explication qui peuvent être compilées dans des programmes. Lsof utilise ce fichier d’en-tête.
La deuxième aide est un ensemble de scripts d’exemple qui traitent les données de sortie, écrits en awk, Perl 4 et Perl 5. Ils se trouvent dans le sous-répertoire « scripts » de la distribution lsof.
La troisième aide est la bibliothèque C utilisée pour la suite de tests lsof. La suite de tests est écrite en C et utilise les données de sortie pour valider le fonctionnement correct de lsof. La bibliothèque se trouve dans le fichier « tests/LTlib.c » de la distribution lsof. La bibliothèque utilise la première aide, le fichier d’en-tête « lsof_fields.h ».
BLOCAGES ET DÉLAIS
Lsof peut être bloqué par certaines fonctions du noyau qu’il utilise : lstat(2), readlink(2) et stat(2). Ces fonctions sont bloquées dans le noyau, par exemple lorsque les hôtes où résident les systèmes de fichiers NFS montés deviennent inaccessibles.
Lsof tente de rompre ces blocages à l’aide de temporisateurs et de processus enfants, mais ces techniques ne sont pas entièrement fiables. Lorsque lsof parvient à rompre un blocage, il signale la rupture avec un message d’erreur. Les messages peuvent être supprimés à l’aide des options -t et -w.
La valeur par défaut du délai peut être affichée à l’aide des options -h ou -?, et elle peut être modifiée à l’aide de l’option -S [t]. La valeur minimale de t est de deux secondes, mais il faut éviter les petites valeurs, car une faible réactivité du système peut entraîner l’expiration inattendue de courts délais et peut-être empêcher lsof de produire une sortie avant.
Lorsque lsof doit rompre un blocage lors de son accès aux informations sur les systèmes de fichiers montés, il continue généralement, mais avec moins d’informations disponibles pour l’affichage des fichiers ouverts.
Lsof peut également être configuré pour éviter l’utilisation de temporisateurs et de processus enfants lors de l’utilisation des fonctions du noyau qui pourraient bloquer en spécifiant l’option -O. Bien que cela permette à lsof de démarrer avec moins de surcharge, cela expose complètement lsof aux situations du noyau qui pourraient le bloquer. Utilisez cette option avec prudence.
ÉVITER LES BLOCAGES DU NOYAU
Vous pouvez utiliser l’option -b pour indiquer à lsof d’éviter d’utiliser les fonctions du noyau qui bloqueraient. Certaines précautions s’appliquent.
Tout d’abord, l’utilisation de cette option nécessite généralement que votre système fournisse des numéros de périphériques alternatifs à la place des numéros de périphériques que lsof obtiendrait normalement avec les fonctions lstat(2) et stat(2) du noyau. Voir la section NUMÉROS DE PÉRIPHÉRIQUES ALTERNATIFS pour plus d’informations sur les numéros de périphériques alternatifs.
Deuxièmement, vous ne pouvez pas spécifier de noms pour que lsof les localise, sauf s’il s’agit de noms de systèmes de fichiers. En effet, lsof a besoin de connaître les numéros de périphérique et d’index des fichiers répertoriés dans les options lsof, et l’option -b empêche lsof de les obtenir. De plus, comme lsof ne dispose que des numéros de périphériques des systèmes de fichiers qui ont des alternatives, sa capacité à localiser des fichiers sur les systèmes de fichiers dépend entièrement de la disponibilité et de l’exactitude des alternatives. Si aucune alternative n’est disponible ou si elles sont incorrectes, lsof ne pourra pas localiser les fichiers sur les systèmes de fichiers nommés.
Enfin, l'utilisation de l'option -b amène lsof à afficher des messages d'avertissement lorsqu'il doit utiliser les fonctions du noyau que l'option -b lui demande d'éviter. Vous pouvez supprimer ces messages en spécifiant l'option -w, mais si vous le faites, vous ne verrez pas les numéros de périphérique alternatifs affichés dans les messages d'avertissement.
NUMÉROS DE PÉRIPHÉRIQUE ALTERNATIFS
Sur certains systèmes, lorsque lsof doit interrompre un bloc parce qu'il ne peut pas obtenir d'informations sur un système de fichiers monté via les fonctions du noyau lstat(2) et stat(2), ou parce que vous avez spécifié l'option -b, lsof peut obtenir certaines des informations dont il a besoin (le numéro de périphérique et éventuellement le type de système de fichiers) à partir de la table de montage du système. Lorsque cela est possible, lsof affiche le numéro de périphérique qu'il a obtenu. (Vous pouvez supprimer ce rapport en spécifiant l'option -w.)
Vous pouvez faciliter ce processus si votre table de montage est prise en charge avec un fichier /etc/mtab ou /etc/mnttab qui contient un champ d'options, en ajoutant un champ ``dev=xxxx'' pour les points de montage qui n'en ont pas dans leurs chaînes d'options. Remarque : vous devez être en mesure de modifier le fichier. Certaines tables de montage, comme les fichiers /etc/mnttab ou /proc/mounts récents de Solaris ou de Linux, sont en lecture seule et ne peuvent pas être modifiées.
Vous pouvez également être en mesure de fournir des numéros de périphérique à l'aide des options +m et +m m, à condition qu'elles soient prises en charge par votre système. Vérifiez la sortie des options -h ou -? de lsof pour voir si les options +m et +m m sont disponibles.
La partie ``xxxx'' du champ est la valeur hexadécimale du numéro de périphérique du système de fichiers. (Consultez le champ st_dev de la sortie des fonctions lstat(2) et stat(2) pour les valeurs appropriées pour vos systèmes de fichiers.) Voici un exemple de Sun Solaris 2.6 /etc/mnttab pour un système de fichiers monté à distance via NFS :
nfs ignore,noquota,dev=2a40001
Il y a un avantage à avoir des entrées ``dev=xxxx'' dans votre fichier de table de montage, en particulier pour les systèmes de fichiers qui sont montés à partir de serveurs NFS distants. Lorsqu'un serveur distant tombe en panne et que vous souhaitez identifier ses utilisateurs en exécutant lsof sur l'un de ses clients, lsof ne pourra probablement pas obtenir de sortie des fonctions lstat(2) et stat(2) pour le système de fichiers. S'il peut obtenir le numéro de périphérique du système de fichiers à partir de la table de montage, il pourra afficher les fichiers ouverts sur le serveur NFS en panne.
Certains systèmes qui n'utilisent pas un fichier /etc/mtab ou /etc/mnttab ASCII pour la table de montage peuvent toujours fournir un numéro de périphérique alternatif dans leurs tables de montage internes. Cela inclut AIX, Apple Darwin, FreeBSD, NetBSD, OpenBSD et Tru64 UNIX. Lsof sait comment obtenir le numéro de périphérique alternatif pour ces systèmes et l'utilise lorsque sa tentative d'utiliser lstat(2) ou stat(2) pour le système de fichiers est bloquée.
Si vous n'êtes pas sûr que votre dialecte propose des numéros d'appareil alternatifs pour les systèmes de fichiers à partir de sa table de montage, utilisez cette invocation de lsof pour voir s'il signale des numéros d'appareil alternatifs :
lsof -b
Recherchez les messages d'avertissement d'erreur standard qui commencent par ``en supposant « dev=xxxx » à partir de... »``.
CACHE DE NOMS DU NOYAU
Lsof est capable d'examiner la cache de noms du noyau ou d'utiliser d'autres fonctions du noyau (par exemple, la fonction tag_to_path() d'ADVFS sous Tru64 UNIX) sur certains dialectes pour la plupart des types de systèmes de fichiers, à l'exclusion d'AFS, et d'extraire les composants de nom de chemin récemment utilisés. (Les recherches de chemin de système de fichiers AFS n'utilisent pas la cache de noms du noyau ; certaines opérations de système de fichiers Solaris VxFS n'y ont apparemment pas recours non plus.)
Lsof signale les chemins complets qu'il trouve dans la colonne NAME. Si lsof ne peut pas signaler tous les composants d'un chemin, il signale dans la colonne NAME le nom du système de fichiers, suivi d'un espace, de deux caractères -, d'un autre espace et des composants de nom qu'il a localisés, séparés par le caractère /.
Lorsque lsof est exécuté en mode répétitif, c'est-à-dire avec l'option -r spécifiée, la mesure dans laquelle il peut signaler les composants de nom de chemin pour le même fichier peut varier d'un cycle à l'autre. En effet, d'autres processus en cours d'exécution peuvent amener le noyau à supprimer des entrées de sa cache de noms et à les remplacer par d'autres.
L'utilisation par lsof de la cache de noms du noyau pour identifier les chemins des fichiers peut l'amener à signaler des composants incorrects dans certaines circonstances. Cela peut se produire lorsque la cache de noms du noyau utilise le numéro de périphérique et le numéro d'inode comme clé (par exemple, SCO OpenServer) et qu'une clé d'un système de fichiers en évolution rapide est réutilisée. Si le noyau du dialecte UNIX ne purge pas l'entrée de la cache de noms pour un fichier lorsqu'il est déslié, lsof peut trouver une référence à la mauvaise entrée dans la cache. La FAQ de lsof (la section FAQ indique son emplacement) contient plus d'informations sur cette situation.
Lsof peut signaler les composants de nom de chemin pour ces dialectes :
FreeBSD
HP-UX
Linux
NetBSD
SCO OpenServer
SCO|Caldera UnixWare
Solaris
Tru64 UNIX
Lsof ne peut pas signaler les composants de nom de chemin pour ces dialectes :
AIX
OpenBSD
Si vous souhaitez savoir pourquoi lsof ne peut pas signaler les composants de nom de chemin pour certains dialectes, consultez la FAQ de lsof (la section FAQ indique son emplacement).
FICHIER CACHE DE PÉRIPHÉRIQUE
L'examen de tous les membres de l'arborescence de nœuds /dev (ou /devices) avec les fonctions stat(2) peut prendre beaucoup de temps. De plus, les informations dont lsof a besoin (numéro de périphérique, numéro d'inode et chemin) changent rarement.
Par conséquent, lsof conserve normalement un fichier texte ASCII contenant des informations mises en cache de /dev (ou /devices) (exception : lsof basé sur /proc sous Linux, où ce n'est pas nécessaire). L'administrateur système local qui construit lsof peut contrôler la façon dont le chemin du fichier cache de périphérique est formé, en choisissant parmi ces options :
Chemin spécifié par l’option -D ;
Chemin spécifié par une variable d’environnement ;
Chemin système ;
Chemin personnel (par défaut) ;
Chemin personnel, modifié par une variable d’environnement.
Consultez la sortie des options d’aide -h, -D ? ou - ? pour connaître l’état actuel du support du cache de périphériques. La sortie de l’aide répertorie le chemin par défaut du fichier de cache de périphériques en mode lecture, qui est en vigueur pour l’invocation actuelle de lsof. La sortie de l’option -D ? répertorie les chemins des fichiers de cache de périphériques en lecture seule et en écriture, les noms des variables d’environnement applicables et le format du chemin du cache de périphériques personnel.
Lsof peut détecter qu’un fichier de cache de périphériques actuel a été accidentellement ou malveillamment modifié en effectuant des vérifications d’intégrité, y compris le calcul et la vérification d’une somme de contrôle de redondance cyclique (CRC) de 16 bits sur le contenu du fichier. Lorsque lsof détecte un problème avec le fichier, il émet un avertissement et tente de supprimer le fichier de cache actuel et d’en créer une nouvelle copie, mais uniquement vers un chemin dans lequel le processus peut légitimement écrire.
Le chemin à partir duquel un processus lsof peut tenter de lire un fichier de cache de périphériques peut ne pas être le même que le chemin vers lequel il peut légitimement écrire. Ainsi, lorsque lsof détecte qu’il doit mettre à jour le fichier de cache de périphériques, il peut choisir un chemin différent pour l’écrire par rapport au chemin à partir duquel il a lu une version incorrecte ou obsolète.
Si disponible, l’option -Dr empêchera l’écriture d’un nouveau fichier de cache de périphériques. (Elle est toujours disponible lorsqu’elle est spécifiée sans argument de nom de chemin.)
Lorsqu’un nouveau périphérique est ajouté au système, le fichier de cache de périphériques peut devoir être recréé. Étant donné que lsof compare le mtime du fichier de cache de périphériques avec le mtime et le ctime du répertoire /dev (ou /devices), il détecte généralement qu’un nouveau périphérique a été ajouté ; dans ce cas, lsof émet un message d’avertissement et tente de reconstruire le fichier de cache de périphériques.
Chaque fois que lsof écrit un fichier de cache de périphériques, il définit sa propriété sur l’UID réel du processus en cours d’exécution et ses modes de permission sur 0600, ce qui limite sa lecture et son écriture au propriétaire du fichier.
PERMISSIONS DE LSOF QUI AFFECTENT L’ACCÈS AUX FICHIERS DE CACHE DE PÉRIPHÉRIQUES
Deux permissions de l’exécutable lsof affectent sa capacité à accéder aux fichiers de cache de périphériques. Ces permissions sont définies par l’administrateur système local lors de l’installation de lsof.
La première permission, plus rare, est setuid-root. Elle entre en vigueur lorsque lsof est exécuté ; son UID effectif est alors root, tandis que son UID réel (c’est-à-dire celui de l’utilisateur connecté) ne l’est pas. La distribution lsof recommande que les versions pour ces variantes s’exécutent avec setuid-root.
HP-UX 11.11 et 11.23
Linux
La deuxième permission, plus courante, est setgid. Elle entre en vigueur lorsque l’ID de groupe effectif (GID) du processus lsof est défini sur un ID qui peut accéder aux périphériques de mémoire du noyau, par exemple « kmem », « sys » ou « system ».
Un processus lsof qui possède la permission setgid a généralement pour consigne de céder cette permission après avoir accédé aux périphériques de mémoire du noyau. Lorsqu’il le fait, lsof peut autoriser des formations de chemins de cache de périphériques plus libérales. La distribution lsof recommande que les versions pour ces variantes s’exécutent avec la permission setgid et qu’elles soient autorisées à céder la permission setgid.
AIX 5.[12] et 5.3-ML1
Apple Darwin 7.x Power Macintosh
FreeBSD 4.x, 4.1x, 5.x et [6789].x pour les systèmes x86
FreeBSD 5.x, [6789].x et 1[012].8 pour les systèmes Alpha, AMD64 et Sparc64
HP-UX 11.00
NetBSD 1.[456], 2.x et 3.x pour les systèmes Alpha, x86 et SPARC
OpenBSD 2.[89] et 3.[0-9] pour les systèmes x86
SCO OpenServer Release 5.0.6 pour les systèmes x86
SCO|Caldera UnixWare 7.1.4 pour les systèmes x86
Solaris 2.6, 8, 9 et 10
Tru64 UNIX 5.1
(Remarque : lsof pour AIX 5L et versions ultérieures nécessite la permission setuid-root si son option -X est utilisée.)
^ sof pour ces variantes ne prend pas en charge un cache de périphériques, de sorte que les permissions accordées à l’exécutable ne s’appliquent pas au fichier de cache de périphériques.
Linux
CHEMIN DU FICHIER DE CACHE DE PÉRIPHÉRIQUE À PARTIR DE L’OPTION -D
L’option -D fournit des moyens limités de spécifier le chemin du fichier de cache de périphériques. Sa fonction ? affiche les chemins des fichiers de cache de périphériques en lecture seule et en écriture qu’utilisera lsof.
Lorsque les fonctions -D b, r et u sont disponibles, vous pouvez les utiliser pour demander que le fichier de cache soit créé à un emplacement spécifique (b[chemin]); qu’il soit lu mais pas recréé (r[chemin]); ou qu’il soit lu et recréé (u[chemin]). Les fonctions b, r et u sont restreintes dans certaines conditions. Elles sont restreintes lorsque le processus lsof s’exécute avec la permission setuid-root. Le chemin spécifié avec la fonction r est toujours en lecture seule, même lorsqu’elle est disponible.
Les fonctions b, r et u sont également restreintes lorsque le processus lsof s’exécute avec la permission setgid et que lsof ne cède pas la permission setgid. (Voir la section « PERMISSIONS DE LSOF QUI AFFECTENT L’ACCÈS AU FICHIER DE CACHE DE PÉRIPHÉRIQUE » pour une liste des implémentations qui ne cèdent généralement pas leur permission setgid.)
Une autre fonction -D, i (pour ignore), est toujours disponible.
Lorsque la fonction b est disponible, elle indique à lsof de lire les informations sur les périphériques à partir du noyau avec la fonction [stat]({filename}../../stat)(2) et de créer un fichier de cache de périphériques au chemin indiqué.
Lorsque la fonction r est disponible, elle indique à lsof de lire le fichier de cache de périphériques, mais pas de le mettre à jour. Lorsqu’un argument de chemin accompagne -Dr, il indique le chemin du fichier de cache de périphériques. La fonction r est toujours disponible lorsqu’elle est spécifiée sans argument de nom de chemin. Si lsof ne s’exécute pas avec la permission setuid-root et qu’il cède sa permission setgid, un argument de nom de chemin peut accompagner la fonction r.
Lorsque la fonction u est disponible, elle indique à lsof de tenter de lire et d’utiliser le fichier de cache de périphériques. S’il ne peut pas lire le fichier, ou s’il trouve que le contenu du fichier est incorrect ou obsolète, il lira les informations à partir du noyau et tentera d’écrire une version mise à jour du fichier de cache de périphériques, mais uniquement vers un chemin qu’il considère comme légitime pour les UID réels et effectifs du processus lsof.
CHEMIN DU CACHE DES PÉRIPHÉRIQUES À PARTIR D'UNE VARIABLE D'ENVIRONNEMENT
Le deuxième choix de lsof pour le fichier de cache des périphériques est le contenu de la variable d'environnement LSOFDEVCACHE. Il évite ce choix si le processus lsof est exécuté avec les privilèges root (setuid-root), ou si l'UID réel du processus est root.
Une restriction supplémentaire s'applique au chemin du fichier de cache des périphériques provenant de la variable d'environnement LSOFDEVCACHE : lsof n'écrira pas de fichier de cache des
périphériques au chemin spécifié si le processus lsof ne renonce pas à son autorisation setgid. (Voir la section PERMISSIONS LSOF QUI AFFECTENT L'ACCÈS AU FICHIER DE CACHE DES PÉRIPHÉRIQUES pour plus d'informations sur les implémentations qui ne renoncent pas à leur autorisation setgid.)
L'administrateur système local peut désactiver l'utilisation de la variable d'environnement LSOFDEVCACHE ou modifier son nom lors de la compilation de lsof. Consultez la sortie de -D? pour connaître le nom de la variable d'environnement.
CHEMIN DU CACHE DES PÉRIPHÉRIQUES À L'ÉCHELLE DU SYSTÈME
L'administrateur système local peut choisir de disposer d'un fichier de cache des périphériques à l'échelle du système lors de la compilation de lsof. Ce fichier est généralement construit par une procédure d'administration système spéciale lorsque le système est démarré ou lorsque le contenu de /dev ou /devices) change. S'il est défini, il s'agit du troisième choix de chemin de fichier de cache des périphériques pour lsof.
Vous pouvez déterminer si un fichier de cache des périphériques à l'échelle du système est en vigueur pour votre installation locale en examinant la sortie de l'option d'aide de lsof, c'est-à-dire la sortie de l'option -h ou -?.
Lsof n'écrira jamais dans le chemin du fichier de cache des périphériques à l'échelle du système par défaut. Il doit être explicitement nommé à l'aide d'une fonction -D dans une procédure appartenant à root. Une fois que le fichier a été écrit, la procédure doit modifier ses modes de permission en 0644 (lecture et écriture pour le propriétaire, lecture pour le groupe et les autres).
CHEMIN DU CACHE DES PÉRIPHÉRIQUES PERSONNEL (PAR DÉFAUT)
Le chemin par défaut du fichier de cache des périphériques de la distribution lsof est celui qui est enregistré dans le répertoire personnel de l'UID réel qui exécute lsof. Un deuxième composant de chemin est ajouté au répertoire personnel, de la forme .lsof_nom_hôte.
Il s'agit du quatrième choix de chemin de fichier de cache des périphériques pour lsof, et il est généralement le chemin par défaut. Si un chemin de fichier de cache des périphériques à l'échelle du système a été défini lors de la compilation de lsof, ce quatrième choix sera appliqué lorsque lsof ne parvient pas à trouver le fichier de cache des périphériques à l'échelle du système. C'est la seule fois où lsof utilise deux chemins lors de la lecture du fichier de cache des périphériques.
La partie nom d'hôte du deuxième composant est le nom de base de l'hôte d'exécution, tel que renvoyé par
gethostname(2). Le nom de base est défini comme étant les caractères précédant le premier . dans la
sortie de gethostname(2), ou toute la sortie de gethostname(2) s'il ne contient pas de ..
Le fichier de cache des périphériques appartient à l'ID utilisateur et est lisible et accessible en écriture uniquement par cet ID utilisateur, c'est-à-dire que ses modes sont 0600. Chaque ID utilisateur réel distinct sur un hôte donné qui exécute lsof a un fichier de cache des périphériques distinct. La partie nom d'hôte du chemin distingue les fichiers de cache des périphériques dans un répertoire personnel monté via NFS dans lequel les fichiers de cache des périphériques sont écrits à partir de plusieurs hôtes différents.
Le chemin du fichier de cache de périphérique personnel formé par cette méthode représente un fichier de cache de périphérique que lsof tentera de lire et qu’il tentera d’écrire s’il n’existe pas ou si son contenu est incorrect ou obsolète.
L’option -Dr sans argument de chemin inhibera l’écriture d’un nouveau fichier de cache de périphérique.
L’option -D? affichera la spécification de format pour la construction du fichier de cache de périphérique personnel. Les conversions utilisées dans la spécification de format sont décrites dans le fichier 00DCACHE de la distribution lsof.
CHEMIN DU CACHE DE PÉRIPHÉRIQUE PERSONNEL MODIFIÉ
Si cette option est définie par l’administrateur système local lors de la compilation de lsof, le contenu de la variable d’environnement LSOFPERSDCPATH peut être utilisé pour ajouter un composant au chemin du fichier de cache de périphérique personnel.
Le contenu de la variable LSOFPERSDCPATH est inséré dans le chemin à l’endroit marqué par l’administrateur système local avec la conversion %p dans la spécification de format HASPERSDC du fichier d’en-tête machine.h du dialecte. (Il est placé juste après le répertoire personnel dans la distribution lsof par défaut.)
Ainsi, par exemple, si LSOFPERSDCPATH contient LSOF, le répertoire personnel est /Homes/abe, le nom d’hôte est lsof.itap.purdue.edu et le format HASPERSDC est le format par défaut (%h/%p.lsof\_%L), le chemin du fichier de cache de périphérique personnel modifié est :
/Homes/abe/LSOF/.lsof_vic
La variable d’environnement LSOFPERSDCPATH est ignorée lorsque le processus lsof est défini en tant que setuid-root ou lorsque l’UID réel du processus est root.
Lsof n’écrira pas dans un chemin de fichier de cache de périphérique personnel modifié si le processus lsof ne cède pas la permission setgid. (Voir la section LSOF PERMISSIONS THAT AFFECT DEVICE CACHE FILE ACCESS pour une liste des implémentations qui ne cèdent pas normalement leur permission setgid.)
Si, par exemple, vous souhaitez créer un sous-répertoire de chemins de fichiers de cache de périphérique personnel en utilisant la variable d’environnement LSOFPERSDCPATH pour le nommer, et que lsof ne cède pas sa permission setgid, vous devrez autoriser lsof à créer des fichiers de cache de périphérique au chemin personnel standard et les déplacer vers votre sous-répertoire à l’aide de commandes shell.
L’administrateur système local peut : désactiver cette option lors de la compilation de lsof ; modifier le nom de la variable d’environnement de LSOFPERSDCPATH à autre chose ; modifier le format HASPERSDC pour inclure le composant de chemin personnel à un autre endroit ; ou exclure complètement le composant de chemin personnel. Consultez la sortie de l’option -D? pour connaître le nom de la variable d’environnement et la spécification de format HASPERSDC.
DIAGNOSTICS
Les erreurs sont identifiées par des messages sur le fichier d’erreur standard.
Lsof renvoie un (1) si une erreur a été détectée, y compris l’échec de la localisation des noms de commande, des noms de fichiers, des adresses Internet ou des fichiers, des noms d’utilisateur, des fichiers NFS, des PID, des PGID ou des UID pour lesquels il a été invité à effectuer une liste. Si l’option -V est spécifiée, lsof indiquera les éléments de recherche pour lesquels il a échoué à effectuer une liste. Si l’option -Q est spécifiée, lsof ignorera tout échec d’élément de recherche et ne renverra une erreur que si quelque chose d’inhabituel et d’irrécupérable s’est produit.
Il renvoie zéro (0) si aucune erreur n'a été détectée et si l'option -Q a été spécifiée ou s'il a pu lister des informations sur tous les arguments de recherche spécifiés.
Lorsque lsof ne peut pas ouvrir l'accès à /dev (ou /devices) ou à l'un de ses sous-répertoires, ou obtenir des informations sur un fichier dans ceux-ci avec stat(2), il affiche un message d'avertissement et continue. Le fait que lsof affiche des messages d'avertissement concernant les fichiers inaccessibles dans /dev (ou /devices) est indiqué dans son affichage d'aide - demandé avec les options -h ou >B -? - avec le message :
Les avertissements d'accès à /dev sont activés.
Le message d'avertissement peut être supprimé avec l'option -w. Il peut également avoir été supprimé par l'administrateur système lors de la compilation de lsof par le paramètre de la définition WARNDEVACCESS. Dans ce cas, la sortie des options d'aide inclura le message :
Les avertissements d'accès à /dev sont désactivés.
Les messages d'avertissement concernant les périphériques inaccessibles disparaissent généralement après que lsof a créé un fichier de cache de périphériques fonctionnel.
EXEMPLES
Pour un ensemble plus complet d'exemples, documentés plus en détail, voir le fichier 00QUICKSTART de la distribution lsof.
Pour lister tous les fichiers ouverts, utilisez :
lsof
Pour lister tous les fichiers ouverts Internet, x.25 (HP-UX) et UNIX, utilisez :
lsof -i -U
Pour lister tous les fichiers réseau IPv4 ouverts utilisés par le processus dont l'ID est 1234, utilisez :
lsof -i 4 -a -p 1234
S'il est acceptable que l'ID de processus 1234 n'existe pas, ou que l'ID de processus 1234 n'ait aucun fichier réseau IPv4 ouvert, ajoutez -Q :
lsof -Q -i 4 -a -p 1234
En supposant que la variante UNIX prend en charge IPv6, pour lister uniquement les fichiers réseau IPv6 ouverts, utilisez :
lsof -i 6
Pour lister tous les fichiers utilisant n'importe quel protocole sur les ports 513, 514 ou 515 de l'hôte wonderland.cc.purdue.edu, utilisez :
lsof -i @wonderland.cc.purdue.edu:513-515
Pour lister tous les fichiers utilisant n'importe quel protocole sur n'importe quel port de mace.cc.purdue.edu (cc.purdue.edu est le domaine par défaut), utilisez :
lsof -i @mace
Pour lister tous les fichiers ouverts pour le nom d'utilisateur ``abe'', ou l'ID d'utilisateur 1234, ou le processus 456, ou le processus 123, ou le processus 789, utilisez :
lsof -p 456,123,789 -u 1234,abe
Pour lister tous les fichiers ouverts sur le périphérique /dev/hd4, utilisez :
lsof /dev/hd4
Pour trouver le processus qui a /u/abe/foo ouvert sans se soucier de savoir s'il n'y en a pas, utilisez :
lsof -Q /u/abe/foo
Pour effectuer une action uniquement si un processus a /u/abe/foo ouvert, utilisez :
lsof /u/abe/foo echo "still in use"
Pour envoyer un signal SIGHUP aux processus qui ont /u/abe/bar ouvert, utilisez :
kill -HUP `lsof -t /u/abe/bar`
Pour trouver tout fichier ouvert, y compris un fichier socket de domaine UNIX ouvert, portant le nom /dev/log, utilisez :
lsof /dev/log
Pour trouver les processus avec des fichiers ouverts sur le système de fichiers NFS nommé /nfs/mount/point dont le serveur est inaccessible, et en supposant que votre table de montage fournit le numéro de périphérique pour /nfs/mount/point, utilisez :
lsof -b /nfs/mount/point
Pour effectuer la recherche précédente en supprimant les messages d’avertissement, utilisez :
lsof -bw /nfs/mount/point
Pour ignorer le fichier du cache de périphérique, utilisez :
lsof -Di
Pour obtenir la sortie du PID et du nom de la commande pour chaque processus, le descripteur de fichier, le numéro de périphérique du fichier et le numéro d’inode du fichier pour chaque fichier de chaque processus, utilisez :
lsof -FpcfDi
Pour lister les fichiers aux descripteurs 1 et 3 de chaque processus exécutant la commande lsof pour l’ID de connexion « abe » toutes les 10 secondes, utilisez :
lsof -c lsof -a -d 1 -d 3 -u abe -r10
Pour lister le répertoire de travail actuel des processus exécutant une commande qui est exactement de quatre caractères et qui a un « o » ou un « O » dans le troisième caractère, utilisez cette forme d’expression régulière de l’option -c :
lsof -c /^..o.$/i -a -d cwd
Pour trouver un fichier de socket IPv4 par son adresse numérique sous forme décimale, utilisez :
lsof [email protected]
Pour trouver un fichier de socket IPv6 (lorsque le dialecte UNIX prend en charge IPv6) par son adresse numérique sous forme hexadécimale, utilisez :
lsof -i@[0:1:2:3:4:5:6:7]
Pour trouver un fichier de socket IPv6 (lorsque le dialecte UNIX prend en charge IPv6) par une adresse numérique sous forme hexadécimale qui contient une série de zéros, par exemple, l’adresse de boucle locale, utilisez :
lsof -i@[::1]
Pour obtenir une ligne de marqueur en mode répétition qui contient l’heure actuelle, utilisez :
lsof -rm====%T====
Pour ajouter des espaces à la ligne de marqueur précédente, utilisez :
lsof -r "m==== %T ===="
DÉFAUTS
Étant donné que lsof lit la mémoire du noyau dans sa recherche de fichiers ouverts, les modifications rapides de la mémoire du noyau peuvent produire des résultats imprévisibles.
Lorsqu’un fichier possède plusieurs verrous d’enregistrement, le caractère d’état du verrou (suivant le descripteur de fichier) est dérivé d’un test de la première structure de verrou, et non d’une combinaison des structures de verrou individuelles qui pourraient être décrites par plusieurs structures de verrou.
Lsof ne peut pas rechercher des fichiers dotés d’autorisations d’accès restrictives par nom, à moins qu’il ne soit installé avec l’autorisation set-UID root. Sinon, il est limité à la recherche de fichiers auxquels son utilisateur ou son groupe set-GID (le cas échéant) ont accès.
L’affichage de l’adresse de destination d’un socket brut (par exemple, pour ping) dépend du système d’exploitation UNIX. Certains dialectes stockent l’adresse de destination dans le bloc de contrôle de protocole du socket brut, tandis que d’autres ne le font pas.
Lsof ne peut pas toujours représenter les numéros de périphérique Solaris de la même manière que ls(1). Par exemple, les numéros de périphérique principal et secondaire que les fonctions lstat(2) et stat(2) signalent pour le répertoire sur lequel les fichiers CD-ROM sont montés (généralement /cdrom) ne sont pas les mêmes que ceux qu’il signale pour le périphérique sur lequel les fichiers CD-ROM sont montés (généralement /dev/sr0). (Lsof signale les numéros de répertoire.)
La prise en charge des systèmes de fichiers /proc est disponible uniquement pour les dialectes UNIX BSD et Tru64, Linux et les dialectes dérivés de SYSV R4, tels que FreeBSD, NetBSD, OpenBSD et Solaris.
Certains éléments de fichiers /proc, tels que le numéro de périphérique, le numéro d’inode et la taille du fichier, ne sont pas disponibles dans certains dialectes. La recherche de fichiers dans un système de fichiers /proc peut nécessiter que le nom de chemin complet soit spécifié.
Aucun descripteur de fichier de type texte (txt) n’est affiché pour les processus Linux. Toutes les entrées pour les fichiers autres que le répertoire de travail actuel, le répertoire racine et les descripteurs de fichiers numériques sont étiquetées comme descripteurs de mémoire (mem).
Lsof ne peut pas rechercher les canaux nommés Tru64 UNIX par leur nom, car leur implémentation du noyau de lstat(2) renvoie un numéro de périphérique incorrect pour un canal nommé.
Lsof ne peut pas fournir un rapport complet ou correct sur les verrous de HP-UX 9.01, 10.20 et 11.00 en raison d’un accès insuffisant aux données du noyau ou d’erreurs dans les données du noyau. Voir la FAQ de lsof (la section FAQ indique son emplacement) pour plus de détails.
Le type de fichier SMT d’AIX est une fabrication. Il est créé pour les structures de fichiers dont le type (15) n’est pas défini dans le fichier d’en-tête /usr/include/sys/file.h d’AIX. Un moyen de créer de telles structures de fichiers est d’exécuter des clients X avec la variable DISPLAY définie sur « :0.0 ».
L’option +|-f[cfn] n’est pas prise en charge sous lsof basé sur /proc pour Linux, car elle ne lit pas les structures du noyau à partir de la mémoire du noyau.
ENVIRONNEMENT
Lsof peut accéder aux variables d’environnement suivantes.
LANG définit une locale linguistique. Voir setlocale(3) pour les noms des autres variables qui peuvent être utilisées à la place de LANG, par exemple LC_ALL, LC_TYPE, etc.
LSOFDEVCACHE définit le chemin d’accès à un fichier de cache de périphériques. Voir la section CHEMIN D’ACCÈS AU CACHE DE PÉRIPHÉRIQUES À PARTIR D’UNE VARIABLE D’ENVIRONNEMENT pour plus d’informations.
LSOFPERSDCPATH définit le composant central d’un chemin d’accès modifié au fichier de cache de périphériques personnel. Voir la section CHEMIN D’ACCÈS MODIFIÉ AU CACHE DE PÉRIPHÉRIQUES PERSONNEL pour plus d’informations.
FAQ
Une foire aux questions (FAQ) et leurs réponses sont disponibles dans le fichier 00FAQ de la distribution lsof.
La dernière version du fichier se trouve à :
https://github.com/lsof-org/lsof/blob/master/00FAQ
FICHIERS
/dev/kmem périphérique de mémoire virtuelle du noyau
/dev/mem périphérique de mémoire physique
/dev/swap périphérique de pagination du système
.lsof_hostname fichier de cache de périphériques de lsof (le suffixe, hostname, est le premier composant du nom de l’hôte renvoyé par gethostname(2)).
AUTEURS
Lsof a été écrit par Victor A. Abell <_> de l’Université Purdue. Depuis la version 4.93.0, l’équipe lsof-org de GitHub assure la maintenance de lsof. De nombreuses autres personnes ont contribué à lsof. Elles sont répertoriées dans le fichier 00CREDITS de la distribution lsof.
DISTRIBUTION
La dernière distribution de lsof est disponible à :
https://github.com/lsof-org/lsof/releases
VOIR AUSSI
Toutes les pages de manuel suivantes peuvent ne pas exister dans chaque dialecte UNIX auquel lsof a été porté.
access(2), awk(1), crash(1), fattach(3C), ff(1), fstat(8), fuser(1), gethostname(2), isprint(3), kill(1), localtime(3), lstat(2), modload(8), mount(8), netstat(1), ofiles(8L), open(2), perl(1), ps(1), readlink(2), setlocale(3), stat(2), strftime(3), time(2), uname(1).