Öffnen Sie eine Textdatei und lassen Sie sie selbst aktualisieren

20

Wie kann ich eine Textdatei öffnen und sie selbst aktualisieren lassen? Ähnlich wie es topfunktioniert.

Ich möchte eine Protokolldatei öffnen und beobachten, wie sie sich automatisch aktualisiert.

Ich habe gerade versucht:

$ tail error.log

Aber gerade erst wurde klar, dass es nur die Zeilen in der Logdatei anzeigt.

Ich benutze RHEL 5.10

Kevdog777
quelle
4
Verwenden Sietail -f error.log
garethTheRed
Ah, tailist das der richtige Weg, es zu benutzen? Wow, ich hätte wirklich nicht gedacht, dass ich das gebrauchen könnte. Ich hatte einen viel längeren Ausdruck erwartet.
Kevdog777
1
FYI, während Schwanz ist das Werkzeug für den Job, buchstäblich open a text file and let it update itselfmit achived werden watch cat filename.
Cthulhu
1
@Cthulhu du meinst watch cat filenameoder ähnlich. watch filenamewird versuchen auszuführen filename.
Terdon
@terdon Ja in der Tat.
Cthulhu

Antworten:

29

Sie suchen tail -f error.log(von man tail):

   -f, --follow[={name|descriptor}]
          output appended data as the file grows; -f, --follow, and --fol‐
          low=descriptor are equivalent

Auf diese Weise können Sie eine Datei anzeigen und alle daran vorgenommenen Änderungen sehen.

terdon
quelle
Und das wird nicht viel Ressourcen verbrauchen?
Kevdog777
1
@ Kevdog777 nicht wirklich nein. Vermutlich wird die Datei nur alle paar Sekunden erneut geöffnet, um sie zu aktualisieren. Dies ist jedoch die klassische Methode, um das zu tun, was Sie wollen.
Terdon
1
@terdon, es öffnet sich nur wieder (kann wieder öffnen) mit -F. Damit -fliest es gerade jede Sekunde. Es ist wie ein while cat; do sleep 1; done < file. Unter inotailLinux finden Sie einen reaktiveren Hinweis (mit inotifydem Sie wissen, wann die Datei geändert wird).
Stéphane Chazelas
@ StéphaneChazelas: Ich bin sicher, dass es viel effizienter ist. Ich würde wetten, dass es select oder poll verwendet, um festzustellen, ob der fd lesbar ist, und dann schlafen, bis Daten auf dem fd verfügbar sind. Obwohl ich mich total irren könnte.
Martin York
1
@LokiAstari, Sie können nicht viel effizienter sein als readein Systemaufruf pro Sekunde. Ein "Lesen" selectoder polleiner regulären Datei würde immer true zurückgeben, da read()eine reguläre Datei niemals blockiert wird und daher nicht funktioniert. Allerdings läuft GNU tailjetzt inotifyunter Linux, wird also inotailnicht mehr benötigt.
Stéphane Chazelas
20

Verwenden Sie "less" anstelle von "tail" für den Bildlauf und die Suche

Sie können verwendet werden, tail -f error.logoder besser: tail -F error.log.

Wenn Sie jedoch in der Datei zurückblättern möchten, ist dies nicht sehr nützlich.

Mit

less +F error.log

Sie erhalten die Funktion von tail -f,
können aber das Lesen neuer Eingaben mit Ctrl+ unterbrechenC .

Dann können Sie im Normal sind lessModus, in
dem Sie können zurück blättern , um zu sehen , was man mit verpasst haben Up/ Down
Sie können aber auch lange Logdateienzeilen ohne Verpackung lesen, mit Left/Right

Suchen und zeigen Sie nur übereinstimmende Zeilen

Sie können auch nach regulären Ausdrücken mit /, ?nach rückwärts nund Nnach vor / zurück suchen .

Sehr interessant für Log - Dateien ist , dass Sie verstecken alle nicht passenden Zeilen für eine Suche mit &, Filterung heraus nur die Spiele.

Tasten in der Befehlszeile

Mit FInneren less, Sie auch weiterhin den tail -f-ähnlichen Modus.
Das +in der Kommandozeile less +Fbedeutet "Drücken Sie diese Tasten direkt nach dem Start weniger".

Deshalb haben wir Fbeim Start den Tastendruck verwendet , der wie folgt beschrieben wird:

F  Scroll  forward,  and  keep trying to read when the end of file is
   reached.  Normally this command would be used when already at  the
   end  of the file.  It is a way to monitor the tail of a file which
   is growing while it is being viewed.  (The behavior is similar  to
   the "tail -f" command.)

Siehe auch, multitailob Sie mehr als eine Protokolldatei anzeigen müssen.

Volker Siegel
quelle
Danke, aber es tail -f error.logist perfekt für das, was ich brauche. Die Log-Datei wird nur stündlich aktualisiert, reicht also für meinen Gebrauch aus :-)
Kevdog777
1
Denken Sie daran, es für das nächste Mal zu merken;)
Volker Siegel
mosthat auch einen tail -fmodus mit F.
Stéphane Chazelas
@ StéphaneChazelas richtig, danke! Hmmm ... ich erinnere mich, dass mir jemand vor einiger Zeit dafür gedankt mosthat ... und ich habe es vergessen.
Volker Siegel
@Stéphanechazelas Scheint aber dann mostnicht die weniger Filterfunktion &zu haben, um nur passende Zeilen anzuzeigen? In der Regel eine nützliche Funktion in Protokolldateien.
Volker Siegel
5

Verwenden Sie -fOption mit tail:

-f, --follow [= {name | descriptor}] gibt angehängte Daten aus, wenn die Datei wächst; -f, --follow und --follow = descriptor sind äquivalent

Oder verwenden Sie den FBefehl inside less:

   F      Scroll forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already at the end of the file.  It is a way to mon‐
          itor the tail of a file which is growing while it is being viewed.  (The behavior is similar to the "tail -f" command.)
Arkadiusz Drabczyk
quelle
Was ist neu in dieser Antwort?
Bluefoggy
1
Ich verstehe nicht, wonach du fragst. Es war die zweite und die erste Antwort auf diese Frage less.
Arkadiusz Drabczyk