User Tools

Site Tools


debian:linux-rediriger-sortie

LINUX : Les Redirections d'entrée/sortie

Comportement par défaut

Chaque commande a :

  • une entrée standard,
  • une sortie standard,
  • une sortie d'erreur.

Par défaut, l'entrée standard est le clavier, la sortie standard est l'écran, et la sortie d'erreur est aussi l'écran.

C'est sur le clavier que l'on tape; ce que l'on tape et ce que renvoient les programmes s'inscrit à l'écran ; les messages d'erreur renvoyés par les programmes s'affichent à l'écran.

Mais il ne s'agit là que du comportement par défaut, et pas d'un comportement obligatoire. On peut orienter différemment les programmes.

Rediriger la sortie : >

Parfois il peut être nécessiare de rediriger la sortie d'une commande vers un fichier.

Par exemple lorqu'on exécute une commande très simplement dans la crontab, si celle-ci renvoie une information ou une erreur, on ne la verra pas apparaître dans la console. C'est le programme cron qui exécute la commande et le résultat de la commande est envoyé par e-mail.

47 15 * * * touch /home/mateo21/fichier.txt >> /home/mateo21/cron.log
   

Tous les messages seront désormais ajoutés à la fin de cron.log. Tous ? Non car les messages d'erreurs ne sont pas redirigés !

Rediriger les orties et les erreurs

Il est parfois utile de rediriger la sortie standard et la sortie d'erreur vers un même endroit. Pour cela, on utilise le motif 2>&1 avant la redirection.

Fonction Bourne shell (sh, bash) Z-shell (zsh)
Redirige la sortie d'erreur (2) et la sortie standard (1) sur l'entrée de la commande suivante 2>&1 | |&
Redirige la sortie d'erreur et la sortie standard vers fichier >fichier 2>&1 >& fichier
Redirige la sortie d'erreur et la sortie standard à la fin de fichier »fichier 2>&1 »& fichier
  47 15 * * * touch /home/mateo21/fichier.txt >> /home/mateo21/cron.log 2>&1

Cette fois, tout sera envoyé dans cron.log : les messages et les erreurs.

Si on ne veux pas du tout récupérer ce qui est affiché

Il suffit de rediriger dans /dev/null (le fameux « trou noir » du système). Tout ce qui est envoyé là-dedans est immédiatement supprimé.

47 15 * * * touch /home/mateo21/fichier.txt > /dev/null 2>&1

Rediriger l'entrée : <

On peut aussi rediriger l'entrée standard d'une commande (caractère « < »). La commande lira alors le fichier au lieu du clavier. Exemple :

elm leroy < /home/mateo21/fichier.txt

envoie par mail à Xavier Leroy fichier.txt.

Connecter la sortie d'une commande sur l'entrée d'une autre : |

Il est fastidieux de passer les commandes à la suite les unes des autres :

ls -l > foo
less < foo
rm foo

On peut se passer du fichier intermédiaire (foo dans notre exemple) grâce à un pipe (caractère « | »). Un pipe connecte directement la sortie standard d'une commande sur l'entrée standard d'une autre commande. Exemple : pour afficher page par page la liste des fichiers du répertoire courant, faire

ls -l | less
debian/linux-rediriger-sortie.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1