web-dev-qa-db-fra.com

Comment fonctionne le paramètre "-f" de la commande "tail"?

$ tail -f testfile

la commande est censée afficher les dernières entrées du fichier spécifié, en temps réel non? Mais cela ne se produit pas. Veuillez me corriger, si ce que j'ai l'intention de faire est mal ...

J'ai créé un nouveau fichier "aaa" et ajouté une ligne de texte et l'ai fermé. puis émis cette commande (première ligne):

$ tail -f aaa
xxx
xxa
axx

les trois dernières lignes représentent le contenu du fichier aaa. Maintenant que la commande est toujours en cours d'exécution (puisque j'ai utilisé -f), J'ai ouvert le fichier aaa via l'interface graphique et j'ai commencé à ajouter manuellement quelques lignes supplémentaires. Mais le terminal n'affiche pas les nouvelles lignes ajoutées dans le fichier.

Qu'est-ce qui ne va pas ici? Le tail -f la commande affiche uniquement les nouvelles entrées si elles sont écrites uniquement par le système? (comme les fichiers journaux, etc.)

62
its_me

Depuis la tail(1)page de manuel :

   With  --follow  (-f),  tail  defaults to following the file descriptor,
   which means that even if a tail’ed file is renamed, tail will  continue
   to  track  its  end.   This  default behavior is not desirable when you
   really want to track the actual name of the file, not the file descrip-
   tor (e.g., log rotation).  Use --follow=name in that case.  That causes
   tail to track the named file  in  a  way  that  accommodates  renaming,
   removal and creation.

Votre éditeur de texte renomme ou supprime le fichier d'origine et enregistre le nouveau fichier sous le même nom de fichier. Utilisation -F au lieu.

66

Votre éditeur a son propre tampon pour le fichier. Lorsque vous modifiez le texte dans l'éditeur, rien n'est écrit dans le fichier lui-même.

Lorsque vous enregistrez vos modifications, il est probable que l'éditeur supprime simplement l'ancien fichier et en crée un nouveau. tail -f sera toujours connecté au fichier supprimé, il n'affichera donc rien de nouveau.

11
Stéphane Gimenez

tail "rafraîchit" chaque 1 seconde par défaut, pas en temps réel.

Essayez avec ceci (vous avez besoin de bash4):

  • Ouvrez 2 terminaux.
  • Dans le premier terminal, exécutez touch ~/output.txt et tail -f ~/output.txt.
  • Dans le deuxième terminal, exécutez for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
  • Regardez la sortie de queue dans le premier terminal.
4
Rufo El Magufo