La commande Linux tail
est utilisée pour afficher les dernières lignes d’un fichier. Elle permet également de suivre en temps réel les ajouts de données à un fichier. Découvrons comment tirer parti de cette commande.
L’impact de Systemd sur l’utilité de tail
tail
a pour fonction première de montrer les données les plus récentes d’un fichier, généralement celles qui sont ajoutées en dernier. C’est donc une méthode pratique pour surveiller les mises à jour d’un fichier, notamment les fichiers journaux. Cet outil peut également surveiller un fichier et afficher en direct chaque nouvel ajout de texte.
Toutefois, de nombreuses distributions Linux modernes ont adopté systemd
, un système de gestion de services qui remplace l’ancien init
. systemd
, étant le premier processus lancé avec l’ID de processus 1, modifie la manière dont les journaux système sont gérés. Au lieu d’être stockés en texte brut, les journaux sont désormais enregistrés dans un format binaire. Pour consulter ces journaux, il faut utiliser la commande journalctl
. tail
, quant à elle, fonctionne avec les fichiers texte, ce qui soulève la question de sa pertinence face à ces changements. Est-ce qu’elle est devenue obsolète?
Malgré ces évolutions, tail
n’est pas uniquement dédiée à la surveillance en temps réel. De nombreux fichiers journaux ne sont pas générés par systemd
et restent sous format texte. C’est le cas, par exemple, des fichiers journaux d’applications, qui conservent généralement leur format traditionnel.
Comment utiliser la commande tail
Pour afficher les dix dernières lignes d’un fichier, il suffit de passer son nom à tail
. Les exemples ci-dessous utilisent des listes de mots numérotées pour illustrer l’effet des différentes options.
tail word-list.txt
L’option -n
suivie d’un nombre permet d’afficher un nombre de lignes spécifique:
tail -n 15 word-list.txt
Il est également possible d’utiliser un tiret suivi du nombre de lignes sans espace, bien que cette forme soit considérée comme obsolète. Cependant, elle est toujours documentée dans la page de manuel et fonctionne.
tail -12 word-list.txt
Utiliser tail avec plusieurs fichiers
tail
peut également être utilisé avec plusieurs fichiers simultanément. Il suffit de passer leurs noms comme arguments:
tail -n 4 list-1.txt list-2.txt list-3.txt
Un en-tête est affiché pour chaque fichier, permettant d’identifier l’origine des lignes affichées.
Afficher les lignes à partir du début du fichier
Le modificateur +
permet de spécifier un point de départ dans le fichier. Les lignes sont alors affichées à partir de ce point. Si ce point se trouve proche du début d’un fichier long, cela générera beaucoup de texte. Il est donc conseillé de rediriger la sortie vers less
.
tail +440 list-1.txt
Cette redirection permet une navigation contrôlée dans le texte.
Puisque ce fichier contient 20445 lignes, la commande suivante est équivalente à l’option -6
:
tail +20440 list-1.txt
Utilisation des octets avec tail
L’option -c
permet de travailler en octets au lieu de lignes. Cela est utile avec des fichiers structurés en enregistrements de taille fixe. Un caractère de nouvelle ligne est compté comme un octet. La commande ci-dessous affichera les 93 derniers octets du fichier:
tail -c 93 list-2.txt
L’option -c
peut également être combinée avec le modificateur +
. Cela permet de définir le point de départ en octets à partir du début du fichier :
tail -c +351053 list-e.txt
Redirection avec tail
Nous avons vu précédemment comment rediriger la sortie de tail
vers less
. Il est également possible de rediriger la sortie d’autres commandes vers tail
.
Par exemple, pour identifier les cinq fichiers ou répertoires les plus anciens, utilisez ls -t
(trier par date de modification), et envoyez la sortie vers tail
:
ls -tl | tail -5
La commande head
extrait les premières lignes d’un fichier. En combinant head
et tail
, nous pouvons extraire une section spécifique du fichier. Par exemple, pour extraire les lignes 191 à 200 du fichier, utilisez la commande suivante:
head -n 200 list-1.txt | tail -10
Cette commande permet d’identifier les cinq processus qui consomment le plus de mémoire :
ps aux | sort -nk +4 | tail -5
Décortiquons cette commande:
ps
, avec l’option affiche des informations sur les processus en cours d’exécution, notamment:
a
: tous les processusu
: sortie orientée utilisateurx
: tous les processus, y compris ceux sans TTY
sort
trie la sortie de ps, avec les options suivantes :
n
: tri numériquek +4
: tri sur la quatrième colonne
tail -5
sélectionne les cinq derniers éléments de la sortie triée. Il s’agit donc des cinq processus qui consomment le plus de mémoire.
Suivre les fichiers en temps réel avec tail
Pour suivre les nouvelles lignes qui sont ajoutées à un fichier, utilisez l’option -f
(follow). Cela est particulièrement utile pour les fichiers journaux.
tail -f geek-1.log
tail
mettra à jour l’affichage dès qu’une nouvelle entrée est ajoutée au journal.
Pour filtrer la sortie, vous pouvez utiliser grep
pour afficher uniquement les lignes contenant une certaine chaîne de caractères. Voici un exemple avec le mot « moyenne »:
tail -f geek-1.log | grep average
Pour suivre les modifications apportées à plusieurs fichiers, passez leurs noms comme arguments:
tail -f -n 5 geek-1.log geek-2.log
Chaque entrée sera accompagnée d’un en-tête indiquant le fichier d’origine.
L’affichage est mis à jour à chaque nouvelle entrée. Pour ajuster l’intervalle de mise à jour, utilisez l’option -s
(sleep), suivie du nombre de secondes. Par exemple, pour vérifier les mises à jour toutes les cinq secondes :
tail -f -s 5 geek-1.log
Les nouvelles entrées de fichiers seront affichées dans le terminal toutes les cinq secondes.
Lorsque vous suivez plusieurs fichiers, l’option -q
(quiet) permet de supprimer les en-têtes, afin de ne pas afficher les noms des fichiers d’origine :
tail -f -q geek-1.log geek-2.log
La sortie des fichiers est affichée de manière transparente, sans indication de leur provenance.
La valeur persistante de tail
Malgré l’introduction de journalctl
pour accéder aux journaux système, tail
reste un outil très pertinent, notamment lorsqu’il est combiné avec d’autres commandes, que ce soit pour recevoir ou pour envoyer sa sortie.
systemd
a peut-être modifié le paysage, mais il y a toujours une place pour les utilitaires traditionnels qui respectent la philosophie Unix: faire une seule chose, et la faire bien.