Commande Fuser sous Linux : Un guide pour débutants avec des exemples
La commande fuser sous Linux est un utilitaire en ligne de commande utilisé pour identifier les processus qui utilisent actuellement un fichier, un répertoire, un socket ou des systèmes de fichiers. Le terme "fuser" est une abréviation de "file user" (utilisateur de fichier).
Il fournit des informations détaillées sur les processus, y compris l'utilisateur possédant le processus, l'ID du processus, le type d'accès et la commande utilisée.
La commande fuser est utilisée pour déterminer quels processus accèdent à une ressource particulière, ce qui peut être utile dans divers scénarios tels que :
- Identifier les processus utilisant un fichier : Vous pouvez utiliser
fuserpour savoir quels processus utilisent actuellement un fichier ou un répertoire spécifique. Cela peut être utile lorsque vous devez démonter un système de fichiers ou supprimer un fichier en cours d'utilisation. - Identifier les processus utilisant une socket réseau :
fuserpeut également être utilisé pour identifier les processus qui utilisent une socket réseau, ce qui peut être utile pour résoudre des problèmes liés au réseau. - Terminer les processus utilisant un fichier ou une socket : Une fois que vous avez identifié les processus utilisant un fichier ou une socket, vous pouvez utiliser l'option
-kpour terminer ces processus.
Il est particulièrement utile pour résoudre les problèmes liés au verrouillage de fichiers, à la gestion des processus et aux ressources système.
Syntaxe de la commande fuser
La syntaxe de base de la commande fuser est :
fuser [options] file|directory|socketOptions
Quelques options courantes utilisées avec fuser incluent :
-vou--verbose: Fournit une sortie détaillée, incluant l'utilisateur, l'ID du processus, le type d'accès et la commande.-aou--all: Affiche tous les fichiers spécifiés sur la ligne de commande.-kou--kill: Tue les processus accédant au fichier ou au socket spécifié.-iou--interactive: Demande une confirmation avant de tuer un processus.-lou--list-signals: Liste tous les noms de signaux disponibles.-mou--mount: Affiche tous les processus accédant à un système de fichiers ou à un périphérique de blocs.-nou--namespace: Recherche dans un espace de noms spécifique (fichier, UDP ou TCP).-uou--user: Ajouter le nom de l'utilisateur du propriétaire du processus à chaque PID.-c: Affiche le nom de la commande pour chaque processus.-4ou--ipv4: Rechercher uniquement les sockets IPv4.-6ou--ipv6: Rechercher uniquement les sockets IPv6.
Exemples de la commande fuser de Linux
1. Lister les processus accédant à un fichier
Pour trouver les processus accédant à un fichier spécifique, utilisez :
fuser -v /path/to/filePar exemple, pour trouver les processus utilisant le fichier /usr/bin/firefox-esr, vous pouvez utiliser la commande suivante :
fuser --verbose /usr/bin/firefox-esrCela affichera les identifiants de processus (PID) des processus qui utilisent actuellement le fichier /usr/bin/firefox-esr.
Exemple de sortie :
USER PID ACCESS COMMAND
/usr/lib/firefox-esr/firefox-esr:
ostechnix 6900 ...e. firefox-esr
ostechnix 6966 ...e. Socket Process
ostechnix 6984 ...e. Privileged Cont
ostechnix 7042 ...e. WebExtensions
ostechnix 7101 ...e. Isolated Web Co
ostechnix 7735 ...e. Isolated Web Co
ostechnix 8250 ...e. Isolated Web Co
ostechnix 8300 ...e. Isolated Web Co
ostechnix 8961 ...e. Isolated Web Co
ostechnix 41601 ...e. Isolated Web Co
ostechnix 41791 ...e. Isolated Web Co
ostechnix 45880 ...e. Isolated Web Co
ostechnix 46217 ...e. Isolated Web Co
ostechnix 46287 ...e. Isolated Web Co
ostechnix 46437 ...e. Isolated Web Co
ostechnix 47038 ...e. Isolated Web Co
ostechnix 47042 ...e. Isolated Web Co
ostechnix 47095 ...e. Isolated Web Co
ostechnix 47160 ...e. Isolated Web Co
ostechnix 47231 ...e. Isolated Web Co
ostechnix 47234 ...e. Isolated Web Co
ostechnix 47577 ...e. Isolated Web Co
ostechnix 47762 ...e. Isolated Web Co
ostechnix 47969 ...e. Isolated Web Co
ostechnix 48537 ...e. RDD Process
ostechnix 48539 ...e. Utility Process
ostechnix 49786 ...e. Web Content
ostechnix 52459 ...e. Web Content
ostechnix 52521 ...e. Web ContentVoici ce que chaque colonne dans le résultat signifie :
USER: Cette colonne affiche le nom d'utilisateur de l'utilisateur exécutant le processus.PID: Cette colonne montre l'ID du processus (PID) du processus.ACCÈS: Cette colonne indique le type d'accès que le processus a au fichier. Les lettres dans cette colonne représentent ce qui suit :c: Le processus utilise le fichier ou le répertoire comme répertoire de travail actuel.
e: Le processus a exécuté le fichier (généralement un binaire exécutable).f: Le processus a ouvert le fichier en lecture (cela est omis dans le mode d'affichage par défaut).F: Le processus a ouvert le fichier pour écriture (cela est omis dans le mode d'affichage par défaut).r: Le processus utilise le répertoire comme son répertoire racine.m: Le processus a mappé le fichier ou la bibliothèque partagée en mémoire en utilisant mmap..: Ceci est un espace réservé et est omis dans le mode d'affichage par défaut.
COMMAND : Cette colonne affiche le nom de la commande ou du processus qui accède au fichier.Dans la sortie ci-dessus, vous pouvez voir qu'il y a plusieurs processus associés au fichier /usr/bin/firefox-esr.
Ces processus font partie du navigateur Firefox ESR et gèrent différentes tâches, telles que le processus principal du navigateur, le processus de socket, les processus de contenu et divers autres processus d'assistance.
Par exemple, le processus avec le PID 6900 est le processus principal du navigateur Firefox ESR, et il a le fichier ouvert pour l'exécution (...e.). Les processus avec les PID 49786, 52459 et 52521 sont probablement des processus de contenu Web utilisés pour afficher les pages Web dans des processus séparés pour une meilleure sécurité et stabilité.
2. Trouver les processus accédant à un répertoire
Pour trouver les processus accédant au répertoire actuel, vous pouvez utiliser la commande suivante :
fuser -v .Cela affichera les identifiants de processus, les utilisateurs, les types d'accès et les commandes pour tous les processus accédant au répertoire actuel. Par exemple :
USER PID ACCESS COMMAND
/home/ostechnix: ostechnix 1729 ..c.. pipewire
ostechnix 1733 ..c.. dbus-daemon
ostechnix 1734 ..c.. pipewire-media-
ostechnix 1740 ..c.. cinnamon-sessio
ostechnix 1785 ..c.. gvfsd
ostechnix 1797 ..c.. at-spi-bus-laun
ostechnix 1803 ..c.. dbus-daemon
ostechnix 1807 ..c.. at-spi2-registr
ostechnix 1818 ..c.. csd-background
ostechnix 1819 ..c.. csd-xrandr
[...]Dans ce cas, les processus avec les ID 1729, 1733, 1734 parmi beaucoup d'autres accèdent au répertoire /home/ostechnix en utilisant diverses commandes.
3. Trouver les processus accédant à un système de fichiers
Pour trouver les processus accédant à un système de fichiers, utilisez :
fuser -v -m /path/to/mountpointPar exemple, pour vérifier quels processus accèdent au système de fichiers monté à /boot/efi/, vous exécuteriez :
fuser -v -m /boot/efi/Exemple de sortie :
USER PID ACCESS COMMAND
/boot/efi: root kernel mount /boot/efiVoici la répartition de la sortie ci-dessus :
USER: Cette colonne affiche le nom d'utilisateur du processus accédant au système de fichiers. Dans ce cas, c'estroot.PID: Cette colonne affiche l'ID de processus (PID) du processus. Cependant, au lieu d'un PID numérique, elle affichekernelcar le noyau lui-même gère le montage du système de fichiers.ACCESS: Cette colonne indique le type d'accès que le processus a à la ressource. Dans ce cas, elle montremount, ce qui signifie que le noyau a monté le système de fichiers contenant/boot/efi.COMMAND: Cette colonne affiche le nom de la commande ou du processus. Elle montre/boot/efi, qui est le chemin spécifié dans la commandefuser.
4. Tuer les processus utilisant un fichier ou une socket
Pour tuer les processus accédant à un fichier ou un socket, utilisez :
sudo fuser -k /path/to/file (or) socketPar exemple, la commande suivante tuera tous les processus qui utilisent le port 8006 :
fuser -k 8006/tcpN'oubliez pas de faire preuve de prudence lors de l'utilisation de l'option -k, car elle peut terminer les processus de manière abrupte. Vérifiez toujours l'impact avant de tuer des processus.
Il existe également d'autres façons de tuer un processus s'exécutant sur un port. Consultez notre guide détaillé pour plus de détails.
- Comment tuer un processus s'exécutant sur un port spécifique sous Linux
5. Afficher les processus utilisant un port
Pour trouver les processus utilisant un port TCP spécifique (par exemple, le port 8006), utilisez :
sudo fuser -v -n tcp 8006Ici,
- L'option
-vou--verboseaffiche des informations plus détaillées sur les processus. - L'option
-nou--namespacespécifie l'espace de noms dans lequel rechercher les ressources. Dans ce cas,tcpest utilisé pour rechercher les processus utilisant des sockets ou des ports TCP. 8006: Il s'agit du numéro de port TCP spécifique que la commande vérifie pour les processus qui l'utilisent.
Cette commande affichera les processus associés au port 8006.
USER PID ACCESS COMMAND
8006/tcp: www-data 1691 F.... pveproxy
www-data 1692 F.... pveproxy worker
www-data 1693 F.... pveproxy worker
www-data 1694 F.... pveproxy workerDécomposons la sortie ci-dessus et voyons ce que fait chaque option.
USER: Cette colonne montre le nom d'utilisateur de l'utilisateur exécutant le processus. Dans ce cas, c'estwww-data, qui est un utilisateur courant pour les processus de serveur web.PID: Cette colonne affiche l'identifiant du processus (PID) du processus utilisant le port TCP.ACCESS: Cette colonne montre le type d'accès que le processus a à la ressource (dans ce cas, le port TCP). Les lettresF....indiquent que le processus a le port TCP ouvert en écriture (Fsignifie « fichier » ou socket).COMMANDE: Cette colonne affiche le nom du processus ou de la commande utilisant le port TCP.
D'après le résultat, il y a quatre processus utilisant le port TCP 8006 :
- Le processus avec le PID 1691 s'appelle
pveproxy. - Les processus avec les PID 1692, 1693 et 1694 sont nommés
pveproxy worker.
Pour ceux qui se demandent, ces processus sont liés à Proxmox VE (Virtual Environment), qui est une plateforme de gestion de virtualisation de serveurs open source.
Le processus pveproxy est le processus principal du proxy, et les processus pveproxy worker sont des processus de travail qui gèrent les connexions entrantes sur le port TCP spécifié (8006).
6. Lister les signaux
Nous pouvons utiliser fuser pour envoyer des signaux spécifiques à un processus. Pour lister tous les signaux, exécutez :
fuser -lLorsque vous exécutez fuser -l, vous verrez une liste complète des signaux pris en charge par votre système. Cela peut être utile lorsque vous devez comprendre les différents types de signaux disponibles pour la gestion des processus.
HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT
CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH POLL PWR SYSChacun de ces signaux a une signification et un cas d'utilisation spécifiques. Voici quelques signaux courants :
- HUP (1) : Décrochage détecté sur le terminal de contrôle ou mort du processus de contrôle.
- INT (2) : Interruption depuis le clavier (comme Ctrl+C).
- QUITTER (3) : Quitter depuis le clavier.
- ILL (4) : Instruction illégale.
- ABRT (6) : Signal d'abandon provenant de abort(3).
- KILL (9) : Signal d'arrêt (ne peut pas être intercepté ni ignoré).
- SEGV (11) : Référence mémoire invalide.
- TERM (15) : Signal d'arrêt.
- ARRÊT (17, 19, 23) : Arrêtez le processus (ne peut pas être intercepté ou ignoré).
- CONT (18, 25) : Continuer si arrêté.
- USR1 (10, 30, 16) : Signal défini par l'utilisateur 1.
- USR2 (12, 31, 17) : Signal défini par l'utilisateur 2.
Ces signaux peuvent être utilisés conjointement avec d'autres commandes (comme kill) pour contrôler les processus. Par exemple, vous pourriez utiliser kill -9 PID pour envoyer un signal KILL à un processus avec un identifiant de processus (PID) spécifique.
7. Envoyer un signal aux processus
Pour envoyer un signal spécifique à un processus, utilisez :
sudo fuser -k -SIGNAL /path/to/filePar exemple, pour envoyer le signal SIGHUP aux processus accédant à un fichier ou à un répertoire, vous exécuteriez :
sudo fuser -k -HUP /path/to/file_or_directory8. Obtenir de l'aide
Pour afficher le manuel d'aide de la commande fuser, exécutez :
man fuserUn exemple pratique pour illustrer l'utilisation de la commande fuser dans Linux
Supposons que vous souhaitez démonter un système de fichiers, mais que vous recevez un message d'erreur indiquant que le système de fichiers est occupé. Vous pouvez utiliser la commande fuser pour savoir quels processus utilisent le système de fichiers, puis envoyer un signal à ces processus pour libérer le système de fichiers.
Tout d'abord, utilisez la commande fuser avec l'option -m pour savoir quels processus utilisent le point de montage. Par exemple, pour savoir quels processus utilisent le système de fichiers /mnt/data, vous pouvez exécuter la commande suivante :
sudo fuser -v -m /mnt/dataCela affichera une liste des identifiants de processus (PID) qui utilisent le système de fichiers.
Ensuite, vous pouvez utiliser la commande kill pour envoyer un signal à ces processus afin de libérer le système de fichiers. Par exemple, pour envoyer le signal SIGTERM à ces processus, vous pouvez exécuter la commande suivante :
fuser -km /mnt/dataCela enverra le signal SIGTERM à tous les processus utilisant le système de fichiers, leur donnant la possibilité de se nettoyer et de se terminer correctement.
Si les processus ne se terminent pas après quelques secondes, vous pouvez utiliser le signal SIGKILL pour forcer la terminaison des processus :
fuser -ki /mnt/dataNotez que l'option -k est utilisée pour envoyer le signal aux processus, et que l'option -i est utilisée pour demander une confirmation avant d'envoyer le signal. Vous pouvez omettre l'option -i si vous souhaitez envoyer le signal immédiatement.
Conclusion
La commande fuser est l'un des outils utiles pour gérer les processus dans Linux. Elle fournit des informations détaillées sur les processus accédant aux fichiers, répertoires ou sockets et vous permet de tuer ou d'envoyer des signaux à ces processus selon les besoins.
En particulier, la commande fuser est un outil précieux pour les administrateurs système et les utilisateurs qui ont besoin de comprendre quels processus accèdent à des ressources spécifiques sur leur système Linux.