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
/proc
oùlsof
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.
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.
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.