====== 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.