Comment utiliser la commande Linux lsof

Si tout dans Linux est un fichier, il doit y avoir plus que de simples fichiers sur votre disque dur. Ce tutoriel vous montrera comment utiliser lsof pour voir tous les autres périphériques et processus traités sous forme de fichiers.

Sous Linux, tout est un fichier

La phrase souvent citée selon laquelle tout sous Linux est un fichier est en quelque sorte vraie. Un fichier est une collection d’octets. Quand ils sont lus dans un programme ou envoyés à une imprimante, ils semblent produire un flux d’octets. Quand ils sont écrits à, elles ou ils J’accepte un flux d’octets.

De nombreux autres composants système acceptent ou génèrent des flux d’octets, tels que des claviers, des connexions de socket, des imprimantes et des processus de communication. Comme ils acceptent, génèrent ou acceptent et génèrent des flux d’octets, ces périphériques peuvent être traités – à un niveau très bas – comme s’il s’agissait de fichiers.

Ce concept de conception a simplifié la mise en œuvre du système d’exploitation Unix. Cela signifiait qu’un petit ensemble de gestionnaires, d’outils et d’API pouvait être créé pour gérer un large éventail de ressources différentes.

Les données et les fichiers de programme qui résident sur votre disque dur sont de simples anciens fichiers du système de fichiers. Nous pouvons utiliser le ls commande pour les lister et découvrir quelques détails à leur sujet.

Comment pouvons-nous connaître tous les autres processus et périphériques qui sont traités comme s’il s’agissait de fichiers? Nous utilisons le lsof commander. Cela répertorie les fichiers ouverts dans le système. Autrement dit, il répertorie tout ce qui est traité comme s’il s’agissait d’un fichier.

Bientôt: Que signifie «tout est un fichier» sous Linux?

La commande lsof

De nombreux processus ou appareils qui lsof peuvent rapporter sur appartenir à root ou ont été lancés par root, vous devrez donc utiliser le sudo commande avec lsof.

Et comme cette liste sera très longue, nous allons la faire passer less .

sudo lsof | less

Avant le lsof La sortie apparaît Les utilisateurs de GNOME peuvent voir un message d’avertissement dans la fenêtre du terminal.

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.

lsof essaie de traiter tous les systèmes de fichiers montés. Ce message d’avertissement est émis car lsof a rencontré un Système de fichiers virtuel GNOME (GVFS). C’est un cas particulier de système de fichiers dans l’espace utilisateur (FUSIBLE). Il agit comme un pont entre GNOME, ses API et le noyau. Personne – pas même root – ne peut accéder à l’un de ces systèmes de fichiers, à l’exception du propriétaire qui l’a monté (dans ce cas, GNOME). Vous pouvez ignorer cet avertissement.

La sortie de lsof est très large. Les colonnes les plus à gauche sont:

Les colonnes les plus à droite sont:

Les colonnes lsof

Toutes les colonnes ne s’appliquent pas à tous les types de fichiers ouverts. Il est normal que certains d’entre eux soient vides.

  • Commander: Le nom de la commande associée au processus qui a ouvert le fichier.
  • PID: Processus Numéro d’identification du processus qui a ouvert le fichier.
  • TID: Numéro d’identification de la tâche (thread). Une colonne vide signifie que ce n’est pas une tâche; c’est un processus.
  • Utilisateur: ID utilisateur ou nom de l’utilisateur auquel appartient le processus, ou ID utilisateur ou login de la personne propriétaire de l’annuaire dans /proclsof trouve des informations sur le processus.
  • FD: Affiche le descripteur de fichier du fichier. Les descripteurs de fichiers sont décrits ci-dessous.
  • Taper: type de nœud associé au fichier. Les types de notes sont décrits ci-dessous.
  • Dispositif: Contient soit les numéros de périphérique, séparés par des virgules, pour un fichier spécial caractère, bloc spécial, normal, répertoire ou NFS, ou une adresse de référence du noyau qui identifie le fichier. Il peut également afficher l’adresse de base ou le nom de périphérique d’un périphérique de socket Linux AX.25.
  • Taille / Off: Affiche la taille du fichier ou le décalage du fichier en octets.
  • Nœud: Affiche le numéro de nœud d’un fichier local, ou le numéro d’inode d’un fichier NFS dans l’hôte du serveur, ou le type de protocole Internet. Il peut afficher STR pour un flux ou l’IRQ ou le numéro d’inode d’un périphérique de socket Linux AX.25.
  • Nom: Affiche le nom du point de montage et du système de fichiers sur lequel réside le fichier.
En relation :  Comment créer des règles côté serveur dans Outlook

La colonne FD

Le descripteur de fichier dans la colonne FD peut être l’une des nombreuses options; la page de manuel listez-les tous.

L’entrée de colonne FD peut être composée de trois parties: un descripteur de fichier, un caractère de mode et un caractère de verrouillage. Certains descripteurs de fichiers courants sont:

  • cwd: Répertoire de travail actuel.
  • se tromper: Erreur d’information FD (voir la colonne NOM).
  • ltx: Texte de la bibliothèque partagée (code et données).
  • m86: Fichier mappé de fusion DOS.
  • mem: Fichier mappé en mémoire.
  • mmap: Périphérique mappé en mémoire.
  • pd: Dossier Parent.
  • rtd: Répertoire racine.
  • SMS: Texte du programme (code et données)
  • Un nombre, représentant un descripteur de fichier.

Le caractère de mode peut être l’un des suivants:

  • r: Accès en lecture.
  • w: Accès en écriture.
  • u: Accès en lecture et en écriture.
  •  »: Un caractère espace, si le mode est inconnu et qu’il n’y a pas de caractère de verrouillage.
  • : Mode inconnu et il y a un caractère de verrouillage.

Le caractère de verrouillage peut être l’un des suivants:

  • r: Verrou de lecture sur une partie du fichier.
  • R: Verrou de lecture sur l’ensemble du fichier.
  • w: Verrou d’écriture sur une partie du fichier.
  • W: Verrou d’écriture sur l’ensemble du fichier.
  • u: Verrou en lecture et en écriture de n’importe quelle longueur.
  • U: Type de verrou inconnu.
  •  »: Un caractère d’espace. Pas de verrou.

La colonne TYPE

Il y a plus de 70 entrées qui peuvent apparaître dans la colonne TYPE. Certaines entrées courantes que vous verrez sont:

  • REG: Fichier de système de fichiers normal.
  • DIR: Annuaire.
  • FIFO: Premier entré, premier sorti.
  • CHR: Fichier spécial de caractères.
  • BLK: Bloquer le fichier spécial.
  • INET: Prise Internet.
  • unix: Socket de domaine UNIX

Voir les processus qui ont ouvert un fichier

Pour voir les processus qui ont ouvert un certain fichier, indiquez le nom du fichier comme paramètre à lsof. Par exemple, pour voir les processus qui se sont ouverts kern.log fichier, utilisez cette commande:

sudo lsof /var/log/kern.log

lsof répond en affichant le processus unique, rsyslogd qui a été démarré par l’utilisateur syslog.

Voir tous les fichiers ouverts à partir d’un répertoire

Pour voir les fichiers qui ont été ouverts à partir d’un répertoire et les processus qui les ont ouverts, passez le répertoire à lsof comme paramètre. Vous devez utiliser le +D (répertoire) option.

Pour voir tous les fichiers ouverts dans le /var/log/ répertoire, utilisez cette commande:

sudo lsof +D /var/log/

lsof répond avec une liste de tous les fichiers ouverts dans ce répertoire.

Pour voir tous les fichiers qui ont été ouverts à partir du /home répertoire, utilisez la commande suivante:

sudo lsof +D /home

Les fichiers ont été ouverts depuis le /home répertoire sont affichés. Notez qu’avec des descriptions plus courtes dans certaines colonnes, la liste entière est plus étroite.

Liste des fichiers ouverts par un processus

Pour voir les fichiers qui ont été ouverts par un processus particulier, utilisez le -c (commande) option. Notez que vous pouvez fournir plusieurs termes de recherche à lsof immediatement.

sudo lsof -c ssh -c init

lsof fournit une liste des fichiers qui ont été ouverts par l’un des processus fournis sur la ligne de commande.

Voir les fichiers ouverts par un utilisateur

Pour limiter l’affichage aux fichiers qui ont été ouverts par un utilisateur spécifique, utilisez le -u (utilisateur) option. Dans cet exemple, nous examinerons les fichiers qui ont été ouverts par des processus appartenant ou lancés au nom de Mary.

sudo lsof -u mary

Tous les fichiers répertoriés ont été ouverts au nom de l’utilisateur Mary. Cela inclut les fichiers qui ont été ouverts par l’environnement de bureau, par exemple, ou simplement à la suite de la connexion de Mary.

Exclusion des fichiers ouverts par un utilisateur

Pour exclure les fichiers qui ont été ouverts par un utilisateur, utilisez le ^ opérateur. Le fait d’exclure des utilisateurs de la liste facilite la recherche des informations qui vous intéressent. Vous devez utiliser le -u comme précédemment, et ajoutez le ^ caractère au début du nom de l’utilisateur.

sudo lsof +D /home -u ^mary

Cette fois, la liste des /home Le répertoire n’inclut aucun des fichiers qui ont été ouverts par l’utilisateur Mary.

Liste des fichiers ouverts par un processus

Pour lister les fichiers qui ont été ouverts par un processus spécifique, utilisez le -p (process) et indiquez l’ID de processus en tant que paramètre.

sudo lsof - p 4610

Tous les fichiers qui ont été ouverts par l’ID de processus que vous fournissez sont répertoriés pour vous.

Liste des ID de processus qui ont ouvert un fichier

Pour voir les ID de processus pour les processus qui ont ouvert un fichier particulier, utilisez le -t (laconique) et indiquez le nom du fichier sur la ligne de commande.

sudo lsof -t /usr/share/mime/mime.cache

Les ID de processus sont affichés dans une liste simple.

En relation :  Qu'est-ce que Masquer mon e-mail dans iOS 15 et comment l'utiliser sur iPhone et iPad

Utiliser les recherches AND et OR

Listons les fichiers qui ont été ouverts par l’utilisateur Mary, qui sont liés aux processus SSH. Nous savons que nous pouvons fournir plus d’un élément de recherche sur la ligne de commande, cela devrait donc être facile.

sudo lsof -u mary -c ssh

Regardons maintenant la sortie de lsof. Cela ne semble pas correct; il y a des entrées dans la sortie qui ont été démarrées par root.

Ce n’est pas ce à quoi nous nous attendions. Qu’est ce qui c’est passé?

Lorsque vous fournissez plusieurs termes de recherche lsof renverra tout fichier correspondant au premier terme de recherche ou le deuxième terme de recherche, et ainsi de suite. En d’autres termes, il effectue une recherche OR.

Faire lsof effectuez une recherche AND, utilisez le -a (et) option. Cela signifie que les seuls fichiers qui seront répertoriés seront ceux qui correspondent au premier terme de recherche, et le deuxième terme de recherche, et ainsi de suite.

Essayons à nouveau et utilisons le -a option.

sudo lsof -u mary -c ssh -a

Désormais, chaque fichier de la liste est un fichier qui a été ouvert par ou au nom de Mary et qui est associé à la commande SSH.

Rafraîchissement automatique de l’affichage

Nous pouvons utiliser le +|-r (répéter) option à mettre lsof en mode répétition. L’option de répétition peut être appliquée de deux manières, soit +r ou -r. Il faut aussi ajouter le nombre de secondes que l’on veut lsof attendre avant de rafraîchir l’affichage.

L’utilisation de l’option de répétition dans l’un ou l’autre format rend lsof afficher les résultats comme d’habitude, mais il ajoute une ligne en pointillés au bas de l’écran. Il attend le nombre de secondes fourni sur la ligne de commande, puis actualise l’affichage avec un nouvel ensemble de résultats.

Avec le -r cette option continuera jusqu’à ce que vous appuyiez sur Ctrl + C. Avec le +r format, il continuera jusqu’à ce qu’il n’y ait aucun résultat à afficher, ou jusqu’à ce que vous appuyiez sur Ctrl + C.

sudo lsof -u mary -c ssh -a -r5

Notez la ligne pointillée au bas de la liste. Cela sépare chaque nouvel affichage de données lorsque la sortie est actualisée.

Affichage des fichiers associés aux connexions Internet

Le -i (Internet) vous permet de voir les fichiers ouverts par les processus associés aux connexions réseau et Internet.

lsof -i

Tous les fichiers ouverts par les connexions réseau et Internet sont affichés.

Affichage des fichiers associés aux connexions Internet par ID de processus

Pour voir les fichiers ouverts par des connexions Internet qui sont associés à un ID de processus spécifique, ajoutez le -p option et le -a option.

Ici, nous recherchons des fichiers ouverts par une connexion Internet ou réseau, par un processus avec un ID de 606.

sudo lsof -i -a -p 606

Tous les fichiers ouverts par l’ID de processus 606 associés à des connexions Internet ou réseau sont affichés.

Affichage des fichiers associés aux connexions et commandes Internet

Nous pouvons utiliser le -c (commande) option pour rechercher les fichiers ouverts par des processus spécifiques. Pour rechercher les fichiers qui ont été ouverts par Internet ou par des connexions réseau associées au ssh processus, utilisez la commande suivante:

lsof -i -a -c ssh

Tous les fichiers ouverts en raison des processus ssh sont répertoriés dans la sortie.

Affichage des fichiers associés aux connexions Internet et aux ports

Nous pouvons faire lsof rapport sur les fichiers qui ont été ouverts par Internet ou des connexions réseau sur un port spécifique. Pour ce faire, nous utilisons le : caractère suivi du numéro de port.

Ici nous demandons lsof pour lister les fichiers qui ont été ouverts par des connexions réseau ou Internet via le port 22.

lsof -i :22

Tous les fichiers répertoriés ont été ouverts par des processus associés au port 22 (qui est le port par défaut pour les connexions SSH).

Affichage des fichiers associés aux connexions et protocoles Internet

Nous pouvons demander lsof pour afficher les fichiers qui ont été ouverts par des processus associés aux connexions réseau et Internet, qui utilisent un protocole spécifique. Nous pouvons choisir entre TCP, UDP et SMTP. Utilisons le protocole TCP et voyons ce que nous obtenons.

sudo lsof -i tcp

Les seuls fichiers répertoriés sont ceux ouverts par des processus utilisant le protocole TCP.

Nous n’avons fait qu’effleurer la surface

C’est une bonne base dans certains cas d’utilisation courants pour lsof, mais il y a bien plus que cela. Le fait que la page de manuel comporte plus de 2 800 lignes peut en juger d’autres.

Le lsof La commande peut être utilisée pour approfondir toujours plus les strates des fichiers ouverts et des pseudo-fichiers. Nous avons fourni un croquis; l’atlas est en la page de manuel.

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.