Comment puis-je voir l'intégralité du fichier et attendre que davantage de données soient ajoutées à ce fichier?


21

Je veux lire le fichier entier et le faire attendre pour l'entrée, tout comme tail -f mais avec le fichier complet affiché.

La longueur de ce fichier changera toujours, car il s'agit d'un .logfichier.

Comment faire si je ne connais pas la longueur du fichier?


2
vous savez déjà que la queue est proche de ce que vous voulez. avez-vous lu la page de manuel pour cela?
njzk2

1
lessa la touche "F". Utile si vous avez besoin d'interaction.
Thorbjørn Ravn Andersen

Réponses:


33

tailvous permet d'ajouter -npour spécifier le nombre de lignes à afficher depuis la fin, qui peuvent être utilisées conjointement avec -f. Si l'argument pour -ncommence par +cela est le nombre de lignes depuis le début ( 0et en 1affichant le fichier entier, 2indiquant de sauter la première ligne, comme indiqué par @Ben). Alors faites juste:

tail -f -n +0 filename

Si vos fichiers journaux pivotées, vous pouvez ajouter --retry(ou combiner -f and --retryen -Ftant @Hagen suggéré)

Notez également que dans un terminal graphique, vous pouvez utiliser la souris et PageUp/ PageDownpour revenir en arrière dans l'historique (en supposant que votre tampon est suffisamment grand), ces informations restent là même si vous utilisez Ctrl+ Cpour quitter tail. Si vous l'utilisez, lessc'est beaucoup moins pratique et AFAIK vous devez utiliser le clavier pour faire défiler et je ne connais pas de moyen de ne pas lessréinitialiser le capuchon si vous oubliez de le commencer -X.


1
+1 Votre réponse est apparue dès que j'ai posté la mienne et bien que la mienne fonctionne, la vôtre est meilleure.
Julie Pelletier

1
J'ai reçu le message alors que je tapais encore qu'une autre réponse était là et que je devais cliquer pour rafraîchir. Votre réponse ferait le travail, mais je ne serais pas surpris que le comptage depuis le début (forcé avec le +) soit implémenté plus efficacement.
Anthon

1
+1pour m'avoir enseigné +0. Vous voudrez peut-être -Fremplacer -fles fichiers journaux rotatifs
Hagen von Eitzen

Je pense qu'il y en a un par ici. tail -n +1montre le début du fichier pour moi et tail -n +2saute une ligne. Je pense que le nombre est le numéro de ligne de la première ligne affichée.
Ben Millwood

1
@Anthon merci! C'est exactement ce dont j'ai besoin!
malworm

37

Il existe un meilleur moyen d'y parvenir:

less +F <file>

Il vous montrera tout le fichier, a toute la puissance de lesset attendra une nouvelle entrée. Si vous voulez arrêter d'attendre l'entrée et lire une partie spécifique, vous pouvez l'arrêter avec ^Cet reprendre avec F.

La Fcommande est toujours disponible dans less, si vous décidez de surveiller les changements tout en ayant un fichier ouvert less, le frapper le Fmettra en marche. Merci à hiergiltdiestfu et au caractère générique de l' avoir signalé.


2
C'est bien mieux que ça tail. Merci pour le conseil; Je n'aurais jamais pensé à l'utiliser lesspour ça. Remarque pour les autres: vous pouvez également simplement exécuter less <file>, puis taper F.
Wildcard

3

En plus de la réponse de / u / Anthon, vous pouvez faire quelque chose comme:

{ cat filename; tail -0f filename; }

Cette -0option pour suivre est équivalente à -n 0, ce qui signifie: afficher 0 lignes. Mais le -faffichera de nouvelles lignes.

Vous n'avez pas besoin des accolades { }. Je les ai utilisés parce que parfois vous voulez rediriger les descripteurs de fichiers d'une manière ou d'une autre. Par exemple:

{ cat ; tail -0f -; } < /var/log/messages

Noté par Ben Milwood: vous pourriez avoir une condition de concurrence où le fichier se développe entre la fin de l' catopération et le début de l' tailopération. Mais encore une fois, c'est un problème "académique" à une solution académique.


3
Si le fichier se développe entre la catfin et le taildébut, vous ne verrez pas ces lignes. Probablement pas un gros problème, mais une raison de préférer la tailsolution pure .
Ben Millwood

Je pense que cela { cat; tail -n +0 -f; } < fileréglerait la course, car tail imprimera toutes les nouvelles données qui apparaissent entre catla sortie et taille démarrage de. Bien sûr, cela rend le catredondant. La redirection ne se produit qu'une seule fois, et tailstdin est le descripteur de fichier qui a catdéjà été lu sur EOF, donc sa position actuelle est catarrêtée. Vous pouvez le tester en mettant un echo foo >> fileintérieur {}pour créer la course à chaque fois.
Peter Cordes du

2

watch commande devrait faire cela pour vous.

Vous pouvez aussi essayer

less +FG 

Vous aurez plus d'options avec la lesscommande pour faire défiler votre fichier lorsque vous dites qu'il s'agit d'un gros fichier.


Moins ne suit pas non plus un fichier en croissance.
Shadur

7
@Shadur, c'est le cas, c'est à cela que sert l' +Foption
glenn jackman
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.