Si vous avez déjà utilisé le tuyau et redirigé par shell sur Linux/Unix Vous aurez probablement aussi parfois besoin de tirer parti de la commande help tee.
Que fait le té?
Commandez comme
ls
Affichera Contenu du répertoire en cours. En d'autres termes, c'est Affiche ces contenus Votre moniteur par défaut se trouve sur la sortie standard (sortie standard), qui est généralement affichée à l'écran, ou pour être plus précis.
Commandez comme
ls > file123
Il affichera quelque chose sur l'écran. C'est parce que le signal > Redirige chaque sortie dans un fichier au lieu de l'afficher Stdout. Sera maintenant rempli file123 Avec le contenu déjà affiché à l'écran.
Pour afficher le contenu de votre répertoire à l'écran et en tant que caractère de ce fichier, vous pouvez Utilisez deux choses. Avec tee, vous pouvez faire toutes ces choses simultanément.
ls | tee file123
Pourquoi utiliser Tee si vous pouvez exécuter une commande similaire deux fois?
Dans l'exemple ci-dessus, vous n'avez évidemment pas besoin de tee Si vous pouvez exécuter la commande normalement, exécutez-la à nouveau et redirigez la sortie vers un fichier. Cependant, vous rencontrerez des situations où la sortie est solitaire. Imaginez un scénario dans lequel vous essayez de diagnostiquer le problème. Vous lancez des diagnostics | tee error.log. Les erreurs que vous obtenez peuvent être uniques. Vous voulez les afficher à l'écran pour voir ce qui se passe pendant que vous testez des choses. Mais vous souhaitez également enregistrer ces erreurs dans un fichier afin de pouvoir les relire ultérieurement ou coller le résultat dans un forum de discussion et demander aux gens à ce sujet.
Il existe un autre poste, souvent rencontré, et vous devrez tee , C’est-à-dire que vous souhaitez écrire une commande de sortie dans un emplacement où l’utilisateur peut uniquement lire ou écrire la routine. Cela ne fonctionnera pas.
/sbin/blkid > /root/somefile
Après cela, vous pouvez penser: "Bien sûr, utilisez simplement sudo! "Et vous serez surpris que cela ne fonctionne pas non plus:
sudo blkid > /root/somefile
C'est parce qu'après l'exécution sudo blkid , Vous êtes toujours connecté en tant qu’utilisateur normal et non principal. Il essaie shell (Habituellement bash) Ecrire à / root / un fichier Utilisation d'informations d'identification d'utilisateur normales. Pour contourner ce problème, vous pouvez utiliser tee:
/sbin/blkid | sudo tee /root/somefile
Ajouter du texte et rediriger les erreurs
tee C'est utile mais simple, c'est essentiel | té un fichier Assez souvent. Cependant, il existe deux scénarios que vous pouvez rencontrer et nécessiter ces conseils.
La première chose à savoir est que tee Par défaut, il écrase un fichier. Si tu cours
ls | tee somefile
Et puis
ls /tmp | tee somefile
La deuxième commande écrasera le contenu de certains fichiers et vous ne verrez que le contenu de la dernière commande exécutée. Pour changer ce comportement, vous pouvez faire tee Ajoute du texte au lieu d'écrire. Pour ce faire, utilisez simplement l'interrupteur à bascule -a.
ls | tee -a somefile
La deuxième chose que vous devez savoir est que toutes les sorties ne sont pas identiques. Les messages d'erreur sont traités différemment, et bien qu'ils apparaissent à l'écran, ils ne sont pas considérés Stdout Donc, il ne sera pas observé par tee. (Considéré stderrVoici un exemple de grep.
grep -r L2TP /etc | tee somefile
Quelque chose comme l'image suivante sera affichée.
Les messages d'autorisation refusés sont écrits dans stderr. La seule chose écrite sur stdout est le texte en surbrillance. Pour cette raison, vous remarquerez que le contenu de "un fichier"Est montré dans l'image ci-dessous.
Dans ce cas, où il est utilisé grep Pour rechercher du texte, il est utile de ne pas rediriger les messages d'erreur vers le fichier. Cela ne remplit que le fichier avec des fichiers inutiles. Vous voulez juste voir les résultats trouvés. Mais lorsque vous avez besoin de messages d'erreur, utilisez 2> et 1 , Qui redirige stderr à Stdout.
grep -r L2TP /etc 2>&1 | tee somefile
Avec cette commande, vous remarquerez que un fichier Maintenant, il contient également des messages d'erreur.
Conclusion
Espérons que ce tutoriel couvrira tout ce dont vous avez besoin pour tirer le meilleur parti de la commande tee. Mais si vous rencontrez une situation sur laquelle vous tombez sur tee , S'il vous plaît laissez un commentaire ci-dessous, et nous pourrons peut-être aider.