Comprendre les tuyaux et la redirection pour la ligne de commande Linux
Deux fonctionnalités puissantes de l’interface de ligne de commande Linux sont la redirection et les tuyaux, qui permettent d’envoyer la sortie (ou même l’entrée) d’un programme vers un fichier ou un autre programme. Vous avez peut-être déjà utilisé ces fonctionnalités sans en être conscient. Chaque fois que vous avez utilisé le symbole “ > ” dans une commande ou “ | ”, alors vous avez utilisé la redirection ou un tuyau, respectivement.
Sur tous les systèmes d’exploitation de type Unix, comme Linux et FreeBSD, la sortie d’un programme en ligne de commande va automatiquement à un endroit connu sous le nom de sortie standard (stdout). Par défaut, la sortie standard est l’écran (la console), mais cela peut être changé en utilisant des tuyaux et la redirection. De même, le clavier est considéré comme l’entrée standard (stdin) et, tout comme la sortie standard, cela peut être modifié.
Tuyaux
Les tuyaux vous permettent de canaliser la sortie d’une commande vers une autre où elle sera utilisée comme entrée. En d’autres termes, la sortie standard d’un programme devient l’entrée standard d’un autre.
La commande “ more ” prend l’entrée standard et la pagine sur la sortie standard (l’écran). Cela signifie que si une commande affiche plus d’informations qu’il n’est possible de montrer sur un seul écran, le programme “ more ” s’arrêtera après la première page pleine et attendra que l’utilisateur appuie sur ESPACE pour voir la page suivante ou RETOUR pour voir la ligne suivante.
Voici un exemple qui listera tous les fichiers, avec des détails ( -la) dans le répertoire /dev et canaliser la sortie vers more. Le répertoire /dev doit avoir des dizaines de fichiers et donc s’assurer que more doit paginer.
ls-la/dev |more
Remarquez l’invite --More-- en bas de l’écran. Appuyez sur ESPACE pour voir la page suivante et continuez à appuyer sur ESPACE jusqu’à ce que la sortie soit terminée.
Voici un autre exemple de tuyau, cette fois en utilisant l’outil “ wc ” (compte de mots).
ls-1/dev |wcwc compte le nombre de lignes, de mots et de caractères dans l’entrée standard. Si vous utilisez le paramètre -l, il affichera uniquement le nombre de lignes, ce qui est un bon moyen de voir combien de fichiers se trouvent dans un répertoire !
Le tutoriel “Examen approfondi des commandes d’archivage et de compression de Linux” a un exemple utilisant tar et 7-Zip ensemble :
tar cvf - *| 7zr a -si somefiles.tar.7zDans ce cas, le trait d’union après l’option f indique à tar d’envoyer sa sortie vers la sortie standard et non vers un fichier. La sortie de tar sera alors alimentée dans le tuyau vers 7zr qui attend une entrée de la part de l’entrée standard en raison de l’option -si.
Redirection
La redirection est similaire aux tuyaux sauf qu’elle utilise des fichiers plutôt qu’un autre programme. La sortie standard d’un programme est l’écran. En utilisant le symbole > (supérieur à), la sortie d’un programme peut être envoyée vers un fichier. Voici un listing de répertoire de /dev à nouveau mais cette fois redirigé vers un fichier appelé listing.txt
ls-la> listing.txtIl n’y aura rien affiché sur le terminal car tout a été envoyé dans le fichier. Vous pouvez regarder le fichier en utilisant la commande cat (qui peut être canalisée vers more) ou pour plus de commodité, vous pouvez simplement utiliser la commande more tout seule :
more listing.txtSi listing.txt existait déjà, il sera écrasé. Mais vous pouvez ajouter à un fichier existant en utilisant >> comme ceci :
ls-la/home > listing.txt
ls-la/dev >> listing.txtLa première redirection écrasera le fichier listing.txt tandis que la seconde y ajoutera.
La commande cat peut être utilisée pour créer un fichier en utilisant la redirection, par exemple :
cat> atextfile.txtMaintenant, tout texte que vous tapez sera envoyé au fichier atextfile.txt jusqu’à ce que vous appuyiez sur Control-D, auquel point le fichier sera fermé et vous serez ramené à l’invite de commande. Si vous voulez ajouter plus de texte au fichier, utilisez la même commande mais avec deux signes supérieurs ( >>).
Conclusion
De nombreux programmes de ligne de commande Linux sont conçus pour fonctionner avec la redirection et les tuyaux, essayez de les expérimenter et voyez comment ils interagissent. Par exemple, la sortie de la commande ps, qui répertorie les processus en cours, peut être canalisée vers grep. Voyez si vous pouvez déterminer comment lister les processus appartenant à root.