Introduction
Les capacités de redirection intégrées dans Linux vous fournissent un ensemble robuste d’outils pour optimiser de nombreux flux de travail. La « philosophie Unix » du développement logiciel consistait à créer des outils qui font chacun une chose bien, et cette philosophie a été transmise aux outils de ligne de commande modernes, qui sont puissants individuellement, et exponentiellement plus lorsqu’ils sont combinés. Que vous écriviez des logiciels complexes ou que vous travailliez simplement en ligne de commande, savoir comment manipuler les différents flux d’E/S dans votre environnement augmentera considérablement votre productivité.
Prérequis
Pour suivre ce guide, vous aurez besoin d’accéder à un serveur Linux. Si vous avez besoin d’informations sur la connexion à votre serveur pour la première fois, vous pouvez suivre notre guide sur la connexion à un serveur Linux en utilisant SSH.
Flux
L’entrée et la sortie dans l’environnement Linux sont réparties sur trois flux. Ces flux sont:
-
Entrée standard (stdin)
-
Sortie standard (stdout)
-
Erreur standard (stderr)
Les flux sont également numérotés:
-
stdin (0)
-
stdout (1)
-
stderr (2)
Pendant les interactions standard entre l’utilisateur et le terminal, l’entrée standard provient du clavier de l’utilisateur. La sortie standard et l’erreur standard sont affichées sur le terminal de l’utilisateur sous forme de texte. Collectivement, les trois flux sont appelés les flux standards.
Entrée Standard
Le flux d’entrée standard transporte généralement des données d’un utilisateur vers un programme. Les programmes qui attendent une entrée standard reçoivent généralement une entrée à partir d’un périphérique, tel qu’un clavier. Plus tard dans ce tutoriel, vous verrez des exemples d’utilisation de la sortie d’un programme comme entrée standard pour un autre.
Sortie standard
La sortie standard est la sortie générée par un programme. Lorsque le flux de sortie standard n’est pas redirigé, il affichera le texte directement sur le terminal. Essayez de produire un texte arbitraire en utilisant la commande echo
:
OutputSent to the terminal
Lorsqu’il est utilisé sans options supplémentaires, la commande echo
affiche tout argument qui lui est passé en ligne de commande.
Exécutez echo sans aucun argument:
Il renverra une ligne vide. Certains programmes ne font rien sans arguments fournis.
Erreur standard
L’erreur standard contient les erreurs générées par un programme qui a échoué d’une manière ou d’une autre. Comme pour la sortie standard, la destination par défaut pour ce flux est l’affichage sur le terminal.
Voyons un exemple basique d’erreur standard en utilisant la commande ls. ls liste le contenu d’un répertoire.
Lorsqu’il est exécuté sans argument, ls liste le contenu du répertoire courant. Si ls est exécuté avec un répertoire en tant qu’argument, il listera le contenu du répertoire fourni.
Étant donné que % n’est pas un répertoire existant, cela enverra le texte suivant vers l’erreur standard:
Outputls: cannot access %: No such file or directory
A program does not have to crash or finish running in order to generate Standard Error, and whether some output is sent to either Standard Output or Standard Error is down to the behavior of the program. They are not technically different from one another in any way — just that one output stream is supposed to be reserved for error messages, and some tools will assume that Standard Error being empty means that a program ran successfully. Some programs will even output minor errors to Standard Error without crashing or failing to also produce the intended output. It is only used as a convention to separate intended output from unintended output.
Redirection de flux
Linux inclut des commandes de redirection pour chaque flux. Celles-ci peuvent être utilisées pour écrire la sortie standard ou l’erreur standard dans un fichier. Si vous écrivez dans un fichier qui n’existe pas, un nouveau fichier portant ce nom sera créé avant l’écriture.
Les commandes avec une seule parenthèse écrasent le contenu existant de la destination.
Écraser
-
> – sortie standard
-
< – entrée standard
-
2> – erreur standard
Les commandes avec une double parenthèse ne écrasent pas le contenu existant de la destination.
Ajouter
-
>> – sortie standard
-
<< – entrée standard
-
2>> – erreur standard
Tuyaux
Les tuyaux sont utilisés pour rediriger un flux d’un programme à un autre. Lorsque la sortie standard d’un programme est envoyée à un autre via un tuyau, la sortie du premier programme sera utilisée comme entrée pour le second, plutôt que d’être affichée dans le terminal. Seules les données renvoyées par le second programme seront affichées.
Le tuyau Linux est représenté par une barre verticale : |
Voici un exemple de commande utilisant un tuyau :
Cela prend la sortie de ls
, qui affiche le contenu de votre répertoire actuel, et la redirige vers le programme less
. Less
affiche les données qui lui sont envoyées une ligne à la fois.
ls
affiche normalement le contenu du répertoire sur plusieurs lignes. Lorsque vous le lancez à travers less
, chaque entrée est placée sur une nouvelle ligne.
Bien que la fonctionnalité du tuyau puisse sembler similaire à celle de >
et >>
, la distinction est que les tuyaux redirigent les données d’une commande à une autre, tandis que > et >> sont utilisés pour rediriger exclusivement vers des fichiers.
Filtres
Les filtres sont une classe de programmes couramment utilisés avec la sortie pipée d’un autre programme. Beaucoup d’entre eux sont également utiles par eux-mêmes, mais ils illustrent particulièrement bien le comportement du piping.
-
find – renvoie les fichiers dont les noms correspondent à l’argument passé à find.
-
grep – renvoie le texte qui correspond au motif de chaîne passé à grep.
-
tee – redirige l’entrée standard vers à la fois la sortie standard et un ou plusieurs fichiers.
-
tr – trouve et remplace une chaîne par une autre.
-
wc – compte les caractères, les lignes et les mots.
Exemples
Maintenant que vous avez été introduit à la redirection, au piping et aux filtres de base, regardons quelques modèles et exemples de redirection courants.
Le motif command > fichier
redirige la sortie standard d’une commande vers un fichier.
La commande ci-dessus transmet le contenu de votre répertoire personnel (~
) en tant que sortie standard et écrit la sortie dans un fichier nommé root_dir_contents.txt
. Il supprimera tout contenu précédent dans le fichier, car c’est une commande simple.
Le motif command > /dev/null
redirige la sortie standard vers nulle part. /dev/null
est un fichier spécial utilisé pour éliminer toutes les données qui lui sont redirigées. Il est utilisé pour supprimer la sortie standard qui n’est pas nécessaire et qui pourrait autrement perturber le fonctionnement d’une commande ou d’un script. Toute sortie envoyée à /dev/null
est jetée.
Cette commande élimine le flux de sortie standard renvoyé par la commande ls en le transmettant à /dev/null.
Ce motif commande 2> fichier
redirige le flux d’erreur standard d’une commande vers un fichier, en écrasant le contenu existant.
Cela redirige l’erreur générée par le nom de répertoire non valide ''
et l’écrit dans log.txt
. Notez que l’erreur est toujours envoyée au terminal et affichée sous forme de texte.
Le motif command >> fichier
redirige la sortie standard d’une commande vers un fichier sans écraser le contenu existant du fichier.
Ce duo de commandes redirige d’abord le texte entré par l’utilisateur via echo vers un nouveau fichier. Ensuite, il ajoute le texte reçu par la deuxième commande echo au fichier existant, sans écraser son contenu.
Le motif command 2>> file
ci-dessus redirige le flux d’erreur standard d’une commande vers un fichier sans écraser le contenu existant du fichier. Ce motif est utile pour créer des journaux d’erreurs pour un programme ou un service, car le fichier journal ne verra pas son contenu précédent effacé à chaque fois que le fichier est écrit.
La commande ci-dessus redirige le message d’erreur causé par un argument de recherche invalide vers un fichier nommé stderr_log.txt. Ensuite, il ajoute le message d’erreur causé par un argument wc invalide au même fichier.
Le motif command | command
redirige la sortie standard de la première commande vers l’entrée standard de la seconde commande.
Cette commande recherche dans /var et ses sous-dossiers les noms de fichiers et les extensions correspondant à la chaîne deb
, et renvoie les chemins des fichiers, la partie correspondante de chaque chemin étant mise en évidence en rouge.
Le motif command | tee file
(qui inclut la commande tee
) redirige la sortie standard de la commande vers un fichier et écrase son contenu. Ensuite, il affiche la sortie redirigée dans le terminal. Il crée un nouveau fichier si le fichier n’existe pas déjà.
Dans le contexte de ce motif, tee
est généralement utilisé pour afficher la sortie d’un programme tout en la sauvegardant simultanément dans un fichier.
Cela redirige les comptes de caractères, de lignes et de mots du fichier /etc/magic
(utilisé par le shell Linux pour déterminer les types de fichiers) vers la commande tee, qui divise ensuite la sortie de wc
en deux directions, et l’envoie à l’affichage terminal et au fichier magic_count.txt
. Pour la commande tee, imaginez la lettre T. La partie inférieure de la lettre est les données initiales, et la partie supérieure est les données divisées en deux directions différentes (sortie standard et terminal).
Plusieurs pipes peuvent être utilisés pour rediriger la sortie à travers plusieurs commandes et/ou filtres.
Conclusion
Apprendre à utiliser les capacités de redirection intégrées à la ligne de commande Linux est une compétence cruciale. Maintenant que vous avez vu les bases du fonctionnement des redirections et des pipes, vous pourrez commencer votre voyage dans le monde des scripts shell, qui font un usage fréquent des programmes et des schémas mis en évidence dans ce guide.
La recherche de commandes spécifiques, ou de quelque chose que vous aimeriez faire dans la ligne de commande (par exemple, « supprimer tous les fichiers dans un répertoire qui commencent par une lettre majuscule ») peut également s’avérer utile lorsque vous devez accomplir une tâche spécifique à l’aide de la ligne de commande.
Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-i-o-redirection