Comment utiliser la commande tail sous Linux



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 processus
  • u: sortie orientée utilisateur
  • x: tous les processus, y compris ceux sans TTY

sort trie la sortie de ps, avec les options suivantes :

  • n: tri numérique
  • k +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.