GNU/Linux >> Tutoriels Linux >  >> Linux

lsof :Exemples les plus couramment utilisés

La commande lsof répertorie les fichiers ouverts, les sockets et les canaux. Vous pouvez utiliser la commande lsof pour voir quels fichiers sont maintenus ouverts (tels que des bibliothèques ou des fichiers journaux) et quels ports les démons écoutent. Vous pouvez rechercher des fichiers ouverts à l'aide de la commande lsof. lsof doit être exécuté en tant que superutilisateur (root) pour voir tous les fichiers ouverts. Lorsqu'il est utilisé sans arguments/options, lsof répertorie tous les fichiers ouverts pour les processus actifs en cours.

# lsof
COMMAND     PID   USER   FD      TYPE             DEVICE    SIZE/OFF       NODE NAME
init          1   root  cwd       DIR              253,0        4096          2 /
init          1   root  rtd       DIR              253,0        4096          2 /
init          1   root  txt       REG              253,0      150352    4587561 /sbin/init (deleted)
init          1   root  DEL       REG              253,0                4849693 /lib64/libnss_files-2.12.so
..........

Comprendre la sortie de la commande "lsof" :

COMMAND: Command using the file.
PID: PID of the file
USER: Owner of the file
FD: File descriptor. Different flags of File descriptor are as below:

#    :  The number in front of flag(s) is the file descriptor number used by the process to associate with the file
u    :  File open with Read and Write permission
r    :  File open with Read permission
w    :  File open with Write permission
W    :  File open with Write permission and with Write Lock on entire file
mem  :   Memory mapped file, usually for shared library

TYPE: File type. Different flags of File type are as below:
REG - Regular file
DIR - Directory

DEVICE: major, minor number of the device where file resides.
SIZE/OFF: File size
NODE: inode number
NAME: File name

Rechercher des fichiers ouverts sous un point de montage

Les fichiers ouverts dans un répertoire particulier peuvent être trouvés en utilisant lsof. Par exemple, ouvrez un fichier texte (ne le fermez pas - gardez-le ouvert) sous un répertoire pour le modifier à l'aide de vi et vérifiez la sortie lsof sous ce répertoire dans une autre session.

# cd /test
# vi a.txt

Dans une autre session, vérifiez la sortie de lsof sous ce répertoire :

# lsof /test
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    2972 root  cwd    DIR  253,0     4096 262145 /test
vi      3012 root  cwd    DIR  253,0     4096 262145 /test

Cela peut également être utilisé pour démonter le point de montage occupé. Les processus qui maintiennent le point de montage occupé peuvent être trouvés en utilisant lsof.

Rechercher des informations sur un processus particulier

Pour plus d'informations sur un processus particulier, utilisez l'option -p pour lsof :

# lsof -p 8797

Afficher les adresses d'écoute

Les démons peuvent soit se lier à l'adresse IPv4 globale 0.0.0.0, soit à des adresses spécifiques, telles que 127.0.0.1 (localhost). Un démon lié à l'adresse localhost ne sera accessible qu'à partir du système lui-même. Utilisez les options -i et -nP pour lsof pour afficher les ports d'écoute sans rechercher les noms d'hôte et les services. Par exemple, l'exemple suivant montre le démon Apache httpd s'exécutant sur localhost sur le port non standard 7777. Les autres systèmes ne pourront pas se connecter à ces processus httpd :bon pour la sécurité, mauvais pour la connectivité à distance.

Exemple :

# lsof -i -nP | grep httpd
httpd 8616 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)
httpd 8614 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)
httpd 8623 apache 16u IPv4 0x0455567fh 0t0 TCP 127.0.0.1:7777 (LISTEN)

Exemple :
En revanche, le processus sshd OpenSSH suivant acceptera les connexions d'autres systèmes, car il est lié à l'adresse 0.0.0.0, comme indiqué par le * précédant le numéro de port.

# lsof -i -P | grep sshd
sshd 4341 root 3u IPv4 46438 TCP *:22 (LISTEN)

Certaines applications écoutent sur de nombreux ports différents, comme le démon nommé BIND (Berkeley Internet Name Daemon), version 9.

Exemple :

# lsof -i -nP | grep ^named
named 9865 named 5u IPv6 0x03348be0 0t0 UDP *:53
named 9865 named 6u IPv6 0x0566re80 0t0 TCP *:53 (LISTEN)
named 9865 named 7u IPv4 0x03456b10 0t0 UDP 127.0.0.1:53
named 9865 named 8u IPv4 0x01870570 0t0 TCP 127.0.0.1:53 (LISTEN)
named 9865 named 9u IPv4 0x03456a40 0t0 UDP *:49164
named 9865 named 10u IPv6 0x03456970 0t0 UDP *:49165
named 8888 named 11u IPv4 0x0186fd54 0t0 TCP *:953 (LISTEN)
named 8888 named 13u IPv4 0x01387ee0 0t0 UDP 168.1.863.1:67
named 8888 named 14u IPv4 0x099899ce4 0t0 TCP 168.1.863.1:67(LISTEN)

Rechercher les fichiers ouverts par un processus

Un processus peut ne pas fonctionner pour d'autres raisons, telles qu'un pare-feu, un contrôle de service d'accès comme tcp_wrappers ou une autre mauvaise configuration. Utilisez ping, telnet ou nmap pour vérifier à partir d'un système distant si quelque chose d'autre peut bloquer la requête, ou exécutez tcpdump pour voir si les connexions quittent la source ou arrivent au système cible.

Exemple
Pour voir quels fichiers sont ouverts par les processus dont le nom commence par "t" (telnetd...) et bash. Et pour voir quels fichiers sont ouverts par init utilisez les commandes suivantes :

# lsof -c t
# lsof -c bash
# lsof -c init

Exemple
Pour voir quels fichiers sont ouverts par les processus dont le nom commence par "testuser", mais exclure ceux dont le propriétaire est l'utilisateur "tom", utilisez la commande suivante :

# lsof -c testuser -u ^tom

Rechercher les processus ouverts par les utilisateurs

Pour voir quels processus sont ouverts par les utilisateurs myuser et tom, utilisez la commande suivante :

# lsof -u myuser,tom

Rechercher le port utilisé par le processus

Pour voir quels processus utilisent un port particulier, utilisez la commande suivante :

# lsof -i TCP:389

Comment trouver le nombre de fichiers ouverts pour un nom de processus et un pid de processus triés par nombre de fichiers ouverts ?

Cela peut être intéressant lorsque l'erreur "trop ​​de fichiers ouverts" apparaît. Utilisez le script ci-dessous qui utilise la commande lsof :

# lsof | perl -lane '$x{"$F[0]:$F[1]"}++;END { print "$x{$_}\t$_" for sort {$x{$a}<=>$x{$b}} keys %x}'

Rechercher des processus à l'aide de descripteurs de fichiers max

Les limites des descripteurs de fichiers peuvent être définies à l'aide de la commande suivante pour un shell :

# ulimit -n 65536

Utilisez la commande "lsof" pour trouver ce qui utilise les descripteurs de fichiers sur le système.

# lsof -g | awk '{print $2}' | sort -u > /tmp/lsof_sort.txt
# for var in `cat /tmp/lsof_sort.txt` 
do 
	echo `echo "$var ---- "``grep -x $var /tmp/lsof.txt | wc -l` 
done

Cela listera tous les processus et le nombre correspondant de fichiers ouverts par eux. Vous pouvez choisir les processus qui ont le plus grand nombre de fichiers ouverts et voir quels sont-ils.


Linux
  1. [Linux] :15 commandes YUM les plus fréquemment utilisées avec des exemples

  2. Commande mv sous Linux :7 exemples essentiels

  3. 7 Exemples de commande lsof sous Linux

  4. Exemples de commandes Linux tail

  5. ln Exemples de commandes sous Linux

Commande Linux WC avec exemples

35 exemples de scripts bash

Exemples de commande Linux cat

Exemples de commande Linux gzip

Exemples de commandes dumpe2fs sous Linux

Exemples de commandes fsck sous Linux