Sites


Introduction à la ligne de commande

CommandLineIntro: StandardFiles

Toujours plus de redirection

Comment fonctionnent les tuyaux ? Ils utilisent les trois canaux de communication dont disposent toutes les commandes exécutée.

stdin (entrée standard/standard input) par défaut ce canal transmet à la commande ce qui est tapé au clavier. L'utilisation "<" suivi d'un nom de fichier permet au programme de recevoir ses entrées à partir d'un fichier.

stdout (sortie standard/standard output) est par défaut affiché sur votre écran. ">" suivi d'un nom de fichier enverra le résultat de la commande dans ce fichier, sur-écrivant tout ce que le fichier contient,  ou, si ">>" est utilisé, le résultat sera ajouté à la fin du fichier.

stderr (erreur standard/standard error)  est une sortie alternative. Les programmes l'utilisent pour afficher les messages d'erreur. Ainsi vous pouvez voir les messages d'erreur à l'écran même si vous avez redirigé les résultats vers un fichier. Voici un exemple :

$ ls *.bak > listfile
ls: *.bak: No such file or directory

Ici, nous voulions une liste de tous les fichiers se terminant par .bak. Cependant, le répertoire n'en contient aucun. Si ls envoyait son message d'erreur sur la sortie standard (qui est dans ce cas redirigée vers un fichier), nous ne pourrions savoir qu'il a un problème sans regarder le contenu de listfile. Grace au fait que ls envoie son message vers erreur standard, nous le voyons. Le message d'erreur commence par le nom du programme (ls) suivi d'un double point et du message.

Un tuyau (pipe) redirige simplement la sortie standard du premier programme vers l'entrée standard du second :

$ ls *.bak | more

Parfois, nous voulons non seulement garder le résultat d'un commande dans un fichier, mais aussi le voir à l'écran durant l'exécution du programme.  La commande tee fait exactement cela :

$ ls -lR / | tee allMyFiles

retourne une liste complète et détaillée de votre système de fichiers, sauvegardée dans allMyFiles. Cette commande prend un certain temps pour s'exécuter; tee vous évite de regarder un écran sans vie en vous demandant si quelque chose se passe.

Tout programme peut ouvrir beaucoup de fichiers, et à chaque fichier ouvert est associé un nombre appelé le descripteur de fichier (file descriptor) qui n'a de signification que pour ce programme. Les trois premiers nombres sont toujours réservés pour les descripteurs de fichier que nous venons de décrire.

 stdin  0
 stdout  1
 stderr  2

Rediriger stderr

Lorsque nous redirigeons stdout comme nous l'avons fait ci-dessus, les messages d'erreur continuent d'être affiché à l'écran.  Par exemple
$ ls /nosuchplace > /dev/null
ls: /nosuchplace: No such file or directory
$

Pour rediriger stderr une forme plus générale de redirection doit être utilisée, elle utilise les numéros de fichiers mentionnés dans la section précédente, et ressemble à ceci.

$ ls /nosuchplace 2>/tmp/errors
$

Cette commande redirige le message d'erreur envoyé au numéro de fichier 2 (stderr) vers le fichier /tmp/errors

Ceci nous permet d'introduire un redirection plus complexe, qui redirige les sorties et erreurs standards vers le même fichier :

$ ls *.bak > listfile 2>&1

Le caractère & dans cette commande n'a rien à voir avec la mise en arrière plan de la commande. & ici doit être mis directement après le caractère >, et il redirige le numéro de fichier 2 vers le numéro de fichier 1.

Dans le cas d'un tuyau, mettez cette redirection juste devant le tuyau :

$ ls *.bak 2>&1 | more

Ajouter des descripteurs

Il est pratique parfois d'ouvrir d'autres fichiers et de les remplir peu à peu. Il est possible de faire cela en utilisant la redirection et exec.

$ exec 3>/tmp/thirdfile
$ exec 4>/tmp/fourthfile
$ echo drib >&3
$ echo drab >&4
$ echo another drib >&3
$ echo another drab >&4
$ exec 3>&-
$ exec 4>&-

Les deux premières commandes ouvrent deux nouveaux descripteurs de fichier, 3 et 4.  Il est alors possible d'y ajouter du texte (avec la commande echo), d'y rediriger le résultat de programmes, etc. en utilisant >&3 ou >&4.  Enfin, ils peuvent être fermés en utilisant les syntaxes 3>&- et 4>&-.

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.