1198 votes

Comment sauvegarder la sortie du terminal dans un fichier ?

Comment enregistrer la sortie d'une commande dans un fichier ?

Existe-t-il un moyen de le faire sans utiliser de logiciel ? J'aimerais savoir comment.

1433voto

Seth Points 53255

Oui c'est possible, il suffit de rediriger la sortie (AKA stdout ) dans un fichier :

SomeCommand > SomeFile.txt  

Ou si vous voulez ajouter des données :

SomeCommand >> SomeFile.txt

Si vous voulez stderr aussi bien utiliser ceci :

SomeCommand &> SomeFile.txt  

ou ceci pour ajouter :

SomeCommand &>> SomeFile.txt  

si vous voulez avoir les deux stderr et la sortie affiché sur la console y dans un fichier utilisez ça :

SomeCommand 2>&1 | tee SomeFile.txt

(Si vous ne voulez que la sortie, laissez tomber l'option 2 ci-dessus)

1393voto

Byte Commander Points 99026

Pour écrire la sortie d'une commande dans un fichier, il existe en gros 10 méthodes couramment utilisées.

Vue d'ensemble :

<em>Veuillez noter que le <code>n.e.</code> dans la colonne syntaxique signifie "non existant".</em><br>Il existe une solution, mais elle est trop compliquée pour tenir dans cette rubrique. Vous trouverez un lien utile à ce sujet dans la section Liste.

          || visible in terminal ||   visible in file   || existing
  Syntax  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   file   
==========++==========+==========++==========+==========++===========
    >     ||    no    |   yes    ||   yes    |    no    || overwrite
    >>    ||    no    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
   2>     ||   yes    |    no    ||    no    |   yes    || overwrite
   2>>    ||   yes    |    no    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
   &>     ||    no    |    no    ||   yes    |   yes    || overwrite
   &>>    ||    no    |    no    ||   yes    |   yes    ||  append
          ||          |          ||          |          ||
 | tee    ||   yes    |   yes    ||   yes    |    no    || overwrite
 | tee -a ||   yes    |   yes    ||   yes    |    no    ||  append
          ||          |          ||          |          ||
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    || overwrite
 n.e. (*) ||   yes    |   yes    ||    no    |   yes    ||  append
          ||          |          ||          |          ||
|& tee    ||   yes    |   yes    ||   yes    |   yes    || overwrite
|& tee -a ||   yes    |   yes    ||   yes    |   yes    ||  append

Liste :

  • command > output.txt

    Le flux de sortie standard sera redirigé vers le fichier uniquement, il ne sera pas visible dans le terminal. Si le fichier existe déjà, il sera écrasé.

  • command >> output.txt

    Le flux de sortie standard sera redirigé vers le fichier uniquement, il ne sera pas visible dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.

  • command 2> output.txt

    Le flux d'erreur standard sera redirigé vers le fichier uniquement, il ne sera pas visible dans le terminal. Si le fichier existe déjà, il sera écrasé.

  • command 2>> output.txt

    Le flux d'erreur standard sera redirigé vers le fichier uniquement, il ne sera pas visible dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.

  • command &> output.txt

    Les flux de sortie standard et d'erreur standard seront redirigés vers le fichier uniquement, rien ne sera visible dans le terminal. Si le fichier existe déjà, il sera écrasé.

  • command &>> output.txt

    Les flux de sortie standard et d'erreur standard seront redirigés vers le fichier uniquement, rien ne sera visible dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier

  • command | tee output.txt

    Le flux de sortie standard sera copié dans le fichier, il sera toujours visible dans le terminal. Si le fichier existe déjà, il est écrasé.

  • command | tee -a output.txt

    Le flux de sortie standard sera copié dans le fichier, il sera toujours visible dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.

  • (*)

    Bash n'a pas de syntaxe raccourcie permettant de transmettre uniquement StdErr à une deuxième commande, ce qui serait nécessaire ici en combinaison avec la commande tee à nouveau pour compléter le tableau. Si vous avez vraiment besoin de quelque chose comme ça, regardez à "Comment canaliser stderr, et non stdout ?" sur Stack Overflow pour savoir comment cela peut être fait, par exemple en échangeant des flux ou en utilisant la substitution de processus.

  • command |& tee output.txt

    Les flux de sortie standard et d'erreur standard seront copiés dans le fichier tout en restant visibles dans le terminal. Si le fichier existe déjà, il est écrasé.

  • command |& tee -a output.txt

    Les flux de sortie standard et d'erreur standard seront copiés dans le fichier tout en restant visibles dans le terminal. Si le fichier existe déjà, les nouvelles données seront ajoutées à la fin du fichier.

130voto

mars-o Points 593

Vous pouvez également utiliser tee pour envoyer la sortie vers un fichier :

command | tee ~/outputfile.txt

Une légère modification permettra d'attraper également stderr :

command 2>&1 | tee ~/outputfile.txt

ou légèrement plus court et moins compliqué :

command |& tee ~/outputfile.txt

tee est utile si vous voulez être en mesure de capturer la sortie de commande tout en la visualisant en direct .

21voto

chaos Points 25386

Vous pouvez rediriger la sortie de la commande vers un fichier :

your_command >/path/to/file

Pour ajouter la sortie de la commande à un fichier au lieu de l'écraser, utilisez :

your_command >>/path/to/file

20voto

Sean Huber Points 301

Une amélioration à envisager -

Divers scripts injecteront des codes de couleur dans la sortie, ce que vous ne voulez peut-être pas encombrer votre fichier journal.

Pour résoudre ce problème, vous pouvez utiliser le programme sed pour supprimer ces codes. Exemple :

command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X