Recherche de site Web

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 :

  1. Identifier les processus utilisant un fichier : Vous pouvez utiliser fuser pour 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.
  2. Identifier les processus utilisant une socket réseau : fuser peut é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.
  3. 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 -k pour 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|socket

Options

Quelques options courantes utilisées avec fuser incluent :

  • -v ou --verbose : Fournit une sortie détaillée, incluant l'utilisateur, l'ID du processus, le type d'accès et la commande.
  • -a ou --all : Affiche tous les fichiers spécifiés sur la ligne de commande.
  • -k ou --kill : Tue les processus accédant au fichier ou au socket spécifié.
  • -i ou --interactive : Demande une confirmation avant de tuer un processus.
  • -l ou --list-signals : Liste tous les noms de signaux disponibles.
  • -m ou --mount : Affiche tous les processus accédant à un système de fichiers ou à un périphérique de blocs.
  • -n ou --namespace : Recherche dans un espace de noms spécifique (fichier, UDP ou TCP).
  • -u ou --user : Ajouter le nom de l'utilisateur du propriétaire du processus à chaque PID.
  • -c : Affiche le nom de la commande pour chaque processus.
  • -4 ou --ipv4 : Rechercher uniquement les sockets IPv4.
  • -6 ou --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/file

Par exemple, pour trouver les processus utilisant le fichier /usr/bin/firefox-esr, vous pouvez utiliser la commande suivante :

fuser --verbose /usr/bin/firefox-esr

Cela 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 Content

Voici 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/mountpoint

      Par 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/efi

      Voici 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'est root.
      • PID : Cette colonne affiche l'ID de processus (PID) du processus. Cependant, au lieu d'un PID numérique, elle affiche kernel car 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 montre mount, 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 commande fuser.

      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) socket

      Par exemple, la commande suivante tuera tous les processus qui utilisent le port 8006 :

      fuser -k 8006/tcp

      N'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 8006

      Ici,

      • L'option -v ou --verbose affiche des informations plus détaillées sur les processus.
      • L'option -n ou --namespace spécifie l'espace de noms dans lequel rechercher les ressources. Dans ce cas, tcp est 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 worker

      Dé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'est www-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 lettres F.... indiquent que le processus a le port TCP ouvert en écriture (F signifie « 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 :

      1. Le processus avec le PID 1691 s'appelle pveproxy.
      2. 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 -l

      Lorsque 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 SYS

      Chacun 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/file

      Par 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_directory

      8. Obtenir de l'aide

      Pour afficher le manuel d'aide de la commande fuser, exécutez :

      man fuser

      Un 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/data

      Cela 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/data

      Cela 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/data

      Notez 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.