redirections et descripteurs de fichiers
modifié le 02/09/2007 00:27:41
il arrive que nous ayons besoin de récupérer la sortie d'un commande dans un fichier, soit pour sauvegarder un état courant de la machine, soit pour présenter le résultat à d'autres (mail, traitement de texte...)
Unix propose un mécanisme de redirection dont s'est inspiré MS/DOS et que l'on retrouve dans la ligne de commande des Windows actuels
ps aux > processus
redirige l'affichage de ps aux vers le fichiers proc et on peut s'en convaincre en examinant le contenu du fichier par un cat
Unix ne s'arrête pas là, il peut faire mieux avec les descripteurs de fichier
Unix prétend que tout est fichier, la console comme la RS232 (un vieux truc qui connectait les vieux terminaux aux vieux ordinateurs...) et, parmi les fichiers de base, il y en a trois d'une extrême importance lorsqu'on travaille en ligne de commande:
stdin, associée par défaut au clavierstdout, associée par défaut à l'écran du terminalstderr, associée par défaut à l'écran du terminal
stdout, c'est là où s'affiche la sortie normale, stderr, c'est là où s'affichent les messages d'erreur, ce qui se fait habituellement sur l'écran
un des aspects géniaux d'Unix, à l'époque de sa création, c'est qu'il est possible de séparer, d'orienter ces sorties à notre gré: console, fichier, périphérique spécial ( RS232, par exemple)...
la redirection se fait donc grâce à >, la redirection d'un descripteur particulier se fait avec N> où N est le descripteur en question
pour rediriger les erreurs d'un find, il faut faire:
find /etc -type f -exec grep -H "root" {} \; 2> find.log