Spezielle Datei, die nur die letzten n Zeilen enthält

555
Daladim

Gibt es eine Möglichkeit, spezielle Dateien unter Linux zu erstellen, die nur die 100 zuletzt geschriebenen Zeilen enthalten? Ich habe einen Prozess, der eine Protokolldatei füllt, und ich möchte regelmäßig die letzten 100 Zeilen analysieren.

Ich weiß, ich könnte eine Art Logrotat verwenden, aber gibt es eine Möglichkeit, eine spezielle Datei zu erstellen, die sich bis zu 100 Zeilen füllt. Wenn Sie eine Zeile hinzufügen, wird die älteste entfernt, sodass die Datei nur 100 Zeilen enthält. (eine Art leitungsbasierter FIFO)

Danke vielmals

0
`tail` tut das, also könnten Sie einen Cron-Job schreiben, um die Datei in dem von Ihnen gewünschten Aktualisierungsintervall zu füllen. einfach mit `tail überschreiben > `. Wenn Ihre Aktualisierungsrate hoch genug ist, wirkt sie wie ein FIFO-Puffer. Frank Thomas vor 8 Jahren 2
Es wäre zwar cool, über ein benutzerdefiniertes virtuelles Dateisystem zu verfügen, mit dem Sie abgeleitete Inhalte (wie einen Ringpuffer) abrufen können, diese sind jedoch nicht sehr beliebt. Sie werden als log-strukturierte Dateisysteme bezeichnet. Es wäre perfekt für dieses Szenario. https://en.wikipedia.org/wiki/Log-structured_file_system. Für den Moment schlage ich vor, dass Sie ein Skript schreiben, das einen Schwanz -n 100 für sich selbst macht. David Betz vor 8 Jahren 1
Danke, mir waren solche Dateisysteme nicht bekannt! Das Ideal wäre eine spezielle Datei gewesen, die sich wie Ringpuffer verhält (dies würde das Installieren und Mounten eines gesamten FS verhindern, und ich dachte, Mainstream-Linux-Distributionen würden dies bereits unterstützen). Ich werde auf jeden Fall "Schwanz" verwenden, aber ich bin froh, dass ich etwas gelernt habe :) Daladim vor 8 Jahren 0
Im Allgemeinen gibt es eine Möglichkeit, Dateien zu erstellen, die genau Ihren Vorstellungen entsprechen: benutzerdefinierte FUSE (Dateisystem im Benutzerbereich). Es ist nicht so einfach, wie Sie es sich erhofft haben, aber es ist möglich. Kamil Maciorowski vor 8 Jahren 0

3 Antworten auf die Frage

0
Gombai Sándor

Protokolle sind Textdateien (wie Dateien). Diese Art ist das Anhängen neuer Festplattenblöcke, wenn sie von neuen Zeilen verlangt werden, eine schnelle Aktion, die von jedem Dateisystem gut unterstützt wird.

Wenn die erste Zeile ständig ausgeblendet wird, wenn eine neue erscheint, bedeutet dies, dass mindestens einige, wenn nicht alle Blöcke der Datei KONSTANTE reorganisiert werden müssen. Dies würde einen großen Aufwand für die Protokollierung bedeuten, während eine der wichtigsten Eigenschaften, die wir von der Protokollierung erwarten, die Leichtigkeit ist.

Dateisysteme sind nicht darauf vorbereitet (zumindest habe ich noch nichts von diesem Typ gehört), weshalb die Protokollierung mit logrotate / tail / database hinterlegt wird, wo die letzten Datensätze von Bedeutung sind.

Danke für diesen einfachen Hinweis, über den ich nicht nachgedacht hatte :) Daladim vor 8 Jahren 0
0
Jarmund

Wenn Sie davon ausgehen, dass Sie über ein Skript verfügen, das bei jeder Ausführung nur die letzten 100 Zeilen verarbeitet, werden diese Zeilen am besten mit dem tailBefehl erfasst, da sie so ziemlich das tun, was Sie möchten. Der Schlüssel ist hier der -nSchalter, der vorschreibt, wie viele Zeilen er erfassen soll.

Sie können tail -n 100 somefile.login Ihr Skript direkt einpflegen, oder Sie können es regelmäßig ausführen tail -n 100 somefile.log > onlylast100lines.log, um eine Datei mit nur den letzten 100 Zeilen zu erstellen. Beim letzteren Ansatz wird die Zieldatei jedes Mal neu geschrieben, sodass sie zwischen den einzelnen Durchläufen nicht gelöscht werden muss.

Ich wusste von "Tail" (und ich werde es endlich benutzen), aber aus Neugier wollte ich wissen, ob es Linux-Features gibt, von denen ich nicht wusste, dass sie ihn erledigen würden. Danke trotzdem. Daladim vor 8 Jahren 0
0
Mikkel Bue Tellus

Wenn Sie auf Jarmunds-Methode eingehen, können Sie ein Bash-Skript wie folgt erstellen:

while true; do  tail -n 100 somefile.log > onlylast100lines.log sleep 5 done 

Dies würde die letzten 100 Zeilen von somefile.log alle 5 Sekunden in onlylast100lines.log analysieren. Die Datei würde jedes Mal überschrieben, also immer nur die letzten 100 Zeilen. Dies kann zu Ihrem Anmeldeskript oder zu dem Runlevel hinzugefügt werden, den Sie ausführen möchten.

Ich wusste von "Tail" (und ich werde es endlich benutzen), aber aus Neugier wollte ich wissen, ob es Linux-Features gibt, von denen ich nicht wusste, dass sie ihn erledigen würden. Danke trotzdem. Daladim vor 8 Jahren 0