Parfois, nous sommes confrontés à des situations où nous ne pouvons pas démonter un disque car il indique que les fichiers sont utilisés, mais nous ne pouvons pas comprendre à quel fichier il fait référence. Dans de telles situations, nous pouvons vérifier quels fichiers sont ouverts par quel processus est en cours d'exécution sur le système.
Cela peut être fait en utilisant la commande lsof, qui signifie List Open Files. Étant donné que Linux considère tout, y compris les répertoires, les périphériques, les sockets, etc. comme des fichiers, nous pouvons utiliser lsof pour identifier facilement tous les fichiers ouverts.
Si nous lançons juste lsof, il listera tous les fichiers ouverts qui appartiennent à n'importe quel processus actif sur le système. Si la sortie est longue, nous pouvons utiliser la commande less pour faire défiler la sortie :
# lsof | less
La sortie affichée comporte des colonnes telles que Commande, PID, Utilisateur, FD, Type, Périphérique, etc., pour une meilleure compréhension des fichiers. La colonne FD contient des informations sur la description du fichier, telles que le répertoire de travail actuel (CWD), le répertoire racine (RTD), le texte du programme (TXT), etc. Si la colonne FD contient des informations telles que 0u, 1u, etc., le nombre signifie le descripteur de fichier réel et l'alphabet signifie les différents modes (accès en lecture, accès en écriture et accès en lecture/écriture).
si vous rencontrez l'erreur ci-dessous lors de l'exécution de la commande lsof :
lsof: command not found
ypu peut installer le package ci-dessous selon votre choix de distribution.
Répartition | Commande |
---|---|
OS X | brew install lsof |
Debian | apt-get install lsof |
Ubuntu | apt-get install lsof |
Alpin | apk ajouter lsof |
Arch Linux | pacman -S lsof |
Kali Linux | apt-get install lsof |
CentOS | yum installer lsof |
Fédora | dnf installer lsof |
Raspbian | apt-get install lsof |
Options lsof fréquemment utilisées
- -c x :affiche uniquement les fichiers ouverts par les processus dont l'exécutable commence par le(s) caractère(s) spécifié(s) par x.
- -i x :Au lieu d'afficher les fichiers ouverts, affiche les sockets dont l'adresse Internet est x. Si x n'est pas spécifié, affiche toutes les connexions IP. Ceci est fonctionnellement équivalent à netstat –anp.
- -u nom d'utilisateur :Afficher uniquement les fichiers que le nom d'utilisateur a ouverts.
- -P :Ne convertissez pas les numéros de port en noms de port (par exemple, affichez 25 au lieu de smtp).
Exemples de commandes lsof
Le simple fait d'exécuter les commandes lsof nous donne une liste de tous les fichiers ouverts sur le système. En utilisant l'option -u et en spécifiant le nom d'utilisateur, nous obtenons une liste des fichiers ouverts pour un utilisateur particulier. Lorsque nous utilisons l'option -i et spécifions un numéro de port, nous obtenons des informations sur tout processus en cours d'exécution sur ce port. Lorsque nous utilisons à la fois les options -i et -u avec un nom d'utilisateur particulier, nous obtenons des informations sur les fichiers et les commandes auxquels cet utilisateur accède.
1. Trouvez les processus qui ont un fichier donné ouvert :
# lsof path/to/file
2. Recherchez le processus qui a ouvert un port Internet local :
# lsof -i :port
3. N'affichez que l'ID de processus (PID) :
# lsof -t path/to/file
4. Lister les fichiers ouverts par l'utilisateur donné :
# lsof -u username
5. Listez les fichiers ouverts par la commande ou le processus donné :
# lsof -c process_or_command_name
6. Lister les fichiers ouverts par un processus spécifique, en fonction de son PID :
# lsof -p PID
7. Lister les fichiers ouverts dans un répertoire :
# lsof +D path/to/directory
8. Trouvez le processus qui écoute sur un port TCP IPv6 local et ne convertissez pas les numéros de réseau ou de port :
# lsof -i6TCP:port -sTCP:LISTEN -n -P
9. Répertoriez les processus dont votre répertoire personnel est ouvert :
# lsof ~
10. Listez tous les fichiers ouverts dans votre répertoire personnel :
# lsof +D
11. Lister les fichiers ouverts par les processus dont le nom commence par « i » et dont le propriétaire est « geek » :
# lsof -a -c i -u geek
12. Listez les fichiers en utilisant le port TCP 80, en répétant toutes les deux secondes jusqu'à ce que lsof soit terminé :
Derniers mots
lsof répertorie les fichiers ouverts. Étant donné que tout sous Linux est un fichier, cet outil peut vous fournir une quantité fantastique d'informations sur votre système en cours d'exécution. Il est principalement utilisé pour indiquer quels processus ont quels fichiers ouverts, mais il peut également être utilisé pour afficher les informations de connexion TCP et UDP, entre autres.