Die Anzeige der Bash-Skript-Protokolldatei wird kontinuierlich angezeigt

75

Ich erstelle eine Anwendung, die in eine Protokolldatei schreibt, und ich muss wissen, wie in Linux / Bash die Protokolldatei kontinuierlich auf dem Bildschirm angezeigt wird (Aktualisierung des Bildschirms mit jeder neuen Zeile im Protokoll).

Nehmen wir als Beispiel an, ich möchte ein laufendes Protokoll von apache/error.logauf den Bildschirm (SSH-Terminal) übertragen, das ständig aktualisiert wird.

Aaron Murray
quelle
unix.stackexchange.com/questions/45626/…
Ciro Santilli 14 冠状 病 六四 事件 法轮功

Antworten:

109

Versuchen Sie den Befehl tail:

tail -f filename
Hai Vu
quelle
2
Nun gut, ich fühle mich wie ein Idiot. Ich benutze die ganze Zeit den Befehl tail (nur nicht mit dem Parameter -f). Mann Schwanz wäre mein Freund gewesen. Danke, genau das, wonach ich gesucht habe !! Wird die Antwort akzeptieren, wenn es erlaubt (9min)
Aaron Murray
vu das ist sogar besser als ein Skript zu schreiben :) (obwohl ich denke, es könnte auch zu einem Skript hinzugefügt werden)
Aaron Murray
2
Mit dieser Option können --follow=nameSie sicherstellen, dass der Inhalt der Protokolldatei auch dann angezeigt wird, wenn die Datei von einem Cron-Job gedreht / neu erstellt wurde.
Cédric Julien
2
@aaron Nur eine Notiz, da Sie erwähnt haben, dass Sie die Anwendung erstellen und dann planen, das Protokoll zu beenden. Achten Sie darauf, dass nur, weil Sie eine Zeile in die Anwendung geschrieben haben, die Zeile nicht im Protokoll angezeigt wird da die Ausgabe gepuffert sein kann.
Frankc
28

Eine andere Lösung ist

 less +F filename

oder geben Sie einfach less filename"F" ein (drücken Sie shift+ f). Es kann besser sein als tail, weil es Ihnen ermöglicht, den kontinuierlichen Druck vorübergehend abzubrechen, rückwärts zu gehen, um etwas anzusehen und es wieder mit "F" ( shift+ f) zu aktivieren

osgx
quelle
Ich mache mir Notizen, das ist eine großartige Alternative!
Aaron Murray
Außerdem können Sie mit der Flagge lange Zeilen aus dem Feld herausschneiden-S und gleichzeitig nach links / rechts scrollen. Der tail -f file.log | cut ...Methode überlegen .
Sevko
Ich verstehe die Tastenkombination nicht. Drücken Sie zuerst Fdann Shift? Oder gleichzeitig drücken? Ich habe es versucht, aber es machte keinen Unterschied.
Becko
1
becko, danke, tippe einfach "F" (Umschalt + F) - drücke und halte Shift, drücke dann f und lass dann beide Tasten los. Ich habe meine Antwort bearbeitet.
Osgx
11

Der Befehl watch kann ebenfalls von Nutzen sein.

watch tail logfile

Würde Ihnen die letzten 5 Zeilen der Protokolldatei zeigen. Es kann auf jeden Befehl erweitert werden, der Inhalte auf stdout druckt.

Ja, die Verwendung tail -fist die traditionelle Lösung, aber je nachdem, was Sie versuchen, funktioniert dies möglicherweise besser.

Seth Robertson
quelle
1
Weitere Notizen. Linux = eine Million Möglichkeiten, dieselbe Katze zu häuten :) Danke
Aaron Murray
6

ssh {remotehost} tail -n0f {logfile}

Dadurch erhalten Sie zunächst keine Zeilen und drucken kontinuierlich alle neuen Zeilen, die in der Datei angezeigt werden.

Bukzor
quelle
6

Du kannst auch:

less filename.txt
and press 'F'

hat ein Plus - Sie können jederzeit STRG-C drücken und im Protokoll zurückblättern und erneut mit dem 'F' beginnen.

jm666
quelle
1
Ich bin so erstaunt über die Antwortzeiten auf die Fragen, dass ich versucht habe, ein paar Fragen zu beantworten, und es gibt viele Leute, die hier schneller auf den Aktualisierungsknopf klicken als ich :) Danke auch für die Antwort / den Tipp
Aaron Murray