Vous décrivez l' tail
utilitaire GNU . La différence entre ces deux indicateurs est que si j'ouvre un fichier, un fichier journal par exemple, comme ceci:
$ tail -f /var/log/messages
... et si la fonction de rotation des journaux sur ma machine décide de faire pivoter ce fichier journal pendant que je regarde les messages qui y sont écrits ("faire pivoter" signifie supprimer ou déplacer vers un autre emplacement, etc.), la sortie que je vois sera simplement Arrêtez.
Si j'ouvre le fichier avec tail
comme ceci:
$ tail -F /var/log/messages
... et encore une fois, le fichier est pivoté, la sortie continue de circuler dans ma console car tail
elle rouvrira le fichier dès qu’il redeviendra disponible, c’est-à-dire lorsque le ou les programmes écrivant dans le journal commenceront à écrire dans le nouveau /var/log/messages
.
Sur les systèmes BSD libres, il n'y a pas d' -F
option, mais tail -f
se comportera comme tail -F
les systèmes GNU, à la différence que vous obtenez le message.
tail: file has been replaced, reopening.
dans la sortie lorsque le fichier que vous surveillez disparaît et réapparaît.
VOUS POUVEZ TESTER CE
Dans une session shell, faites
$ cat >myfile
Cela va maintenant attendre que vous tapiez des choses. Allez-y, tapez du charabia, quelques lignes. Tout sera sauvegardé dans le fichier myfile
.
Dans une autre session shell (peut-être dans un autre terminal, sans interrompre lecat
):
$ tail -f myfile
Cela montrera le (fin du) contenu de myfile
dans la console. Si vous revenez à la première session shell et que vous tapez quelque chose de plus, cette sortie sera immédiatement affichée par tail
la seconde session shell.
Maintenant, quittez cat
en appuyant sur Ctrl+Det supprimez le myfile
fichier:
$ rm myfile
Puis relancez le chat:
$ cat >myfile
... et tapez quelque chose, quelques lignes.
Avec GNU tail
, ces lignes n'apparaîtront pas dans la deuxième session du shell (où tail -f
est toujours en cours d'exécution).
Répétez l'exercice avec tail -F
et observez la différence.
tail -f foo.log
et que votre système passefoo.log
à, par exemple,foo.log.0.gz
la sortie que vous voyez s’arrêterait tout simplement. Si vous utilisez-F
en revanche, vous verriez le contenu de la nouvellefoo.log
sans aucune pause entre les deux.Simplifié, lorsque vous ouvrez un fichier, vous obtenez un inode contenant des métadonnées indiquant exactement l'emplacement du fichier sur votre disque. Tail écoutera alors les modifications apportées à ce fichier.
Si vous supprimez le fichier et en créez un nouveau portant le même nom, le nom du fichier sera identique, mais il s'agit d'un inode différent (et probablement stocké à un emplacement différent sur votre disque).
tail -f
fill ne pas réessayer et charger le nouvel inode,tail -F
le détectera.Le même effet se produira si vous renommez / déplacez un fichier. Si par exemple vous
/var/log/messages
suivez et logrotate fait pivoter le journal en/var/log/messages.1
. tail avec-f
écoutera toujours le vieil inode qui pointe versmessages.1
. tail-F
va le réaliser et lire le nouvel inode.la source