Quand on parle de redirection, on parle plus précisemment de la redirection des entrées-sorties que traitent ou engendrent les programmes. Par exemple, lorsque vous tapez des commandes au prompt de linux, vous effectuez une entrée de caractère grâce au clavier et linux vous donne une sortie en vous donnant à l'écran le résultat de votre commande. Mais l'entrée de données peut se faire autrement que par le clavier, en indiquant par exemple un fichier qui contient des données à traiter. La sortie peut aussi s'effectuer ailleurs que sur l'écran, sur l'imprimante par exemple.
Ainsi, lorsque nous parlons des entrées sorties, nous parlons aussi des périphériques de l'ordinateur. On considérera que les périphériques sont des fichiers a part entière car, sous UNIX, des fichiers spéciaux permettent l'accès aux périphériques se trouvent dans le répertoire /dev. Dans la plupart des cas ce que l'on y copie va vers le périphérique.
Mais comment faire pour rediriger une entrée ou une sortie ?
Comment faire par exemple pour que la commande cat qui affiche un fichier à l'écran, sorte plutot le fichier dans un autre fichier ou vers une imprimante ? C'est le signe > qui va nous permettre de réaliser ceci.
Il est temps de prendre un exemple....
Dans un premier cas, je veux que linux m'affiche le fichier test à l'ecran :
[delcros@mistra delcros]$ cat test
Vous allez voir s'afficher à l'écran le fichier test.
Dans un deuxième cas, je veux que linux place le fichier test dans un fichier test2 au lien de l'afficher à l'écran :
[delcros@mistra delcros]$ cat test > test2
Dans un troisième cas, je veux que linux imprime le fichier au lieu de l'afficher à l'écran :
[delcros@mistra delcros]$ cat test > /dev/lp0
Quelques constats s'imposent :
1- La sortie sur un autre fichier n'est rien d'autre avec la commande cat qu'une copie du fichier "test" en "test2". La commande cp nous permet aussi de faire cela.
2- Dans la redirection vers l'imprimante nous avons indiqué le fichier spécial /dev/lp0 qui correspond au port LPT1 où est connectée mon imprimante.
La commande cat affiche son résultat vers la sortie standard qui est le terminal.
Par défaut le terminal est la sortie standard, ce descripteur de fichier est désigné par le chiffre "1"
L'entrée standard dans un système UN*X est le clavier et est désigné par le chiffre "0".
Il existe un troisième descripteur de fichier qui est la sortie des erreurs produites par l'exécution d'une commande.
La sortie des erreurs se fait par défaut sur le terminal et est désigné par le chiffre "2".
Plusieurs types de redirection existent :
"> fichier" qui permet de rediriger le résultat d'une commande vers une sortie que nous choisissons.
"< fichier" permet de spécifier une entrée standard.
">> fichier" permet comme le signe ">" de rediriger la sortie standard vers un fichier, mais si le fichier spécifié existe déjà, la sortie sera ajouté à ce qui existe déjà dans le fichier alors qu'avec un simple "> le fichier spécifié serait écrasé.
"<> fichier" permet de spécifier un fichier comme étant en même temps l'entrée standard et la sortie standard.
"n> fichier" permet de rediriger la sortie d'un des descripteurs de fichiers vers un fichier. Par exemple, si vous souhaitez obtenir les erreurs standards dans un fichier vous n'aurez qu'à utiliser cette syntaxe :
commande 2> erreurs
"n< fichier" permet de spécifier un fichier comme étant un des descripteurs de fichier.
">&n" permet de dupliquer la sortie standard vers un des descripteurs de fichier.
"<&n" permet de dupliquer l'entrée standard depuis un des descripteurs de fichier.
"&> fichier" permet de rediriger la sortie standard et l'erreur standard vers un seul et même fichier.
À première vue, on se demande bien à quoi peut servir certaines des redirections ...
On les découvre au fur et à mesure, mais une des plus utiles est 2>&1 qui permet de rediriger les erreurs vers la sortie standard. Elle est très appréciée des utilisateurs lorsque par exemple ceux-ci n'arrivent pas à lancer l'interface X-Window. Il est alors courant de recourir à la commande suivante afin d'obliger X à placer tous ses messages dans un fichier nommé erreursX que l'on pourra consulter ensuite à loisir :
[delcros@mistra delcros]$ startx 2>&1 erreursX.tmp