Comment répertorier les fichiers ouverts pour un processus sous Linux

Guide d'utilisation de la commande 'lsof' pour un processus

Si vous êtes un utilisateur fréquent de systèmes Linux ou Unix, vous avez sûrement déjà entendu l'expression « Sous Linux, tout est un fichier ». Cela peut être classé comme une simplification excessive du concept, mais cela s'avère très utile pour comprendre comment fonctionnent les fichiers dans le système Linux.

Tout ce qui apparaît dans l'environnement Linux ne doit pas nécessairement être un fichier. Parfois, il peut s'agir d'un processus, il peut s'agir d'un fichier spécial représentant les informations matérielles, les répertoires et d'autres éléments.

Ce didacticiel vous guidera dans la recherche de tous les fichiers ouverts pour un processus particulier sous Linux.

Introduction à lsof Commander

La beauté du système Linux est que vous pouvez contrôler et gérer l'ensemble de votre système via le terminal, à condition que vous connaissiez bien les commandes. Une fois les commandes connues, toutes les tâches sur le terminal deviennent un jeu d'enfant.

lsof signifie 'Liste des fichiers ouverts'. Une fois que vous connaissez la version longue de la commande, il devient très facile pour vous de comprendre et d'utiliser la commande de manière productive.

le lsof La commande affiche les listes des fichiers, sockets et canaux ouverts. Vous pouvez facilement rechercher les fichiers ouverts à l'aide de cette commande. Quand le lsof La commande est utilisée sans aucune option, elle affiche tous les fichiers ouverts par rapport aux processus actifs en cours d'exécution.

Noter: Assurez-vous d'utiliser sudo lors de l'exécution des commandes.

En utilisant le lsof Commander

Nous étudierons le rendement du lsof commande en détail. Étudiez la commande suivante.

sudo lsof | moins

Noter: Si nous exécutons directement le lsof commande, la sortie sera très volumineuse et pourrait créer de la confusion pour aller plus loin. Par conséquent, ici j'ai utilisé lsof | moins commande pour la commodité du didacticiel.

Sortir:

gaurav@ubuntu:~$ sudo lsof | less COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 root txt inconnu /proc/31/exe netns 32 root cwd DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt inconnu /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 33 root rtd DIR 8,8 4096 2 / rcu_tasks 33 root txt inconnu /proc/33/exe kauditd 34 root cwd DIR 8,8 4096 2 / kauditd 34 root rtd DIR 8,8 4096 2 / kauditd 34 root txt inconnu /proc/34/exe 

Voici les attributs qui sont affichés à l'aide de la lsof commander.

ParamètreLa description
CommanderAffiche le nom de la commande qui ouvre le fichier.
PIDNuméro d'identification du processus du processus qui ouvre le fichier.
TIDNuméro d'identification du fil. Il peut s'agir d'un fil ou d'un numéro de tâche.
UtilisateurID utilisateur ou nom de l'utilisateur qui est le propriétaire du processus.
FDAffiche le descripteur de fichier du fichier.
TaperType de nœud associé au fichier.
AppareilAffiche les numéros d'appareil.
Taille/DésactivéAffiche la taille du fichier en octets.
NœudAffiche le numéro d'inode du répertoire ou du répertoire parent.
NomAffiche le nom du système de fichiers où se trouve le processus.

Lister les processus

Tout d'abord, il est important que vous obteniez les processus en cours d'exécution et leurs identifiants de processus respectifs. Linux fournit une variété de commandes pour répertorier les processus ainsi que leurs attributs tels que PID, utilisateur, répertoire, etc.

Vous pouvez utiliser les commandes comme Haut, ps, htop, pstree pour lister les processus sur le terminal.

Tout au long du didacticiel, j'utiliserai le Haut commande de le faire. le Haut La commande fournit une vue dynamique en temps réel d'un système en cours d'exécution. Il affiche également tous les processus et threads actuellement gérés par le noyau Linux. Étudiez le bloc ci-dessous pour vérifier la sortie du Haut commander.

Syntaxe:

haut sudo

Sortir:

gaurav@ubuntu:~$sudo top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:48.08 Contenu Web 1173 mongodb 20 0 288536 6776 3428 S 5.9 0.2 2: 34,41 mongod 13765 gaurav 20 0 2931568 131408 47496 S 5,9 3,3 1:42,34 Contenu Web 1 racine 20 0 225904 6824 4900 S 0,0 0,2 0:27,25 systemd 2 racine 20 0 0 0 0 S 0,0 0,0 0:00.05 kthreadd 4 racine 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 0:01.89 ksoftirqd/0 8 root 20 0 0 0 0 I 0.0 0.0 0:22.32 rcu_sched 9 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh 10 root rt 0 0 0 0 S 0.0 0.0 0:03.13 migration/0 

Dans le bloc ci-dessus, nous pouvons voir toutes les informations liées au processus en un seul endroit. De là, nous pouvons trouver le PID du processus dont nous devons afficher les fichiers ouverts à l'aide de la lsof commander.

Mais si vous souhaitez connaître l'ID de processus d'un seul processus particulier et éviter d'autres processus indésirables, utilisez la commande suivante.

Syntaxe:

haut sudo | grep [Process_Name]

Exemple:

gaurav@ubuntu:~$ haut | grep terminal 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0:53.63 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 1.0 0.5 0:53.66 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0:53.67 gnome -terminal- gaurav@ubuntu:~$

Ici, nous avons spécifiquement affiché l'ID de processus du processus qui a la chaîne « terminal » dans le nom du processus. Cette méthode est pratique lorsque vous ne connaissez pas le nom complet du processus ou le PID.

Affichage des fichiers ouverts liés à un processus à l'aide du PID

Dans le bloc ci-dessus, nous avons appris comment obtenir les informations relatives au processus à l'aide de la commande top. Nous allons maintenant utiliser le PID correspondant à n'importe quel processus sur le système et essayez d'afficher la liste des fichiers ouverts liés à ce processus en utilisant le lsof commander.

A partir de la sortie ci-dessus, prenons le processus correspondant au PID 1173 qui est mis en évidence. Nous utiliserons le lsof -p [PID] commande de le faire.

Syntaxe:

sudo lsof -p [PID]

Cette commande prend le PID du processus en entrée et liste tous les fichiers correspondant à ce PID.

Sortir:

gaurav@ubuntu:~$ sudo lsof -p 1173 lsof : AVERTISSEMENT : impossible de stat() fuse.gvfsd-fuse système de fichiers /run/user/1000/gvfs Les informations de sortie peuvent être incomplètes. COMMANDE PID UTILISATEUR TYPE FD DEVICE SIZE/OFF NOM DE NOEUD mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 mongodb txt REG 8,8 38379496 2885608 /usr/bin/mongod 1173 mongodb mem REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8,8 101168 2624643 /lib/x86_64-linux-gnu/libresolv-2.27.so mongod 1173 mongodb mem REG 8,8 26936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 mongodm 1173 mongodb me 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mongod 1173 mongodb mem REG 8,8 3004224 2909671 /usr/lib/locale/locale-archive mongod 1173 mongodb mem REG 8,8 2030544 2621501 / lib/x86_64-linux-gnu/libc-2.27.so mongod 1173 mongodb mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 1173 mongodb mem REG 8,8 96616 2624649 /lib/ x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb moi m REG 8,8 1700792 2622735 /lib/x86_64-linux-gnu/libm-2.27.so mongod 1173 mongodb mem REG 8,8 14560 2621535 /lib/x86_64-linux-gnu/libdl-2.27.so mongod 1173 mongodb mem REG 8,8 31680 2624646 /lib/x86_64-linux-gnu/librt-2.27.so mongod 1173 mongodb mem REG 8,8 2357760 2890079 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 gaurav@ubuntu :~$

Les fichiers ouverts pour le processus avec l'ID de processus 1713 sont affichés à l'aide de la lsof commander.

Noter: Les utilisateurs de GNOME peuvent rencontrer l'avertissement ci-dessous. Vous pouvez l'ignorer en toute sécurité.

lsof : AVERTISSEMENT : impossible de stat() fuse.gvfsd-fuse système de fichiers /run/user/1000/gvfs Les informations de sortie peuvent être incomplètes.

Liste des fichiers ouverts liés à un processus à l'aide du nom du processus

le lsof La commande vous offre également une option pour répertorier les fichiers ouverts en utilisant les noms des processus. Les noms doivent être fournis à la commande sous forme de chaîne d'entrée. Voir la syntaxe ci-dessous pour utiliser cette option.

Syntaxe:

sudo lsof -c [Nom du processus]

Exemple:

sudo lsof -c mysql

Sortir:

gaurav@ubuntu:~$ sudo lsof -c mysql lsof: AVERTISSEMENT : impossible de stat() fuse.gvfsd-fuse système de fichiers /run/user/1000/gvfs Les informations de sortie peuvent être incomplètes. COMMANDE PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 4096 2 / mysqld 1266 mysql txt REG 8,8 24691368 2889411 /usr /sbin/mysqld mysqld 1266 mysql mem REG 8,8 6288 5505444 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0,18 28127 /[aio] mysqld 1266 mysql DEL REG 0,18 28126 /[ aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mysqld 1266 mysql mem REG 8,8 47576 2624592 / lib/x86_64-linux-gnu/libnss_nis-2.27.so mysqld 1266 mysql mem REG 8,8 39744 2624438 /lib/x86_64-linux-gnu/libnss_compat-2.27.so 

La sortie sera celle de celle dans laquelle l'ID de processus est utilisé au lieu du nom de processus.

Liste des fichiers ouverts par les connexions réseau

Sous Linux, les fichiers peuvent également se présenter sous la forme d'informations sur vos connexions réseau, connexions matérielles, etc. Nous pouvons utiliser lsof pour lister les fichiers ouverts par la connexion réseau. Utilisez la méthode suivante.

sudo lsof -i

Sortir:

gaurav@ubuntu:~$ sudo lsof -i COMMANDE PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-resolve 13u IPv4 17358 0t0 TCP localhost : domaine (ÉCOUTEZ) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *:mdns avahi-dae 1028 avahi 13u IPv6 23811 0t0 UDP *:mdns avahi-dae 1028 avahi 13u IPv6 23811 0t0 UDP *:mdns avahi-dae 1028 avahi 14u IPv4 23812 0t0 UDP *:58999 avahi-dae 1028 avahi 15u IPv6 23813 0t0 UDP *:37512 mongod 1173 mongodb 6u IPv4 28149 0t0 TCP localhost:27017 (ÉCOUTEZ) mysqld 1266 mysql 19u04 TCP localhost : mysql (ÉCOUTEZ) apache2 1283 racine 4u IPv6 28140 0t0 TCP *:http (ÉCOUTEZ) gaurav@ubuntu:~$

Ici, nous pouvons voir les informations sur les fichiers qui sont ouverts par la connexion réseau en utilisant le lsof -i commander.

Conclusion

Dans ce didacticiel simple, nous avons appris à répertorier les fichiers ouverts pour un processus sous Linux à l'aide de diverses méthodes faciles à utiliser. Pour plus d'utilisations du lsof commande, voir le lsof page de manuel.