Vous avez peut-être utilisé une syntaxe telle que cmd0 | cmd1 | cmd2
trop souvent dans 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 canal ?
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 canaux (comme tant d'autres choses sous Linux) provient d'Unix.
Les tubes 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 la
stdout
d'un programme et le transmet austdin
d'un autre programme via un tampon.
Beaucoup mieux. Enlever l'abstraction l'a rendu beaucoup plus propre et plus précis. Vous pouvez consulter le schéma suivant pour comprendre le fonctionnement du tuyau :
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 :
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 stdout
d'une commande à stdin
d'un autre mais pas comme argument de commande. Je vais l'expliquer avec un exemple.
Si vous utilisez cat
commande sans aucun argument, elle sera par défaut lue à partir 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é cat
sans transmettre de fichiers, il est donc 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 depuis stdin
, et a écrit cette ligne dans stdout
.
Considérez maintenant la commande suivante :
echo hey | cat
La deuxième commande n'est PAS équivalente à cat hey
. Ici, la stdout
, "hey", est placé dans un tampon et transféré dans le stdin
de cat
. Comme il n'y avait pas d'arguments de ligne de commande, cat était par défaut stdin
pour lire, 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 clairement voir la différence dans l'image ci-dessous :
Types de tuyaux sous Linux
Il existe deux types de canaux sous Linux :
- Canaux sans nom, également appelés canaux anonymes
- Canaux nommés
Lire l'histoire complète
Le reste de l'article est disponible uniquement pour les membres de LHB. Vous pouvez vous inscrire maintenant GRATUITEMENT pour lire le reste de cet article ainsi que l'accès à tous les messages réservés aux membres. Vous êtes également abonné à notre newsletter Linux bimensuelle.
S'abonnerVous avez déjà un compte ?Se connecter