Comment utiliser la commande Linux lsof

Contenu

Indicateur de shell sous Linux

Si tout dans Linux est un fichier, il doit y avoir plus que des fichiers sur votre disque dur. Ce tutoriel va vous montrer comment utiliser lsof pour voir tous les autres appareils et processus qui sont traités comme des fichiers.

En Linux, tout est un fichier

La phrase fréquemment citée que tout dans Linux est un fichier est vraie. Un fichier est un ensemble d'octets. Quand ils lisent Dans un programme ou envoyé à une imprimante, ils ressemblent à produire un flux d'octets. Quand ils sont écrits afin de, eux Accepter un flux d'octets.

De nombreux autres composants du système acceptent ou génèrent des flux d'octets, comme les claviers, connexions de prise, imprimantes et processus de communication. Parce qu'ils acceptent, générer ou accepter et générer des flux d'octets, ces appareils peuvent être géré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 contrôleurs pouvait être créé, des outils et des API pour gérer un large éventail de ressources différentes.

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

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

EN RELATION: Que signifie “tout est un fichier” fr Linux?

La commande lsof

De nombreux processus ou dispositifs qui lsof peuvent signaler qu'ils appartiennent à root ou ont été démarrés par root, vous devrez donc utiliser le sudo commande avec lsof.

Et parce que cette liste sera très longue, nous allons le canaliser less .

sudo lsof | moins

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

lsof: ATTENTION: ne peut pas stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.

lsof essayez de traiter tous les systèmes de fichiers montés. Ce message d'avertissement est généré car lsof a trouvé un Système de fichiers virtuel GNOME (GVFS). Il s'agit d'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, même pas racine, peut accéder à l'un de ces systèmes de fichiers, à part le propriétaire qui l'a monté (pour ce cas, GNOME). Vous pouvez ignorer cet avertissement.

La sortie de lsof c'est très large. Les colonnes de gauche sont:

Les colonnes de 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 à la procédure qui a ouvert le fichier.
  • PID: Numéro d'identification de la procédure de la procédure qui a ouvert le dossier.
  • TEMPS: Numéro d'identification de la tâche (salut). Une colonne vide signifie qu'il ne s'agit pas d'une tâche; c'est une procédure.
  • Utilisateur: ID utilisateur ou nom de l'utilisateur auquel appartient la procédure, o l'identifiant ou le login de la personne qui possède l'annuaire dans /proclsof trouver des informations sur la procédure.
  • FD: Affiche le descripteur de fichier du fichier. Les descripteurs de fichiers sont décrits ci-dessous.
  • Écrivez: type de nœud associé au fichier. Les types de notes sont décrits ci-dessous.
  • Dispositif: Contient les numéros d'appareil, séparé par des virgules, pour un caractère spécial, bloc spécial, ordinaire, Répertoire ou fichier 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 socket Linux AX.25..
  • Taille / Désactivé: 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 sur l'hôte du serveur ou le type de protocole Internet. Vous pouvez afficher STR pour un flux ou l'IRQ ou le numéro d'inode d'un périphérique socket Linux AX.25.
  • nom: Affiche le nom du point de montage et le système de fichiers où réside le fichier.

Colonne FD

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

L'entrée de la colonne FD peut se composer 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'informations FD (voir la colonne NOM).
  • ltx: Texte de bibliothèque partagé (code et données).
  • m86: Fichier mappé de fusion DOS.
  • mem: Fichier mappé en mémoire.
  • mmap: Dispositif de carte 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.
  • ton: Accès en lecture et en écriture.
  • ”: Un caractère spatial, 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: Verrouillage en lecture sur l'intégralité du fichier.
  • w: Verrouillage en écriture sur une partie du fichier.
  • W: Verrouillage en écriture sur l'intégralité du fichier.
  • ton: Verrou de lecture et d'écriture de n'importe quelle longueur.
  • U: Type de verrou inconnu.
  • ”: Un caractère spatial. Aucun verrou.

La colonne TYPE

exister plus de 70 billets qui peut apparaître dans la colonne TYPE. Certaines entrées courantes que vous verrez sont:

  • REG: Fichier de système de fichiers normal.
  • POUR VOUS: annuaire.
  • FIFO: Premier arrivé et premier sorti.
  • CHR: Fichier spécial de caractère.
  • NOIR: Verrouiller le fichier spécial.
  • l'Internet: Prise Internet.
  • unix: Socket de dominio UNIX

Afficher les processus qui ont ouvert un fichier

Pour voir les processus qui ont ouvert un certain fichier, fournir le nom du fichier en paramètre à lsof. Par exemple, pour voir les processus qui ont été ouverts kern.log déposer, utilise cette commande:

sudo lsof /var/log/kern.log

lsof répond en montrant la procédure unique, rsyslogd qui a été initié par l'utilisateur syslog.

Afficher tous les fichiers ouverts à partir d'un répertoire

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

Pour voir tous les fichiers ouverts dans le /var/log/ annuaire, utilise 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 depuis le /home annuaire, utilisez la commande suivante:

sudo lsof +D /home

Les fichiers ont été ouverts depuis /home le répertoire s'affiche. Notez qu'avec des descriptions plus courtes dans certaines colonnes, la liste complète est plus limitée.

Lister les fichiers ouverts par une procédure

Pour afficher les fichiers qui ont été ouverts par une procédure particulière, utiliser el -c (commander) option. Notez que vous pouvez fournir plusieurs définitions de recherche pour lsof tout de suite.

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.

Afficher les fichiers ouverts par un utilisateur

Pour limiter l'affichage aux fichiers qui ont été ouverts par un utilisateur spécifique, Utilisez le -u option (Nom d'utilisateur). Dans cet exemple, nous verrons les fichiers qui ont été ouverts par des processus appartenant à Mary ou démarré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 parce que Mary s'est connectée.

Exclure les fichiers ouverts par un utilisateur

Pour exclure les fichiers qu'un utilisateur a ouverts, Utilisez le ^ opérateur. L'exclusion d'utilisateurs de la liste permet de trouver plus facilement les informations qui vous intéressent. Vous devez utiliser le -u option comme avant, et ajoutez le ^ caractère au début du nom de l'utilisateur.

sudo lsof +D /home -u ^mary

Cette fois, la liste de /home Le répertoire n'inclut aucun des fichiers ouverts par l'utilisateur Mary.

Liste des fichiers ouverts par une procédure

Pour lister les fichiers qui ont été ouverts via une procédure spécifique, Utilisez le -p (traiter) et fournissez l'identifiant de la procédure en paramètre.

sudo lsof - p 4610

Tous les fichiers qui ont été ouverts avec l'ID de procédure que vous fournissez sont automatiquement répertoriés.

Liste des identifiants de procédure qui ont ouvert un fichier

Pour afficher les ID de procédure des processus qui ont ouvert un fichier particulier, utiliser el -t (concis) et fournissez le nom du fichier dans la ligne de commande.

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

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

Utiliser les recherches AND et OR

Listons les fichiers que l'utilisateur Mary a ouverts, 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, donc ça devrait être facile.

sudo lsof -u mary -c ssh

Voyons maintenant la sortie de lsof. ça n'a pas l'air bien; il y a des entrées dans la sortie qui ont été démarrées par root.

Ce n'est pas ce que nous attendions. Qu'est-ce qui s'est passé?

Lorsque vous fournissez plusieurs termes de recherche lsof renverra tout fichier qui correspond au premier terme de recherche O le deuxième terme de recherche, et ainsi de suite. Autrement dit, effectuer une recherche OR.

Pour faire lsof effectuer une recherche ET, Utilisez le -a (et) option. Cela signifie que les seuls fichiers à lister 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

Maintenant, chaque fichier de la liste est celui qui a été ouvert par ou au nom de Marie, et il est lié à la commande SSH.

Mettre à jour automatiquement l'écran

Nous pouvons utiliser le +|-r (répéter) possibilité de mettre lsof en mode répétition. L'option de répétition peut être appliquée de deux manières, Soit +r O -r. Il faut aussi ajouter le nombre de secondes que l'on veut lsof attendre avant de mettre à jour l'écran.

L'utilisation de l'option de répétition dans n'importe quel format rend lsof afficher les résultats comme d'habitude, mais ajoutez une ligne pointillée en bas de l'écran. Attendez le nombre de secondes fourni sur la ligne de commande, puis actualisez l'écran avec un nouvel ensemble de résultats.

Avec lui -r option, cela continuera jusqu'à ce que vous appuyiez sur Ctrl + C. Avec lui +r format, continuera jusqu'à ce qu'il n'y ait plus de résultats à 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 mise à jour.

Affichage des fichiers associés aux connexions Internet

Les -i L'option (l'Internet) vous permet de visualiser les fichiers ouverts par les processus associés aux connexions réseau et Internet.

lsof -i

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

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

Pour afficher les fichiers ouverts par les connexions Internet qui sont associés à un ID de procédure spécifique, ajouter le -p option et -a option.

Ici, nous recherchons les fichiers ouverts via une connexion Internet ou réseau, par une procédure avec un ID de 606.

sudo lsof -i -a -p 606

Tous les fichiers ouverts sont affichés par ID de procédure 606 qui sont associés à des connexions réseau ou Internet.

Affichage des fichiers associés aux connexions et commandes Internet

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

lsof -i -a -c ssh

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

Affichage des fichiers associés aux ports et connexions Internet

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

Ici, nous demandons lsof pour lister les fichiers qui ont été ouverts sur 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, ils utilisent un protocole spécifique. Nous pouvons choisir parmi 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 ça. Combien plus peut être jugé par le fait que la page de manuel a plus de 2.800 lignes.

Les lsof La commande peut être utilisée pour creuser de plus en plus profondément dans les couches de fichiers ouverts et de pseudo-fichiers. Nous avons fourni une carte schématique; l'atlas est en la page de manuel.

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.