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éfinitionSortie 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éfinitionSortie 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.

ExempleOpérateurs de redirection de stdin

On peut rediriger le résultat de la commande cat.

1
$ cat TODO-perso.txt 
2
- Faire les courses
3
- Déclarer mes impôts
4
- Réparer le pommeau de douche
5
$ cat TODO-boulot.txt 
6
- Mettre en place les sauvegardes des postes
7
- Déployer le nouveau site web
8
- Poser les jours de congés de cet été
9
$ cat TODO-perso.txt TODO-boulot.txt > TODO.txt
10
$ cat TODO.txt 
11
- Faire les courses
12
- Déclarer mes impôts
13
- Réparer le pommeau de douche
14
- Mettre en place les sauvegardes des postes
15
- Déployer le nouveau site web
16
- 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

1
$ cat TODO-perso.txt TODO-fauxfichier.txt > TODO.txt
2
cat: TODO-fauxfichier.txt: Aucun fichier ou dossier de ce type
3
$ cat TODO.txt 
4
- Faire les courses
5
- Déclarer mes impôts
6
- 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éthodeOpé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>>.

1
$ cat TODO-perso.txt TODO-fauxfichier.txt > TODO.txt 2> erreur.txt
2
$ cat erreur.txt
3
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éthodeFusionner 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.

1
$ cat TODO-perso.txt TODO-fauxfichier.txt > TODO.txt 2>&1
2
$ cat TODO.txt 
3
- Faire les courses
4
- Déclarer mes impôts
5
- Réparer le pommeau de douche
6
cat: TODO-fauxfichier.txt: Aucun fichier ou dossier de ce type

DéfinitionEntré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éthodeRedirection 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.

1
$ wc < TODO-perso.txt 
2
 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.