Aperçu
La commande `tee` intercepte les données au milieu d'un pipeline, les enregistre dans un fichier tout en les transmettant à la commande suivante. L'option `-a` préserve le contenu existant du fichier et ajoute le nouveau contenu à la fin, tandis que l'option `-i` empêche le processus `tee` d'être terminé de force par une interruption utilisateur, permettant ainsi une journalisation stable.
Fonctionnalités principales
Les fonctionnalités principales de cette combinaison sont les suivantes :
- Écrit simultanément le contenu de l'entrée standard sur la sortie standard et sur le fichier spécifié
- Ajoute le contenu au fichier au lieu de l'écraser (option -a)
- Ignore les signaux d'interruption (SIGINT) (option -i)
- Adapté à la journalisation stable des processus de longue durée
Options principales
La commande `tee` offre diverses options, mais nous allons ici décrire les options clés utilisées dans la combinaison `tee -a -i`.
Contrôle de la sortie fichier et du comportement
Commande générée :
Essayez de combiner les commandes.
Description:
`tee` Exécute la commande.
Essayez d'exécuter virtuellement les commandes avec l'IA en combinant les options ci-dessus.
Exemples d'utilisation
Voici des exemples d'utilisation concrète de la commande `tee -a -i`.
Ajouter la sortie de commande à un fichier journal
ls -l | tee -a -i output.log
Ajoute la sortie de la commande `ls -l` au fichier `output.log` tout en l'affichant simultanément sur le terminal. Même en appuyant sur Ctrl+C, `tee` ne se terminera pas.
Enregistrer en continu les résultats d'exécution de script
while true; do echo "$(date): Running..."; sleep 1; done | tee -a -i script_log.txt
Ajoute en continu la sortie d'un script en boucle infinie au fichier `script_log.txt`. Grâce à l'option `-i`, `tee` n'est pas affecté par les signaux d'interruption.
Journalisation de la sortie des commandes sudo
sudo sh -c 'apt update && apt upgrade -y | tee -a -i /var/log/apt_updates.log'
Lors de l'enregistrement de la sortie d'une commande exécutée avec `sudo` dans un fichier, il est plus sûr d'utiliser `sh -c` pour que `tee` reçoive la sortie de la commande réelle et non celle de `sudo` lui-même.
Conseils et précautions
Voici des conseils utiles et des points à considérer lors de l'utilisation de la combinaison `tee -a -i`.
Conseils d'utilisation
- **Journalisation des tâches en arrière-plan** : Pour enregistrer la sortie des processus s'exécutant en arrière-plan pendant une longue période, vous pouvez utiliser `nohup command | tee -a -i logfile.log &` pour établir un environnement de journalisation stable.
- **Résolution des problèmes de permissions** : L'utilisation de `sudo command | tee file` peut entraîner des problèmes de permissions d'écriture de fichier car `tee` s'exécute avec les privilèges de l'utilisateur ordinaire. Dans ce cas, vous devez exécuter `tee` lui-même avec `sudo`, par exemple avec `sudo sh -c 'command | tee -a -i file'` ou `command | sudo tee -a -i file`.
- **Débogage** : Lorsque vous souhaitez vérifier la sortie d'une étape intermédiaire dans un pipeline complexe, vous pouvez l'utiliser pour le débogage avec `command1 | tee -a -i debug.log | command2`.
Précautions
- **Gestion de la taille des fichiers** : L'ajout continu de contenu avec l'option `-a` peut entraîner une croissance illimitée de la taille du fichier. Il faut envisager d'utiliser conjointement des outils de sauvegarde ou de rotation des fichiers journaux (par exemple, `logrotate`).
- **Signification de l'ignorance des interruptions** : L'option `-i` empêche la terminaison du processus `tee` lui-même, mais elle n'empêche pas la terminaison des commandes précédentes transmises à `tee`. Si une commande précédente se termine en réponse à une interruption, `tee` ne recevra plus d'entrée.