Tail

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Affichage de fichiers / logs
Commande tail, multitail
Contexte Tout Unix/Linux — lecture de fin de fichier, suivi de logs en continu
Voir aussi Head (début de fichier), Grep (filtrage), Logrotate (rotation de logs)

tail affiche les dernières lignes d'un fichier — l'usage le plus courant est le suivi en direct d'un fichier de log (-f), éventuellement combiné à grep pour filtrer le flux à la volée.

Nombre de lignes : -n

tail fichier.log             # 10 dernières lignes par défaut
tail -n 50 fichier.log       # 50 dernières lignes
tail -n50 fichier.log        # forme collée, équivalente
tail -c 200 fichier.log      # 200 derniers octets plutôt que des lignes

À partir d'une ligne donnée : +n

tail +1 fichier.log          # tout le fichier depuis le début (équivalent cat)
tail +100 fichier.log        # affiche à partir de la ligne 100 jusqu'à la fin
tail -n +100 fichier.log     # forme explicite (GNU coreutils), même résultat

Le signe + inverse la logique de -n : au lieu de compter depuis la fin, on compte depuis le début et on affiche tout ce qui suit la ligne indiquée.

Suivi en continu : -f et -F

tail -f /var/log/syslog                 # suit le fichier en continu (Ctrl+C pour arrêter)
tail -F /var/log/syslog                 # comme -f, mais suit aussi si le fichier est renommé/recréé
tail -f -n 100 /var/log/syslog          # affiche d'abord les 100 dernières lignes puis suit

La différence entre les deux est cruciale en présence de Logrotate : -f suit le descripteur de fichier ouvert au lancement, donc quand logrotate renomme puis recrée le fichier, tail -f continue de lire l'ancien fichier (renommé) et n'affiche plus rien de nouveau. -F (majuscule) réessaie périodiquement d'ouvrir le fichier par son nom, donc il détecte la rotation et bascule automatiquement sur le nouveau fichier — c'est le choix à privilégier pour tout suivi de log de longue durée sur un serveur avec rotation active.

Combiner avec grep

tail -f /var/log/nginx/access.log | grep --line-buffered "50[0-9]"   # filtre les erreurs 5xx en direct
tail -F /var/log/syslog | grep -i "error\|fail"                      # suivi filtré, résiste à la rotation

⚠️ Avec un pipe vers grep, penser à l'option --line-buffered : par défaut grep bufferise sa sortie quand elle n'est pas un terminal (par exemple redirigée ou vers un autre pipe), ce qui retarde l'affichage des lignes filtrées ; --line-buffered force un flush ligne par ligne, indispensable pour du suivi temps réel.

multitail

multitail affiche plusieurs flux tail -f côte à côte dans un même terminal, avec coloration syntaxique par fichier — pratique pour surveiller plusieurs logs en parallèle sans multiplexeur de terminal séparé (tmux/screen).

yum install multitail          # RHEL/CentOS
apt install multitail          # Debian/Ubuntu

multitail /var/log/messages /var/log/secure                 # deux fichiers, deux fenêtres empilées
multitail -s 2 /var/log/nginx/access.log /var/log/nginx/error.log   # -s 2 : deux colonnes côte à côte
multitail -i /var/log/app.log -I /var/log/app-errors.log     # -i / -I : fusionne deux flux dans une seule fenêtre

Voir aussi

  • Head — affiche le début d'un fichier, complémentaire de tail
  • Grep — filtrage de texte, souvent combiné à tail pour surveiller un flux
  • Logrotate — rotation des logs, à connaître pour choisir entre -f et -F