Que sont les tuyaux “Pipes” sous Linux ? Comment fonctionne la redirection Pipes ?

Vous avez peut-être trop souvent utilisé une syntaxe comme cmd0 | cmd1 | cmd2dans votre terminal.

Vous savez probablement aussi que c’est la redirection de canal qui est utilisée pour rediriger la sortie d’une commande comme entrée de la commande suivante.

Mais savez-vous ce qui se cache dessous ? Comment fonctionne réellement la redirection de pipe ?

Ne vous inquiétez pas, car aujourd’hui, je vais démystifier les tuyaux Unix afin que la prochaine fois que vous irez à un rendez-vous avec ces barres verticales fantaisistes, vous saurez exactement ce qui se passe.

Remarque : j’ai utilisé le terme Unix à certains endroits parce que le concept de tubes (comme tant d’autres choses sous Linux) provient d’Unix.

Pipes sous Linux : l’idée générale

Voici ce que vous verrez partout concernant “Qu’est-ce que les pipes Unix ?” :

  • Les pipes Unix sont un mécanisme IPC (Inter Process Communication), qui transmet la sortie d’un programme à l’entrée d’un autre programme.

Maintenant, c’est l’explication générale que tout le monde donne. Je veux aller plus loin. Reformulons la ligne précédente de manière plus technique en supprimant les abstractions :

  • Les pipes Unix sont un mécanisme IPC (Inter Process Communication) qui prend le stdoutd’un programme et le transmet au stdind’un autre programme via un tampon.

Beaucoup mieux. Enlever l’abstraction l’a rendu beaucoup plus propre et plus précis. Vous pouvez regarder le diagramme suivant pour comprendre comment fonctionne le tuyau :

Redirection de canal sous Linux

L’un des exemples les plus simples de la commande pipe consiste à transmettre une sortie de commande à la commande grep pour rechercher une chaîne spécifique.

Par exemple, vous pouvez rechercher des fichiers dont le nom contient txt comme ceci :

READ  10 façons de personnaliser votre bureau Linux avec l'outil GNOME Tweaks
Exemple de redirection de canal

Gardez à l’esprit : Pipe redirige stdout vers stdin mais pas comme argument de commande

Une chose très importante à comprendre est que pipe transfère le stdoutd’une commande à stdinune autre mais pas comme argument de commande. Je vais l’expliquer avec un exemple.

Si vous utilisez la catcommande sans aucun argument, la lecture par défaut de stdin. Voici un exemple :

$ cat
Subscribe to Linux Handbook for more articles like this
^D
Subscribe to Linux Handbook for more articles like this

Ici, j’ai utilisé catsans transmettre de fichiers, donc c’est par défaut stdin. Ensuite, j’ai écrit une ligne, puis j’ai utilisé Ctrl + d pour lui faire savoir que j’avais fini d’écrire (Ctrl + d implique EOF ou End Of File). Une fois que j’ai fini d’écrire, cat a lu à partir de stdin, et a écrit cette même ligne à stdout.

Considérez maintenant la commande suivante :

echo hey | cat

La deuxième commande n’est PAS équivalente à cat hey. Ici, le stdout, “hey”, est placé dans un tampon et transféré dans le stdinde cat. Comme il n’y avait pas d’arguments de ligne de commande, cat était par défaut en stdinlecture, et il y avait déjà quelque chose dans le stdin, donc la commande cat l’a pris et imprimé sur stdout.

En fait, j’ai créé un fichier nommé hey et j’y ai mis du contenu. Vous pouvez voir la différence clairement dans l’image ci-dessous :

Types de tuyaux sous Linux

Il existe deux types de canaux sous Linux :

  • Pipes sans nom, également appelées pipes anonymes
  • Tubes nommés
5/5 - (1 vote)
SAKHRI Mohamed
SAKHRI Mohamed

Le blog d'un passionné d'informatique qui partage des actualités, des tutoriels, des astuces, des outils en ligne et des logiciels pour Windows, macOS, Linux, Web designer et jeux vidéo.

Publications: 3746

Laisser un commentaire

Your email address will not be published.