Ich möchte die gesamte Datei lesen und auf die Eingabe warten lassen, genau wie tail -f
aber mit der vollständigen angezeigten Datei.
Die Länge dieser Datei ändert sich immer, da es sich um eine .log
Datei handelt.
Wie kann ich das machen, wenn ich die Länge der Datei nicht kenne?
command-line
tail
Malworm
quelle
quelle
less
hat die "F" -Taste. Nützlich, wenn Sie Interaktion benötigen.Antworten:
tail
können Sie hinzufügen-n
, um die Anzahl der Zeilen festzulegen, die ab dem Ende angezeigt werden sollen und die in Verbindung mit verwendet werden können-f
. Wenn das Argument für-n
beginnt mit+
, ist dies die Anzahl der Zeilen von Anfang an (0
und die1
Anzeige der gesamten Datei,2
wobei angezeigt wird , dass die erste Zeile übersprungen wird, wie durch @Ben angegeben). Also mach einfach:Wenn Ihre Log - Dateien gedreht, können Sie hinzufügen
--retry
(oder kombinieren-f and --retry
in-F
als @Hagen vorgeschlagen)Beachten Sie auch, dass Sie in einem Grafikterminal mit der Maus und PageUp/ oder PageDownzum Zurückblättern in den Verlauf (vorausgesetzt, Ihr Puffer ist groß genug) diese Informationen beibehalten können, auch wenn Sie Ctrl+ Czum Beenden verwenden
tail
. Wenn Sieless
dies verwenden, ist es weitaus unbequemer und AFAIK müssen Sie die Tastatur zum Scrollen verwenden, und ich kenne keine Mittel, um zu verhindern, dassless
Termcap deinitialisiert wird, wenn Sie vergessen, damit zu beginnen-X
.quelle
+
) effizienter implementiert wird.+1
dafür, dass du mir etwas beigebracht hast+0
. Vielleicht möchten Sie-F
statt-f
für rotierende Logfilestail -n +1
zeigt mir den Dateianfang undtail -n +2
überspringt eine Zeile. Ich denke, die Nummer ist die Zeilennummer der ersten angezeigten Zeile.Es gibt einen besseren Weg, dies zu erreichen:
Es zeigt Ihnen die gesamte Datei, hat die volle Leistung
less
und wartet auf neue Eingaben. Wenn Sie nicht mehr auf Eingaben warten und einen bestimmten Teil lesen möchten, können Sie ihn mit beenden^C
und mit fortsetzenF
.Der
F
Befehl ist immer in verfügbarless
. Wenn Sie beim Öffnen einer Datei auf Änderungenless
achten,F
wird er durch Drücken von aktiviert. Vielen Dank an hiergiltdiestfu und wildcard für den Hinweis.quelle
tail
. Danke für den Tipp; Daran hätte ich nie gedachtless
. Hinweis für andere: Sie können auch einfach ausführenless <file>
und dann eingebenF
.Zusätzlich zu / u / Anthons Antwort können Sie Folgendes tun:
Diese
-0
Option zum-n 0
Beenden entspricht , was bedeutet: 0 Zeilen anzeigen. Aber die-f
werden neue Zeilen anzeigen.Du brauchst keine Zahnspange
{ }
. Ich habe sie verwendet, weil Sie manchmal die Filedeskriptoren auf irgendeine Weise umleiten möchten. Zum Beispiel:Bemerkung von Ben Milwood: Sie könnten einen Rennzustand haben, in dem die Datei zwischen dem Ende des
cat
Vorgangs und dem Beginn destail
Vorgangs wächst . Aber auch dies ist ein "akademisches" Problem für eine akademische Lösung.quelle
cat
Ende und demtail
Beginn wächst , werden diese Zeilen nicht angezeigt. Es ist unwahrscheinlich, dass es sich um eine große Sache handelt, aber ein Grund, die reinetail
Lösung zu bevorzugen .{ cat; tail -n +0 -f; } < file
, das Rennen könnte repariert werden, da der Schweif alle neuen Daten druckt, die zwischencat
dem Beenden undtail
dem Starten von angezeigt werden . Natürlich macht es dascat
überflüssig. Die Umleitung findet nur einmal statt, undtail
stdin ist der Dateideskriptor, dercat
bereits an EOF ausgelesen wurde, sodass die aktuelle Position dort ist, wo siecat
gestoppt wurde. Sie können es testen, indem Sie einenecho foo >> file
in das einfügen{}
, um das Rennen jedes Mal zu erstellen.watch
Befehl sollte das für Sie tun.Sie können es auch versuchen
Sie haben mehr Optionen mit dem
less
Befehl, um durch Ihre Datei zu scrollen, da Sie sagen, dass es sich um eine große Datei handelt.quelle
+F
Option ist für