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.
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.
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)
Pour écrire la sortie d'une commande dans un fichier, il existe en gros 10 méthodes couramment utilisées.
<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
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.
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 .
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
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.