Différences

Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue comparative

filtres:tail [2006/10/27 10:21]
kwisatz
filtres:tail [2006/10/27 11:07] (Version actuelle)
danielcaillibaud ajout tail -n +xx
Ligne 1: Ligne 1:
 +====== Tail ====== ​
  
 +Vous voulez consulter la fin d'un fichier sans avoir à tout lire ? La commande tail est faite pour vous.
 +
 +===== Quelques petits exemples =====
 +
 +^ Afficher les xx dernières lignes | tail -n xx mon_fichier \\ (tail -xx mon_fichier marche aussi avec gnu tail v5.93) |
 +^ Afficher les dernières lignes à partir de la n° xx (incluse) | tail -n +xx mon_fichier |
 +^ Regarder ce qui s'​écrit dans un fichier (genre log) au fur et à mesure qu'on écrit dedans | tail -f mon_fichier |
 +
 +
 +A vous de jouer !
 +
 +===== Pour aller plus loin =====
 +
 +tail -f est gourmand.
 +
 +ILa seule manière de savoir si un fichier a changé, c'est de regarder à intervalles définis. Donc toutes les secondes, que le fichier ait changé ou pas, tail -f va regarder si le pointeur est à la fin du fichier, et si non, afficher jusque la fin du fichier, puis se mettre en sleep pendant une seconde, etc.
 +
 +C'est inefficace donc, puisque une seconde (au maximum) de délai est observée (et parfois c'est pénible).
 +
 +La solution : utiliser la fonctionnalité inotify des kernels 2.6 récents (TODO: préciser la version exacte). Cette fonctionnalité permet à un programme userland (par opposition au kernel lui-même), d'​être informé en cas de changement sur un fichier qu'il surveille. Le programme informe le kernel qu'il veut être informé en cas de syscall sur l'​inode qu'il surveille, et paf, il peut d'un coup dormir 12s et être réveillé au moment précis où une ligne est ajoutée au fichier.
 +
 +inotail (apt-get install inotail pour les debianeux), http://​distanz.ch/​inotail,​ duplique grosso-modo le fonctionnement de tail (et de son option -f qui nous intéresse ici), en utilisant inotify.
 +
 +
 +Autre remarque : Quand vous surveillez un fichier longtemps (par exemple 24h), il se peut que logrotate soit passé par là, ait renommé votre fichier syslog en syslog.0, et que tail -f soit en train de surveiller un fichier d'​archive (pour être précis, tail -f surveille un inode, et quand on renomme un fichier, l'​inode ne change pas). La solution est d'​utiliser l'​option --follow=name,​ qui dit à tail de vérifier toutes les secondes que l'​inode correspondant au nom suivi n'a pas changé, et si c'est le cas, il réouvre le fichier.
 
filtres/tail.txt · Dernière modification: 2006/10/27 11:07 par danielcaillibaud