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
/proc
oùlsof
trouver des informations sur la procédure. - FD: Affiche le descripteur de fichier du fichier. Les descripteurs de fichiers sont décrits ci-dessous.
- Écrit: 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
(Oui) option. Cela signifie que les seuls fichiers à lister seront ceux qui correspondent au premier terme de recherche, Oui le deuxième terme de recherche, et ainsi de suite.
Essayons à nouveau et utilisons le -a
option.
sudo lsof -u mary -c ssh -a
À présent, 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);