Les flux de redirections
Objectifs
Connaître les 3 canaux de communications (stdin, stdout, stderr)
Savoir rediriger les différents canaux d'une commande
Mise en situation
On a l'habitude d'utiliser des commandes qui retournent un résultat directement dans notre terminal. En réalité il est possible de rediriger ce résultat ailleurs, par exemple dans un fichier, en utilisant les différents canaux de communications d'une commande.
Définition : Sortie standard
La sortie standard d'un programme, que l'on nomme stdout
, est un flux qui va contenir tout ce qui est affiché à l'écran par la commande. Par défaut, cette sortie standard dirigée vers le terminal, pour que l'on puisse consulter le résultat de la commande.
Définition : Sortie d'erreurs
La sortie d'erreurs, que l'on nomme stderr
, est similaire à la sortie standard à la différence que ce flux est destiné aux erreurs renvoyés par la commande. Par défaut cette sortie est dirigée vers le terminal, et s'affiche donc en même temps que la sortie standard.
Flux de redirections
Les flux de redirections (ou simplement, redirections) sont des opérateurs qui permettent de diriger la sortie standard ou d'erreurs d'une commande vers une autre destination, en particulier vers un fichier.
Syntaxe :
Les opérateurs >
et >>
permettent de rediriger la sortie standard d'une commande dans un fichier :
>
efface complètement le contenu du fichier avant de rediriger le flux,>>
ajouter en fin de fichier la sortie standard.
Exemple : Opérateurs de redirection de stdin
On peut rediriger le résultat de la commande cat
.
$ cat TODO-perso.txt
- Faire les courses
- Déclarer mes impôts
- Réparer le pommeau de douche
$ cat TODO-boulot.txt
- Mettre en place les sauvegardes des postes
- Déployer le nouveau site web
- Poser les jours de congés de cet été
$ cat TODO-perso.txt TODO-boulot.txt > TODO.txt
$ cat TODO.txt
- Faire les courses
- Déclarer mes impôts
- Réparer le pommeau de douche
- Mettre en place les sauvegardes des postes
- Déployer le nouveau site web
- Poser les jours de congés de cet été
Ici on voit que les 2 fichiers contiennent du texte, la commande cat
a permis de les concaténer, et le résultat a été envoyé dans le fichier TODO.txt
(au lieu du terminal) grâce à l'opérateur >
.
Pour reproduire cet exemple téléchargez les fichiers suivants et placez-vous là où vous les avez téléchargé.
Exemple :
Si l'on reprend la commande cat
précédente, mais avec un fichier qui n'existe pas
$ cat TODO-perso.txt TODO-fauxfichier.txt > TODO.txt
cat: TODO-fauxfichier.txt: Aucun fichier ou dossier de ce type
$ cat TODO.txt
- Faire les courses
- Déclarer mes impôts
- Réparer le pommeau de douche
On constate que la sortie de la commande (pour le fichier qui existe bien) a été redirigée dans le fichier TODO.txt
, mais l'erreur pour le fichier n'existant pas s'affiche dans la console.
Méthode : Opérateurs de redirection de stderr
De la même manière que pour la sortie standard, la sortie d'erreurs peut-être redirigée à l'aide de deux opérateurs : 2>
et 2>>
.
$ cat TODO-perso.txt TODO-fauxfichier.txt > TODO.txt 2> erreur.txt
$ cat erreur.txt
cat: TODO-fauxfichier.txt: Aucun fichier ou dossier de ce type
Le fonctionnement est similaire à celui des redirections de stdin
, ici c'est le fichier erreur.txt
qui reçoit le flux d'erreurs. La différence entre 2>
et 2>>
est la même que entre >
et >>
.
Méthode : Fusionner les sorties
Il est aussi possible de rediriger stdin
et stderr
ensembles dans un même fichier. On utilise toujours >
ou >>
pour la sortie standard, et on se contente de rajouter l'opérateur 2>&1
pour indiquer de rediriger stderr
vers la même destination.
$ cat TODO-perso.txt TODO-fauxfichier.txt > TODO.txt 2>&1
$ cat TODO.txt
- Faire les courses
- Déclarer mes impôts
- Réparer le pommeau de douche
cat: TODO-fauxfichier.txt: Aucun fichier ou dossier de ce type
Définition : Entrée standard
L'entrée standard d'un programme, que l'on appelle stdin
, est le flux d'informations qu'il va recevoir en entrée. C'est l'inverse de la sortie standard.
Méthode : Redirection d'un fichier vers stdin
L'opérateur <
permet de rediriger le contenu d'un fichier sur l'entrée standard d'une commande. Par exemple la commande wc
permet de récupérer le nombre de lignes, de mots, et la taille en octets d'un contenu envoyé sur son entrée standard.
$ wc < TODO-perso.txt
3 14 76
Le contenu de TODO-perso.txt
a été envoyé sur l'entrée standard de wc
, qui compte ainsi 3 lignes, 14 mots et 76 octets.
À retenir
Chaque programme se voit attribuer 3 flux par le système d'exploitation : l'entrée standard (stdin
), la sortie standard (stdout
) et la sortie d'erreurs (stderr
). Par défaut les flux de sorties sont redirigés vers le terminal, mais des opérateurs de redirection permettent de diriger ces flux dans des fichiers.