Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

Redirection de la sortie standard

La redirection d'E/S nous permet de redéfinir la destination de la sortie standard. Pour rediriger la sortie standard vers un autre fichier au lieu de l'écran, nous utilisons l'opérateur de redirection « > » suivi du nom du fichier. Pourquoi voudrions-nous faire cela ? Il est souvent utile de stocker la sortie d'une commande dans un fichier. Par exemple, nous pourrions dire au shell d'envoyer la sortie du ls commande au fichier ls-sortie.txt au lieu de l'écran :


[moi@linuxbox ~]$ ls -l /usr/bin > ls-output.txt

[moi@linuxbox ~]$ ls -l /usr/bin > ls-output.txt


Ici, nous avons créé une longue liste des / usr / bin répertoire et envoyé les résultats dans le fichier

ls-sortie.txt. Examinons la sortie redirigée de la commande :


[moi@linuxbox ~]$ ls -l ls-sortie.txt

-rw-rw-r-- 1 moi moi 167878 2016-02-01 15:07 ls-output.txt

[moi@linuxbox ~]$ ls -l ls-sortie.txt

-rw-rw-r-- 1 moi moi 167878 2016-02-01 15:07 ls-output.txt


Bon; un beau et gros fichier texte. Si nous regardons le fichier avec moins, nous verrons que le fichier

ls-output.txt contient bien les résultats de notre commande ls :


[moi@linuxbox ~]$ moins ls-output.txt

[moi@linuxbox ~]$ moins ls-output.txt


Maintenant, répétons notre test de redirection, mais cette fois avec une torsion. Nous allons remplacer le nom du répertoire par un nom qui n'existe pas :



[moi@linuxbox ~]$ ls -l /bin/usr > ls-output.txt

ls : ne peut pas accéder à /bin/usr : aucun fichier ou répertoire de ce type

[moi@linuxbox ~]$ ls -l /bin/usr > ls-output.txt

ls : ne peut pas accéder à /bin/usr : aucun fichier ou répertoire de ce type


Nous avons reçu un message d'erreur. Cela a du sens puisque nous avons spécifié le répertoire inexistant /bin/usr, mais pourquoi le message d'erreur s'est-il affiché à l'écran plutôt que d'être redirigé vers le fichier ls-sortie.txt? La réponse est que le ls programme n'envoie pas ses messages d'erreur à la sortie standard. Au lieu de cela, comme la plupart des programmes Unix bien écrits, il envoie ses messages d'erreur à l'erreur standard. Comme nous n'avons redirigé que la sortie standard et non l'erreur standard, le message d'erreur était toujours envoyé à l'écran. nous verrons comment

Redirection de la sortie standard


pour rediriger l'erreur standard en une minute, mais d'abord, regardons ce qui est arrivé à notre fichier de sortie :



[moi@linuxbox ~]$ ls -l ls-sortie.txt

-rw-rw-r-- 1 moi moi 0 2016-02-01 15:08 ls-output.txt

[moi@linuxbox ~]$ ls -l ls-sortie.txt

-rw-rw-r-- 1 moi moi 0 2016-02-01 15:08 ls-output.txt


Le fichier a maintenant une longueur nulle ! En effet, lorsque nous redirigeons la sortie avec l'opérateur de redirection « > », le fichier de destination est toujours réécrit depuis le début. Depuis notre ls commande n'a généré aucun résultat et seulement un message d'erreur, l'opération de redirection a commencé à réécrire le fichier puis s'est arrêtée à cause de l'erreur, entraînant sa troncature. En fait, si jamais nous avons besoin de tronquer un fichier (ou de créer un nouveau fichier vide), nous pouvons utiliser une astuce comme celle-ci :



[moi@linuxbox ~]$ > ls-sortie.txt

[moi@linuxbox ~]$ > ls-sortie.txt


Le simple fait d'utiliser l'opérateur de redirection sans qu'aucune commande ne le précède tronque un fichier existant ou crée un nouveau fichier vide.

Alors, comment pouvons-nous ajouter une sortie redirigée à un fichier au lieu d'écraser le fichier depuis le début ? Pour cela, nous utilisons l'opérateur de redirection « >> », comme ceci :



[moi@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt

[moi@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt


L'utilisation de l'opérateur « >> » entraînera l'ajout de la sortie au fichier. Si le fichier n'existe pas déjà, il est créé comme si l'opérateur ">" avait été utilisé. Mettons-le à l'épreuve :



[moi@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [moi@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [moi@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [moi@linuxbox ~]$ ls -l ls-sortie.txt

-rw-rw-r-- 1 moi moi 503634 2016-02-01 15:45 ls-output.txt

[moi@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [moi@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [moi@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [moi@linuxbox ~]$ ls -l ls-sortie.txt

-rw-rw-r-- 1 moi moi 503634 2016-02-01 15:45 ls-output.txt


Nous avons répété la commande trois fois, ce qui a donné un fichier de sortie trois fois plus volumineux.


Meilleur système d'exploitation Cloud Computing chez OnWorks :