GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser les canaux et les canaux nommés sous Linux (avec exemples)

L'un des opérateurs shell les plus puissants de Linux est le tube. Dans cet article, nous verrons comment fonctionnent les canaux réguliers et nommés, comment les utiliser et en quoi ils diffèrent les uns des autres.

Les pipes sont l'une des fonctionnalités de ligne de commande les plus précieuses des systèmes d'exploitation de type Linux et Unix. Les tuyaux sont utilisés dans une variété d'applications. Si vous consultez un article sur la ligne de commande Linux, vous remarquerez que les tubes apparaissent fréquemment.

Le symbole de la barre verticale | désigne un tuyau. Grâce au tube, vous pouvez prendre la sortie d'une commande et la transmettre à une autre commande en entrée.

Par conséquent, la sortie d'une commande peut être utilisée comme entrée pour une autre, et la sortie de cette commande peut être utilisée comme entrée pour la commande suivante, et ainsi de suite.

Vous n'êtes donc pas limité à une seule commande canalisée. Vous pouvez les empiler autant de fois que vous le souhaitez.

En d'autres termes, un tube est une forme de redirection utilisée sous Linux pour envoyer la sortie d'un programme à un autre programme pour un traitement ultérieur. Les tuyaux vous permettent d'effectuer des opérations que le shell ne prend pas en charge par défaut.

La syntaxe de la commande pipe ou unnamed pipe est | caractère entre deux commandes :

command1 | command2 | ... | commandN

Comment fonctionne un tuyau sous Linux

Pour voir comment fonctionne le tuyau, regardons les exemples ci-dessous.

Nous avons un répertoire rempli de nombreux types de fichiers différents. Nous voulons donc savoir combien de fichiers d'un type particulier se trouvent dans ce répertoire.

Ainsi, nous pouvons obtenir une liste de fichiers facilement en utilisant le ls commande :

ls -l

Nous utiliserons grep pour séparer les types de fichiers que nous recherchons. Par exemple, nous recherchons des fichiers avec le mot txt en leur nom ou en tant qu'extension de fichier.

Nous utiliserons le caractère spécial du shell | pour diriger ls ' sortie vers grep .

ls | grep txt

Comme vous pouvez le voir sur l'image ci-dessus, la sortie de ls la commande n'a pas été envoyée à la fenêtre du terminal.

Par conséquent, le résultat ne s'affiche pas à l'écran. Au lieu de cela, il est plutôt redirigé vers l'entrée du grep commande. La sortie que nous voyons ci-dessus provient de grep , la dernière commande de cette chaîne.

Maintenant, commençons à étendre notre chaîne. Nous pouvons compter les fichiers txt en ajoutant le wc commande à la chaîne. Nous utiliserons le -l option (nombre de lignes) avec wc .

ls | grep txt | wc -l

Dans l'exemple ci-dessus, grep n'est plus la dernière commande de la chaîne, nous ne voyons donc pas sa sortie. Au lieu de cela, la sortie de grep est introduit dans le wc commande.

Le résultat que nous voyons dans la fenêtre du terminal provient de wc . Il signale deux fichiers, txt dans le répertoire.

Qu'est-ce qu'un tube nommé sous Linux ?

Comme son nom l'indique, ce sont des tuyaux avec des noms. L'une des principales différences entre les canaux normaux et les canaux nommés est que les canaux nommés sont présents dans le système de fichiers . Autrement dit, ils apparaissent comme des fichiers.

Le canal nommé sous Linux est une méthode permettant de transmettre des informations d'un processus informatique à un autre à l'aide d'un canal auquel est attribué un nom spécifique. Les canaux nommés sont également connus sous le nom de FIFO, qui signifie First In, First Out .

Vous pouvez créer un tube nommé en utilisant le mkfifo commande. Par exemple :

mkfifo mypipe

Vous pouvez savoir si un fichier est un canal nommé par le p bit dans la section des autorisations de fichiers.

ls -l mypipe
prw-r--r--  1 root     root         0 Mar 20 12:58 mypipe

Les canaux nommés sont des fichiers sur le système de fichiers lui-même. Contrairement à un tube standard, un tube nommé est accessible dans le cadre du système de fichiers, comme tout autre type de fichier.

Le contenu du canal nommé réside en mémoire plutôt que d'être écrit sur le disque. Il n'est donc passé que lorsque les deux extrémités du tuyau ont été ouvertes. Et vous pouvez écrire dans un tube plusieurs fois avant qu'il ne soit ouvert à l'autre bout et lu.

L'utilisation de canaux nommés vous permet d'établir un processus dans lequel un processus écrit dans un canal et un autre lit à partir d'un canal sans trop se soucier d'essayer de chronométrer ou d'orchestrer soigneusement leur interaction.

Pour voir comment fonctionnent les canaux nommés, regardons les exemples ci-dessous. Commençons par créer notre tube nommé :

mkfifo mypipe

Consommez maintenant les messages avec ce tube.

tail -f mypipe

Ouvrez une autre fenêtre de terminal, écrivez un message dans ce tube :

echo "hi" >> mypipe

Maintenant, dans la première fenêtre, vous pouvez voir le "salut" imprimé :

tail -f pipe1
hi

Comme il s'agit d'un tube et que le message a été consommé, si nous vérifions la taille du fichier, vous pouvez voir qu'il est toujours de 0 :

ls -l mypipe
prw-r--r-- 1 root root 0 Mar 20 14:11 mypipe

Puisqu'un canal nommé n'est qu'un fichier Linux, nous pouvons utiliser la commande rm pour en supprimer un. Par conséquent, pour supprimer le canal que nous avons créé dans les exemples précédents, nous exécuterions :

rm mypipe

Quand utiliser des canaux réguliers ou nommés

L'utilisation d'un canal standard au lieu d'un canal nommé sous Linux dépend des caractéristiques que nous recherchons. Certains peuvent être la persistance, la communication bidirectionnelle, le fait d'avoir un nom de fichier, la création d'un filtre et la restriction des autorisations d'accès.

Par exemple, si nous voulons filtrer plusieurs fois la sortie d'une commande, l'utilisation d'un canal anonyme semble l'option la plus appropriée.

D'un autre côté, si nous avons besoin d'un nom de fichier et que nous ne voulons pas stocker de données sur disque, nous recherchons un tube nommé.

En conclusion, la prochaine fois que vous travaillerez avec des commandes sur le terminal Linux et que vous vous retrouverez à déplacer des données entre les commandes, espérons qu'un tube rendra le processus rapide et facile.

Conclusion

Cet article vous a montré la polyvalence des canaux lorsqu'ils sont utilisés dans les commandes Linux. Il est néanmoins relativement simple, mais il peut résoudre un large éventail de requêtes compliquées.

De plus, cet outil de ligne de commande est simple et fonctionne avec les plates-formes UNIX et Linux.

Pour en savoir plus sur pipe commande sous Linux, consultez sa page de manuel.


Linux
  1. Comment utiliser la commande Linux Hexdump avec des exemples pratiques

  2. Comment utiliser la commande Sed sous Linux avec des exemples

  3. Comment utiliser la commande Rmmod sous Linux avec des exemples

  4. Comment utiliser la commande Dig sous Linux avec des exemples

  5. Comment utiliser la commande d'arrêt et de redémarrage de Linux avec des exemples

Commande d'alias Linux :comment l'utiliser avec des exemples

Comment utiliser la commande Linux gunzip avec des exemples

Comment utiliser la commande Linux rm avec des exemples

Comment installer et utiliser la commande Ack sous Linux avec des exemples

Comment installer et utiliser la commande fd sous Linux

Comment utiliser la commande Sleep sous Linux :expliqué avec des exemples