GNU/Linux >> Tutoriels Linux >  >> Linux

Commandes Linux et Unix Tee pratiques pour l'administrateur Linux

En tant qu'administrateur Linux, il existe de nombreuses occasions où vous devez enregistrer la sortie d'une commande dans un fichier, en dehors de la simple impression de la sortie sur le terminal. Vous ne savez pas comment ? Laissez la commande Unix tee faire l'affaire.

Dans ce didacticiel, vous apprendrez de nombreuses façons d'utiliser le tee commande pour enregistrer et ajouter la sortie à un fichier.

Prêt? Lisez la suite pour faire passer vos scripts shell au niveau supérieur !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous que vous disposez d'un système Linux. Ce didacticiel utilise Ubuntu 20.04, mais vous pouvez utiliser n'importe quelle version de Linux.

Redirection des sorties de commandes (STDOUT/STDERR)

Avant d'exécuter le tee commande, il est crucial de comprendre comment fonctionnent les redirections. Sous Linux, tout est considéré comme un fichier, y compris les périphériques, les répertoires et même la sortie des commandes. Par conséquent, vous pouvez prendre la sortie d'une commande et l'utiliser comme entrée pour une autre commande (redirection de fichier).

Il existe différents types de redirections, et chacune a un but. Mais lors de l'exécution du tee commande, vous utilisez principalement deux types de redirections différents :

  • Redirection de sortie standard (STDOUT) (>) – La sortie par défaut d'une commande.
  • Standard Error Redirect (STDERR)(2>) – Message d'erreur généré par une commande et affiché sur votre écran.

Les deux redirections prennent et enregistrent les sorties des commandes dans un fichier, mais vous verrez comment fonctionnent les redirections ci-dessous.

Exécutez le ls commande sans arguments pour lister tout le contenu (fichiers et dossiers) de votre répertoire de travail.

ls

Ci-dessous se trouve le STDOUT de la commande ls.

Ensuite, exécutez la commande ci-dessous pour répertorier volontairement le contenu d'un répertoire (fake_directory ) qui n'existe pas.

ls fake_directory

Vous recevrez un message d'erreur indiquant que le répertoire n'existe pas. Cette sortie est le STDERR de la commande ls.

Enregistrement des sorties de commandes dans un fichier

Supposons que vous souhaitiez enregistrer le STDOUT du ls commande dans un fichier au lieu de simplement imprimer la sortie sur le terminal. Dans ce cas, l'opérateur de redirection (> ) est pratique.

1. Exécutez la commande suivante pour enregistrer/rediriger (>) le STDOUT de la commande ls vers un fichier nommé ls_stdout.txt. Étant donné que cette commande enregistre la sortie dans un fichier, vous n'obtiendrez pas de sortie sur votre terminal.

ls > ls_stdout.txt

2. Maintenant, exécutez la commande cat ci-dessous pour afficher le contenu de votre fichier ls_stdout.txt.

cat ls_stdout.txt

3. De même, exécutez la commande suivante pour enregistrer le STDERR (2>) de la commande ls dans un fichier nommé ls_stderr.txt. Encore une fois, vous n'obtiendrez pas de sortie sur votre terminal puisque la sortie est enregistrée dans un fichier.

ls fake_directory 2> ls_stderr.txt

4. Maintenant, exécutez la commande cat ci-dessous pour voir le contenu du fichier ls_stderr.txt.

cat ls_stderr.txt

Ci-dessous, vous pouvez confirmer que le STDERR de la commande ls a été enregistré dans ls_stderr.txt fichier.

5. Exécutez la commande ci-dessous pour enregistrer à la fois (&>) STDOUT et STDERR de la commande ls dans un fichier nommé ls_alloutput.txt.

Pourquoi se contenter d'un seul quand on peut avoir les deux, n'est-ce pas ? En règle générale, vous souhaiterez peut-être stocker les deux sorties dans le même fichier à des fins de dépannage ou de journalisation.

ls &> ls_alloutput.txt

6. Enfin, exécutez la commande cat suivante pour afficher le contenu du fichier ls_alloutput.txt

cat ls_alloutput.txt

Connexion de programmes avec des tuyaux

Outre la simple sauvegarde des sorties dans un fichier, vous pouvez accomplir beaucoup plus en utilisant des canaux, comme la connexion de programmes. Dans des scénarios réels, vous utiliserez très probablement des canaux en conjonction avec des redirections de fichiers et le tee commande.

Un tuyau (| ) est un mécanisme de communication inter-processus qui vous permet de connecter la sortie d'une commande à l'entrée d'une autre commande. En d'autres termes, le tube prend le STDOUT d'un processus et connecte ce STDOUT au STDIN d'un autre processus.

Exécutez la commande grep suivante pour rechercher toutes les lignes contenant le mot tcp dans le fichier /etc/services.

grep tcp /etc/services

Maintenant, exécutez le même grep commande ci-dessous. Mais cette fois, redirigez la sortie du grep ci-dessus commande au less commande pour afficher les résultats de la recherche un écran à la fois.

grep tcp /etc/services | less

Comment fonctionne la tuyauterie ? Comme vous pouvez le voir ci-dessous, lorsque vous utilisez le caractère pipe (|), la sortie du grep commande est stockée dans un emplacement temporaire. La sortie est ensuite passée en entrée au less commande.

Combiner le tee Unix (tee ) Commande, canaux et redirections

Jusqu'à présent, vous avez appris comment le tee la commande, les canaux et les redirections fonctionnent. Mais pourquoi ne pas utiliser les trois ensemble pour un meilleur contrôle des sorties de commande ?

Vous utilisiez auparavant la tuyauterie avec des redirections, et c'est un pas énorme. Cette fois, vous utiliserez la tuyauterie et le tee commande pour envoyer la sortie d'une commande à une autre pour un traitement ultérieur.

Exécutez la commande ci-dessous pour envoyer la sortie du ls commande à l'écran et le result.txt dossier. La sortie de ls est ensuite redirigé vers le grep commande pour filtrer uniquement les lignes contenant le mot ip .

ls | grep 'ip' | tee result.txt

Maintenant, exécutez le cat commande pour vérifier le contenu du résultat fichier .txt.

cat result.txt

Ajouter la sortie aux fichiers existants

Vous avez précédemment enregistré la sortie des commandes dans un fichier, mais pouvez-vous mettre à jour un fichier existant au lieu d'en créer un nouveau ? Oui! Laissez le tee commande faire la magie.

Par défaut, le tee La commande écrase le contenu d'un fichier existant. Mais dans de nombreux cas, vous souhaiterez peut-être ajouter la sortie d'une commande à un fichier existant. Comme la journalisation de tous les événements du serveur en temps réel dans un fichier journal.

Avec cette fonctionnalité, le fichier journal est ajouté avec de nouvelles entrées chaque fois qu'un événement se produit sur le serveur.

Exécutez la commande ci-dessous pour prendre la sortie de la commande ls -lR et ajouter la sortie (tee -a) au result.txt contenu du fichier. Cette commande ne fournit pas de sortie puisque vous envoyez la sortie de la commande dans un fichier.

ls -lR | tee -a result.txt

Maintenant, exécutez le cat commande pour vérifier le contenu du result.txt fichier.

cat result.txt

Comme vous pouvez le voir ci-dessous, la sortie du ls -lR la commande est ajoutée à la fin du result.txt fichier.

Utiliser le tee Commande en conjonction avec sudo

De nombreuses commandes nécessitent des privilèges élevés ou sudo accès, comme effectuer des modifications à l'intérieur du /etc annuaire. La question est, est-ce que le tee la commande fonctionne main dans la main avec sudo ? Oui !

L'ajout de sudo à la commande tee permet à un utilisateur non root d'écrire des données dans un fichier que seul un utilisateur root peut modifier. Par exemple, vous souhaitez activer l'utilisateur ata pour écrire des données dans /etc/ata.conf dossier. Mais, en même temps, vous ne voulez pas donner à l'utilisateur ata privilèges root.

1. Connectez-vous à votre ordinateur avec un utilisateur non root.

2. Ensuite, exécutez la commande suivante sans sudo pour écrire les données texte dans le fichier /etc/ata.conf.

echo "data" > tee /etc/ata.conf

Comme vous pouvez le voir ci-dessous, vous obtiendrez une erreur d'autorisation refusée depuis ata l'utilisateur n'a pas accès en écriture à /etc/ata.conf fichier.

3. Exécutez la même commande ci-dessous qu'à l'étape 2 pour écrire les données texte dans le fichier /etc/ata.conf. Mais cette fois, ajoutez la commande sudo à la commande tee. Cela permet à l'utilisateur ata pour terminer la commande (élevée) en tant qu'utilisateur non root.

echo "data" | sudo tee /etc/ata.conf

Enfin, exécutez la commande cat ci-dessous pour vérifier que le ata l'utilisateur peut écrire le texte "data" dans /etc/ata.conf.

cat /etc/ata.conf

Conclusion

Tout au long de ce didacticiel, vous avez appris à utiliser la commande Unix tee pour écrire des données dans des fichiers et comment cela fonctionne en conjonction avec d'autres commandes. À ce stade, vous devriez disposer d'une puissante combinaison de commandes que vous pouvez utiliser pour gérer les entrées et les sorties dans l'environnement de ligne de commande Linux.

Vous êtes comme un chef sushi, contrôlant complètement les ingrédients et les proportions qui entrent dans chaque plat. Vous pouvez personnaliser chaque commande à la volée en fonction des goûts de votre client. La seule limite est votre imagination (et peut-être la taille de la fenêtre de votre terminal).

Maintenant, lancez-vous et créez d'étonnantes concoctions en ligne de commande !


Linux
  1. 8 conseils pour la ligne de commande Linux

  2. Commandes Bash bang :une astuce incontournable pour la ligne de commande Linux

  3. 5 exemples pratiques de Head Command sous Linux

  4. 5 exemples pratiques de la commande dd sous Linux

  5. Quel est l'équivalent de la commande Linux File pour Windows ?

Les 50 commandes IP Linux utiles pour les administrateurs réseau

5 commandes pour afficher le contenu d'un fichier en ligne de commande Linux

Commande AWK sous Linux/Unix

Un guide pratique pour la commande chroot sous Linux

Commande Unix LS :15 exemples pratiques

UNIX / Linux :7 exemples pratiques de commandes PS pour la surveillance des processus