GNU/Linux >> Tutoriels Linux >  >> Linux

15 exemples de commande Linux lsof (identifier les fichiers ouverts)

lsof signifie List Open Files.

Il est facile de se souvenir de la commande lsof si vous la considérez comme "ls + of", où ls représente la liste et of représente les fichiers ouverts.

Il s'agit d'un utilitaire de ligne de commande utilisé pour répertorier les informations sur les fichiers ouverts par divers processus. Sous Unix, tout est un fichier (tubes, sockets, répertoires, périphériques, etc.). Ainsi, en utilisant lsof, vous pouvez obtenir des informations sur tous les fichiers ouverts.

1. Présentation de lsof

Taper simplement lsof fournira une liste de tous les fichiers ouverts appartenant à tous les processus actifs.

# lsof

COMMAND  PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init       1       root  cwd       DIR        8,1      4096          2 /
init       1       root  txt       REG        8,1    124704     917562 /sbin/init
init       1       root    0u      CHR        1,3       0t0       4369 /dev/null
init       1       root    1u      CHR        1,3       0t0       4369 /dev/null
init       1       root    2u      CHR        1,3       0t0       4369 /dev/null
init       1       root    3r     FIFO        0,8       0t0       6323 pipe
...

Par défaut Un fichier par ligne est affiché. La plupart des colonnes sont explicites. Nous expliquerons les détails de quelques colonnes cryptées (FD et TYPE).

FD – Représente le descripteur de fichier. Certaines des valeurs des FD sont,

  • cwd – Répertoire de travail actuel
  • txt - Fichier texte
  • mem ​​- Fichier mappé en mémoire
  • mmap – Périphérique mappé en mémoire
  • NUMBER – Représente le descripteur de fichier réel. Le caractère après le nombre, c'est-à-dire '1u', représente le mode dans lequel le fichier est ouvert. r pour lire, w pour écrire, u pour lire et écrire.

TYPE – Spécifie le type du fichier. Certaines des valeurs de TYPE sont,

  • REG – Fichier normal
  • DIR – Répertoire
  • FIFO – Premier entré, premier sorti
  • CHR - Fichier spécial caractère

Pour une liste complète de FD &TYPE, reportez-vous à man lsof.

2. Lister les processus qui ont ouvert un fichier spécifique

Vous pouvez lister uniquement les processus qui ont ouvert un fichier spécifique, en fournissant le nom du fichier comme arguments.

# lsof /var/log/syslog

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd 488 syslog    1w   REG    8,1     1151 268940 /var/log/syslog

3. Lister les fichiers ouverts sous un répertoire

Vous pouvez lister les processus qui ont ouvert des fichiers sous un répertoire spécifié en utilisant l'option '+D'. +D récursera également les sous-répertoires. Si vous ne voulez pas que lsof se reproduise, utilisez l'option '+d'.

# lsof +D /var/log/

COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd  488 syslog   1w   REG    8,1     1151 268940 /var/log/syslog
rsyslogd  488 syslog   2w   REG    8,1     2405 269616 /var/log/auth.log
console-k 144   root   9w   REG    8,1    10871 269369 /var/log/ConsoleKit/history

4. Répertorier les fichiers ouverts en fonction des noms de processus commençant par

Vous pouvez lister les fichiers ouverts par des noms de processus commençant par une chaîne, en utilisant l'option '-c'. -c suivi du nom du processus listera les fichiers ouverts par le processus en commençant par ce nom de processus. Vous pouvez donner plusieurs commutateurs -c sur une seule ligne de commande.

# lsof -c ssh -c init

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init         1       root  txt    REG        8,1   124704  917562 /sbin/init
init         1       root  mem    REG        8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
init         1       root  mem    REG        8,1    30684 1442694 /lib/i386-linux-gnu/librt-2.13.so
...
ssh-agent 1528 lakshmanan    1u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    2u   CHR        1,3      0t0    4369 /dev/null
ssh-agent 1528 lakshmanan    3u  unix 0xdf70e240      0t0   10464 /tmp/ssh-sUymKXxw1495/agent.1495

5. Répertorier les processus à l'aide d'un point de montage

Parfois, lorsque nous essayons de démonter un répertoire, le système indique l'erreur "Périphérique ou ressource occupée". Nous devons donc découvrir quels sont tous les processus utilisant le point de montage et tuer ces processus pour démonter le répertoire. En utilisant lsof, nous pouvons trouver ces processus.

# lsof /home

Ce qui suit fonctionnera également.

# lsof +D /home/

6. Lister les fichiers ouverts par un utilisateur spécifique

Pour trouver la liste des fichiers ouverts par un utilisateur spécifique, utilisez l'option "-u".

# lsof -u lakshmanan

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
update-no 1892 lakshmanan   20r  FIFO        0,8      0t0      14536 pipe
update-no 1892 lakshmanan   21w  FIFO        0,8      0t0      14536 pipe
bash      1995 lakshmanan  cwd    DIR        8,1     4096     393218 /home/lakshmanan

Parfois, vous voudrez peut-être répertorier les fichiers ouverts par tous les utilisateurs, attendez-vous à 1 ou 2. Dans ce cas, vous pouvez utiliser le '^' pour exclure uniquement l'utilisateur particulier comme suit

# lsof -u ^lakshmanan

COMMAND    PID       USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
rtkit-dae 1380      rtkit    7u     0000        0,9         0       4360 anon_inode
udisks-da 1584       root  cwd       DIR        8,1      4096          2 /

La commande ci-dessus répertorie tous les fichiers ouverts par tous les utilisateurs, attendez-vous à l'utilisateur "lakshmanan".

7. Lister tous les fichiers ouverts par un processus spécifique

Vous pouvez lister tous les fichiers ouverts par un processus spécifique en utilisant l'option '-p'. Il sera parfois utile d'obtenir plus d'informations sur un processus spécifique.

# lsof -p 1753

COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
bash    1753 lakshmanan  cwd    DIR    8,1     4096  393571 /home/lakshmanan/test.txt
bash    1753 lakshmanan  rtd    DIR    8,1     4096       2 /
bash    1753 lakshmanan  255u   CHR  136,0      0t0       3 /dev/pts/0
...

8. Tue tous les processus appartenant à un utilisateur particulier

Lorsque vous souhaitez tuer tous les processus dont les fichiers sont ouverts par un utilisateur spécifique, vous pouvez utiliser l'option '-t' pour répertorier uniquement l'ID de processus du processus et le transmettre à kill comme suit

# kill -9 `lsof -t -u lakshmanan`

La commande ci-dessus tuera tous les processus appartenant à l'utilisateur 'lakshmanan', qui a ouvert des fichiers.

De même, vous pouvez également utiliser '-t' de plusieurs façons. Par exemple, pour lister l'ID de processus d'un processus qui a ouvert /var/log/syslog peut être fait par

# lsof -t /var/log/syslog

489

En parlant de tuer, saviez-vous qu'il existe 4 façons de tuer un processus ?

9. Combinez plus d'options de liste en utilisant OR/AND

Par défaut, lorsque vous utilisez plus d'une option de liste dans lsof, elles seront ORed. Par exemple,

# lsof -u lakshmanan -c init

COMMAND    PID       USER   FD   TYPE     DEVICE SIZE/OFF       NODE NAME
init         1       root  cwd    DIR        8,1     4096          2 /
init         1       root  txt    REG        8,1   124704     917562 /sbin/init
bash      1995 lakshmanan    2u   CHR      136,2      0t0          5 /dev/pts/2
bash      1995 lakshmanan  255u   CHR      136,2      0t0          5 /dev/pts/2
...

La commande ci-dessus utilise deux options de liste, "-u" et "-c". Ainsi, la commande listera le processus appartenant à l'utilisateur "lakshmanan" ainsi que le nom du processus commençant par "init".

Mais lorsque vous souhaitez répertorier un processus appartenant à l'utilisateur "lakshmanan" et que le nom du processus commence par "init", vous pouvez utiliser l'option "-a".

# lsof -u lakshmanan -c init -a

La commande ci-dessus ne produira rien, car il n'y a pas de processus nommé "init" appartenant à l'utilisateur "lakshmanan".

10. Exécuter lsof en mode répétition

lsof prend également en charge le mode Répétition. Il listera d'abord les fichiers en fonction des paramètres donnés, et retardera les secondes spécifiées, puis répertoriera à nouveau les fichiers en fonction des paramètres donnés. Il peut être interrompu par un signal.

Le mode de répétition peut être activé en utilisant '-r' ou '+r'. Si "+r" est utilisé, le mode de répétition se terminera lorsqu'aucun fichier ouvert n'est trouvé. '-r' continuera à lister, retarder, lister jusqu'à ce qu'une interruption soit donnée, que les fichiers soient ouverts ou non.

Chaque sortie de cycle sera séparée en utilisant '======='. Vous spécifiez également le délai comme '-r' | ‘+r’.

# lsof -u lakshmanan -c init -a -r5

=======
=======
COMMAND   PID       USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
inita.sh 2971 lakshmanan  cwd    DIR    8,1     4096  393218 /home/lakshmanan
inita.sh 2971 lakshmanan  rtd    DIR    8,1     4096       2 /
inita.sh 2971 lakshmanan  txt    REG    8,1    83848  524315 /bin/dash
inita.sh 2971 lakshmanan  mem    REG    8,1  1434180 1442625 /lib/i386-linux-gnu/libc-2.13.so
inita.sh 2971 lakshmanan  mem    REG    8,1   117960 1442612 /lib/i386-linux-gnu/ld-2.13.so
inita.sh 2971 lakshmanan    0u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    1u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan    2u   CHR  136,4      0t0       7 /dev/pts/4
inita.sh 2971 lakshmanan   10r   REG    8,1       20  393578 /home/lakshmanan/inita.sh
=======

Dans la sortie ci-dessus, pendant les 5 premières secondes, il n'y a pas de sortie. Après cela, un script nommé "inita.sh" est lancé et répertorie la sortie.

Trouver une connexion réseau

Les connexions réseau sont également des fichiers. Nous pouvons donc trouver des informations à leur sujet en utilisant lsof.

11. Lister toutes les connexions réseau

Vous pouvez lister toutes les connexions réseau ouvertes en utilisant l'option "-i".

# lsof -i

COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
avahi-dae  515 avahi   13u  IPv4   6848      0t0  UDP *:mdns
avahi-dae  515 avahi   16u  IPv6   6851      0t0  UDP *:52060
cupsd     1075  root    5u  IPv6  22512      0t0  TCP ip6-localhost:ipp (LISTEN)

Vous pouvez également utiliser '-i4' ou '-i6' pour ne lister que 'IPV4' ou 'IPV6' respectivement.

12. Répertorier tous les fichiers réseau utilisés par un processus spécifique

Vous pouvez répertorier tous les fichiers réseau utilisés par un processus comme suit

# lsof -i -a -p 234

Vous pouvez également utiliser les éléments suivants

# lsof -i -a -c ssh

La commande ci-dessus listera les fichiers réseau ouverts par les processus commençant par ssh.

13. Lister les processus qui écoutent sur un port particulier

Vous pouvez lister les processus qui écoutent sur un port particulier en utilisant '-i' avec ':' comme suit

# lsof -i :25

COMMAND  PID        USER   FD   TYPE DEVICE SIZE NODE NAME
exim4   2541 Debian-exim    3u  IPv4   8677       TCP localhost:smtp (LISTEN)

14. Lister toutes les connexions TCP ou UDP

Vous pouvez lister toutes les connexions TCP ou UDP en spécifiant le protocole à l'aide de '-i'.

# lsof -i tcp; lsof -i udp;

15. Répertorier tous les fichiers du système de fichiers réseau ( NFS )

Vous pouvez lister tous les fichiers NFS en utilisant l'option '-N'. La commande lsof suivante listera tous les fichiers NFS utilisés par l'utilisateur "lakshmanan".

# lsof -N -u lakshmanan -a

Linux
  1. 7 Exemples de commande lsof sous Linux

  2. Exemples pratiques de la commande rsync sous Linux

  3. 7 Exemples de commandes Linux df

  4. Exemples de commandes sa sous Linux

  5. diff Exemples de commandes sous Linux

Commande SS sous Linux avec des exemples utiles

La commande Linux lsof expliquée avec 12 exemples pratiques

Exemples de commandes id sous Linux

Exemples de commandes lsattr sous Linux

Commande lsof sous Linux avec exemples

Commande comm Linux avec exemples