Je n'ai jamais utilisé tail -F
commande à la place toujours utilisée tail -f
mais quelqu'un m'a dit que -F
c'est mieux sans trop d'explication.
J'ai recherché la page de manuel pour la commande de queue.
-f output appended data as the file grows;
-F Same as --follow=name --retry
--retry Keep trying to open a file even when it is or becomes inaccessible
Il est facile de comprendre ce qui est inférieur -f
le fait mais je ne respecte pas les majuscules -F
essaie de faire. J'apprécierais que quelqu'un puisse m'expliquer les différences.
Vous décrivez l'utilitaire GNU tail
. 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 ("tourner" signifie supprimer ou déplacer vers un autre emplacement, etc.), la sortie que je vois ne fera que Arrêtez.
Si j'ouvre le fichier avec tail
comme ceci:
$ tail -F /var/log/messages
... et encore une fois, le fichier est tourné, la sortie continuerait à circuler dans ma console car tail
rouvrirait le fichier dès qu'il redeviendrait disponible, c'est-à-dire lorsque le ou les programmes écrivant dans le journal a commencé à écrire dans le nouveau /var/log/messages
.
Sur les systèmes BSD gratuits, il n'y a pas de -F
option, mais tail -f
se comportera comme tail -F
fonctionne sur les systèmes GNU, à la différence près 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 CECI
Dans une session Shell, faites
$ cat >myfile
Cela vous attendra maintenant pour taper des trucs. Allez-y et tapez du charabia, quelques lignes. Tout sera enregistré dans le fichier myfile
.
Dans une autre session Shell (peut-être dans un autre terminal, sans interrompre le cat
):
$ tail -f myfile
Cela affichera le (fin du) contenu de myfile
dans la console. Si vous revenez à la première session Shell et saisissez quelque chose de plus, cette sortie sera immédiatement affichée par tail
dans la deuxième session Shell.
Maintenant, quittez cat
en appuyant sur Ctrl+Det supprimez le fichier myfile
:
$ rm myfile
Réexécutez ensuite le chat:
$ cat >myfile
... et tapez quelque chose, quelques lignes.
Avec GNU tail
, ces lignes n'apparaîtront pas dans la deuxième session Shell (où tail -f
est toujours en cours d'exécution).
Répétez l'exercice avec tail -F
et observez la différence.
Simplifié, lorsque vous ouvrez un fichier, vous obtiendrez l'inode qui contient des métadonnées de l'emplacement exact du fichier sur votre disque. Tail écoutera ensuite les modifications apportées à ce fichier.
Si vous supprimez le fichier et en créez un nouveau avec le même nom, le nom de fichier sera le même mais il s'agit d'un inode différent (et probablement stocké à un autre endroit sur votre disque). tail -f
remplir 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 vous suivez par exemple /var/log/messages
et logrotate fait pivoter le journal vers /var/log/messages.1
. queue avec -f
écoutera toujours l'ancien inode qui pointe vers messages.1
. queue avec -F
s'en rendra compte et lira le nouvel inode.