GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser et tirer le meilleur parti de la commande fuser sous Linux

Supposons que vous ayez pour tâche d'identifier les processus qui utilisent un fichier particulier, puis de les tuer un par un - tout cela doit être fait à partir de la ligne de commande. Que feriez-vous? Eh bien, si vous êtes un débutant en ligne de commande, je suis sûr que vous n'auriez aucune idée de demander de l'aide.

Mais les pros de la ligne de commande auront probablement une idée qu'il existe un utilitaire de ligne de commande sous Linux qui vous permet d'identifier les processus en fonction des fichiers (ou répertoires ou sockets) auxquels ils accèdent. Non seulement cela, l'outil vous permet également de tuer ces processus, vous n'avez donc pas à utiliser le kill ou killall commandes séparément. L'utilitaire de ligne de commande dont nous parlons est fuser .

Si vous n'êtes pas encore au courant de cet utilitaire et que vous voulez comprendre comment l'utiliser, ne cherchez pas plus loin, car dans cet article, nous aborderons fuser en détail, à travers quelques exemples faciles à comprendre.

Mais avant d'aller de l'avant, veuillez garder à l'esprit que tous les exemples, commandes et instructions mentionnés dans ce didacticiel ont été testés sur Ubuntu 16.04 LTS et le fuser la version de commande que nous avons utilisée est 22.21.

Commande de fusion Linux

Le fuseur La commande - comme je l'ai déjà mentionné ci-dessus - est principalement utilisée pour identifier les processus utilisant des fichiers, des répertoires ou des sockets. L'outil affiche essentiellement les PID des processus qui utilisent le fichier dont le nom est passé en argument à la commande.

Voici le fuseur commande en action dans sa forme la plus basique :

Comme le montre clairement la capture d'écran ci-dessus, nous avons essayé d'utiliser fuser pour savoir quels processus utilisent /home/himanshu répertoire, et la commande - dans sa sortie - a produit une liste d'ID de processus. Jusqu'ici tout va bien, mais il y a quelques problèmes ici.

Tout d'abord, qu'est-ce que c'est que ce "c" ajouté à chaque PID ? Un rapide coup d'œil à la page de manuel de la commande révèle que dans le mode d'affichage par défaut, le fuser La commande affiche non seulement les PID des processus accédant au fichier ou au répertoire, mais affiche également le type d'accès.

Chaque type d'accès est indiqué par une lettre :

  • c - répertoire courant.
  • e - exécutable en cours d'exécution.
  • f - fichier ouvert. f est omis dans le mode d'affichage par défaut.
  • F - fichier ouvert pour l'écriture. F est omis dans le mode d'affichage par défaut.
  • r - répertoire racine.
  • m - fichier mmapé ou bibliothèque partagée.

Maintenant, revenant à l'exemple dont nous parlions, la lettre 'c' dans la sortie indique que tous les processus dont les PID sont listés dans la sortie accèdent à /home/himanshu répertoire comme leur répertoire actuel.

Gardez à l'esprit qu'un processus peut avoir plusieurs types d'accès pour un fichier ou un répertoire. Par exemple, la sortie suivante montre que le répertoire racine (/) est accédé par de nombreux processus en tant que répertoire courant et racine.

Jusqu'à présent, le fuseur la sortie que nous voyons ne contient que des ID de processus, et rien de plus. Ne serait-il pas préférable que les noms des processus soient également affichés ? Eh bien, pour cela, vous devez utiliser le -v option de ligne de commande. Voici un exemple :

Ensuite, pour ajouter le nom d'utilisateur du propriétaire du processus à chaque PID, utilisez le -u option de ligne de commande. Voici un exemple :

Remarque :Si le fichier ou le répertoire en question se trouve sur un système de fichiers monté ou sur un périphérique bloc, utilisez le -m option de ligne de commande. "Tous les processus accédant aux fichiers de ce système de fichiers sont répertoriés", indique la page de manuel. "Si un fichier de répertoire est spécifié, il est automatiquement remplacé par NAME/. pour utiliser n'importe quel système de fichiers pouvant être monté sur ce répertoire."

Comment tuer des processus à l'aide de fuser

Maintenant que nous avons parlé du fuser bases, venons-en à la tâche que j'ai mentionnée au début - comment tuer des processus en utilisant fuser ? Prenons un exemple plus simple pour ce cas. Ce que je vais faire, c'est lancer un exécutable et pendant son exécution, j'essaierai de tuer le processus en utilisant fuser .

Alors, voici l'exécutable qui a été lancé :

Et voici le fuseur commande qui devrait idéalement tuer le processus initié par le test-fuser exécutable.

fuser -v -k test-fuser

Oh, avant d'aller de l'avant et d'exécuter cette commande, laissez-moi vous dire que le -k l'option de ligne de commande indique à fuser pour tuer le processus (ou les processus) à l'aide du fichier ou du répertoire.

Voici ce qui s'est passé lorsque la commande mentionnée ci-dessus a été exécutée :

Comme le montre clairement la capture d'écran ci-dessus, en utilisant le -k option de ligne de commande avec fuser tué le test-fuser processus. Pour vous assurer que l'unité de fusion commande demande la confirmation de l'utilisateur avant de tuer un processus, utilisez le -i option. Voir exemple ci-dessous :

Voici quelques détails importants liés à l'unité de fusion que vous devez connaître lors de l'utilisation de l'option -k :

  • Avec -k, la commande fuser envoie le signal SIGKILL par défaut. Mais vous pouvez modifier ce comportement en utilisant l'option -SIGNAL.
  • Un processus de fusion ne se tue jamais, mais peut tuer d'autres processus de fusion.

fuser - autres détails

Outre les informations mentionnées jusqu'à présent, il existe plusieurs autres détails qu'il convient de garder à l'esprit. Toutes ces informations sont accessibles en vous rendant sur la page de manuel de la commande. Par exemple, voici les informations que le fuseur listes de pages de manuel dans la section "Restrictions" :

       Processes accessing the same file or file system several times  in  the
       same way are only shown once.

       If the same object is specified several times on the command line, some
       of those entries may be ignored.

       fuser may only be able to gather partial information  unless  run  with
       privileges.   As  a consequence, files opened by processes belonging to
       other users may not be listed and  executables  may  be  classified  as
       mapped only.

       Installing  fuser SUID root will avoid problems associated with partial
       information, but may be undesirable for security and privacy reasons.

       udp and tcp name spaces, and UNIX domain sockets can't be searched with
       kernels older than 1.3.78.

       Accesses by the kernel are only shown with the -v option.

       The  -k  option  only  works  on processes.  If the user is the kernel,
       fuser will print an advice, but take no action beyond that.

Conclusion

Comme vous l'auriez compris maintenant, fuser est un utilitaire de ligne de commande extrêmement utile sous Linux. La bonne chose est que l'outil n'est ni difficile à comprendre ni à utiliser, donc même les débutants peuvent facilement s'y mettre. Un aspect que nous n'avons pas abordé ici est que la commande vous permet d'identifier et même de tuer les processus exécutés sur des ports particuliers, ce qui en fait également un outil difficile à ignorer pour les administrateurs réseau.


Linux
  1. Comment utiliser la commande Linux grep

  2. Comment utiliser la commande history sous Linux

  3. Comment créer un alias et utiliser la commande Alias ​​sous Linux

  4. Comment utiliser la commande id sous Linux

  5. Comment utiliser la commande "screen" sous Linux

Comment utiliser la commande wget sous Linux ?

Comment utiliser la commande xargs sous Linux ?

Comment installer et utiliser la commande Ack sous Linux

Comment utiliser la commande RPM sous Linux

Linux perf :comment utiliser la commande et le profileur

Comment utiliser la commande which sous Linux