Comment utiliser la commande tee dans un système Linux

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.

Comment utiliser la commande tee sous Linux

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.

Comment utiliser la commande tee sous Linux

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.

Comment utiliser la commande tee sous Linux

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.

Aller au bouton supérieur