Dernière mise-à-jour :

103.4 - Utiliser des tubes et des redirections (4/60)

Redirections

Votre dialogue avec le système Linux utilise des canaux d’entrée et de sortie. On appelle le clavier, le canal d’entrée standard et l’écran, le canal de sortie standard :

Autrement dit, en tapant une commande sur le clavier, vous voyez le résultat de cette commande à l’écran.

Parfois, cependant il est utile de re-diriger le canal de sortie standard vers un fichier. De cette façon, le résultat d’une commande telle free peut être stocké dans un fichier pour une consultation ultérieure :

Cet effet est obtenu en utilisant une redirection :

[trainee@centos7 ~]$ pwd
/home/trainee
[trainee@centos7 ~]$ cd training
[trainee@centos7 training]$ free > file
[trainee@centos7 training]$ cat file
total used free shared buff/cache available
Mem: 500780 192692 38916 4824 269172 260472
Swap: 2096124 0 2096124

Si le fichier cible n’existe pas, il est créé et son contenu sera le résultat de la commande free.

Par contre si le fichier existe déjà, il sera écrasé :

[trainee@centos7 training]$ date > file
[trainee@centos7 training]$ cat file
Mon 28 Nov 15:48:09 CET 2016

Pour ajouter des données supplémentaires au même fichier cible, il faut utiliser une double redirection :

[trainee@centos7 training]$ free >> file
[trainee@centos7 training]$ cat file
Mon 28 Nov 15:48:09 CET 2016
total used free shared buff/cache available
Mem: 500780 192792 38516 4824 269472 260376
Swap: 2096124 0 2096124

De cette façon, la date du jour sera rajoutée à la fin de votre fichier après les informations de la commande free.

Important : Notez que la sortie standard ne peut être redirigée que dans une seule direction.

Les canaux d’entrées et de sorties sont numérotés :

0 = Le Canal d’entrée Standard

1 = Le Canal de Sortie Standard

2 = Le Canal d’erreur

La commande suivante créera un fichier nommé errorlog qui contient les messages d’erreur de l’exécution de la commande rmdir :

[trainee@centos7 training]$ cd ..
[trainee@centos7 ~]$ rmdir training/ 2>errorlog
[trainee@centos7 ~]$ cat erreurlog
rmdir: failed to remove ‘training/’: Directory not emptyy

En effet l'erreur est générée parce que le répertoire training n'est pas vide.

Nous pouvons également réunir des canaux. Pour mettre en application ceci, il faut comprendre que le shell traite les commandes de gauche à droite.

Dans l’exemple suivant, nous réunissons le canal de sortie et le canal d’erreurs :

[trainee@centos7 ~]$ free > file 2>&1

La syntaxe 2>&1 envoie la sortie du canal 2 au même endroit que le canal 1, à savoir le fichier dénommé file.

Il est possible de modifier le canal d'entrée standard afin de lire des informations à partir d’un fichier. Dans ce cas la redirection est obtenue en utilisant le caractère < :

$ wc -w < erreurlog [Entrée]

Dans cet exemple la commande wc compte le nombre de mots ( -w ) dans le fichier errorlog et l’affiche à l’écran :

[trainee@centos7 ~]$ wc -w < errorlog
8

D'autres redirections existent :

Caractères	Définition
&>	Rediriger les canaux 1 et 2 au même endroit
<<	Permet d'utiliser le texte taper ensuite en tant que entrée standard. Par exemple programme << EOF utilisera le texte taper après en tant qu'entrée standard jusqu'à l'apparition de EOF sur une ligne seule.
<>	Permet d'utiliser le fichier specifié en tant que entrée standard et sortie standard

Tubes

Il est aussi possible de relier des commandes avec un tube | .

Dans ce cas, le canal de sortie de la commande à gauche du tube est envoyé au canal d’entrée de la commande à droite du tube :

$ ls | wc -w [Entrée]

Cette commande, lancée dans votre répertoire personnel, prend la sortie de la commande ls et demande à la commande wc de compter le nombre de mots inclus dans la sortie de ls :

[trainee@centos7 ~]$ ls | wc -w
17

Important : Il est à noter qu'il est possible de relier plusieurs tubes dans la même commande.

Rappelez-vous que la sortie standard ne peut être redirigée que dans une seule direction. Afin de pouvoir rediriger la sortie standard vers un fichier et la visualiser à l'écran, nous devons utiliser la commande tee avec un pipe :

[trainee@centos7 ~]$ date | tee file1
Mon 28 Nov 16:14:24 CET 2016
[trainee@centos7 ~]$ cat file1
Mon 28 Nov 16:14:24 CET 2016

Cette même technique nous permet de créer deux fichiers :

$ date | tee fichier1 > fichier2 [Entrée]

[trainee@centos7 ~]$ date | tee fichier1 > fichier2
[trainee@centos7 ~]$ cat fichier1
Mon 28 Nov 16:15:57 CET 2016
[trainee@centos7 ~]$ cat fichier2
Mon 28 Nov 16:15:57 CET 2016

Important : Par défaut la commande tee écrase le fichier de destination. Pour ajouter des données supplémentaires au même fichier cible, il convient d'utiliser l'option -a de la commande tee.

<html>

Copyright © 2004-2017 Hugh Norris.<br><br> <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”><img alt=“Licence Creative Commons” style=“border-width:0” src=“http://i.creativecommons.org/l/by-nc-nd/3.0/fr/88x31.png” /></a><br />Ce(tte) oeuvre est mise à disposition selon les termes de la <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”>Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 France</a>.

</html>