Si vous êtes même un utilisateur modéré de la ligne de commande Linux, vous devez être conscient des canaux, une fonctionnalité de ligne de commande fondamentale qui permet aux processus de communiquer. Ensuite, il y a un concept de tubes nommés (oui, des tubes avec des noms, pour que vous puissiez en faire plus avec les tubes). Le mkfifo La commande vous permet de créer de tels canaux nommés.
Dans ce didacticiel, nous aborderons les bases de mkfifo à l'aide d'exemples faciles à comprendre. Mais avant cela, il convient de mentionner que tous les exemples ici ont été testés sur Ubuntu 16.04 LTS.
Commande Linux mkfifo
La commande mkfifo vous permet essentiellement de créer des FIFO (c'est-à-dire des canaux nommés). Voici la syntaxe de la commande :
mkfifo [OPTION]... NAME...
Et voici comment la page de manuel de l'outil l'explique :
Create named pipes (FIFOs) with the given NAMEs.
Voici quelques exemples de style Q&A qui devraient vous donner une bonne idée du fonctionnement de mkfifo.
Q1. Que sont exactement les canaux nommés ?
Pour comprendre cela, vous devez d'abord être conscient du concept de tuyaux de base. Vous auriez vu des commandes contenant une barre verticale (|). Cette barre s'appelle un tuyau. Ce qu'il fait, c'est créer un canal de communication entre les deux processus (lorsque la commande complète est exécutée).
Par exemple :
ls | grep .txt
La commande mentionnée ci-dessus se compose de deux programmes : ls et grep. Ces deux programmes sont séparés par un tube (|). Donc, ce que pipe fait ici, c'est qu'il crée un canal de communication entre ces programmes - lorsque la commande susmentionnée est exécutée, la sortie de ls est transmise en entrée à grep. Donc, finalement, la sortie qui s'affiche sur le terminal se compose uniquement des entrées contenant la chaîne '.txt'.
C'était donc un rappel rapide des tuyaux normaux. Vient maintenant le concept de tubes nommés. Comme son nom l'indique, ce sont des tuyaux avec des noms. Vous pouvez créer un canal nommé à l'aide de la commande mkfifo. Par exemple :
mkfifo pipe2
Donc 'pipe2' est maintenant un tube nommé. Vient maintenant la question de savoir comment les canaux nommés sont plus utiles ? Eh bien, considérez le cas où vous avez un processus en cours d'exécution dans un terminal et produisant une sortie, et ce que vous voulez, c'est canaliser cette sortie vers un autre terminal. Donc ici, un tube nommé pourrait être d'une grande aide.
Par exemple, supposons que ls soit le processus en cours d'exécution dans le premier terminal et que vous souhaitiez voir sa sortie dans un autre terminal. Voici donc ce que vous pouvez faire :
ls > pipe2
et voici ce que vous pouvez faire dans le second terminal :
cat < pipe2
Q2. Comment identifier les canaux nommés ?
Les canaux nommés sont accessibles normalement comme des fichiers. Cela signifie donc que vous pouvez utiliser la commande ls pour y accéder. Si vous voyez les autorisations d'accès pour un canal nommé, vous verrez un 'p' au début. Cela signifie que le fichier en question est un canal nommé. Voici un exemple :
Q3. Comment définir des autorisations d'accès personnalisées ?
Comme vous pouvez le voir dans les questions et réponses précédentes, les autorisations d'accès par défaut pour les canaux nommés sont "rw", "rw" et "r" (pour l'utilisateur, le groupe et les autres, respectivement). Cependant, si vous le souhaitez, vous pouvez également définir des autorisations personnalisées, ce que vous pouvez faire à l'aide de l'option -m.
Par exemple :
mkfifo pipe3 -m700
La capture d'écran suivante confirme que les autorisations personnalisées ont été définies :
Pour en savoir plus sur mkfifo, vous pouvez utiliser le --help et --version options.
Conclusion
Ainsi, selon le type de travail que vous effectuez sur la ligne de commande Linux, la commande mkfifo peut s'avérer très utile pour vous. Une fois que vous avez terminé avec l'utilisation de base dont nous avons discuté ici, vous pouvez en savoir plus sur l'outil en vous rendant sur sa page de manuel.