Ich denke, diese Aufgabe kann mit sed
gelöst werden
sed -i '1,10d' myfile
würde die Zeilen von 1 bis 10 aus der Datei entfernen.
Ich denke, jeder sollte sich zumindest diese Sed 1 Liner ansehen.
Beachten Sie, dass dies nicht für Protokolldateien funktioniert, die aktiv von einer Anwendung angehängt werden (wie in der Frage angegeben).
sed -i
erstellt eine neue Datei und "löscht" die Datei, in die geschrieben wird. Die meisten Anwendungen schreiben weiterhin Protokolldatensätze in die gelöschte Protokolldatei und belegen weiterhin Speicherplatz. Die neue, abgeschnittene Protokolldatei wird nicht angehängt. Dies wird nur beendet, wenn die Anwendung neu gestartet wird oder anderweitig signalisiert wird, ihre Protokolldateien zu schließen und erneut zu öffnen. An diesem Punkt wird es eine Lücke (fehlende Protokolldatensätze) in der neuen Protokolldatei geben, wenn zwischen der Verwendung von sed und dem Neustart der Anwendung protokollierbare Aktivitäten stattgefunden haben.
Ein sicherer Weg, dies zu tun, wäre, die Anwendung anzuhalten, das Protokoll mit sed zu kürzen und die Anwendung dann neu zu starten. Dieser Ansatz kann für einige Dienste inakzeptabel sein (z. B. ein Webserver mit hohem Durchsatz und hohen Anforderungen an die Dienstkontinuität)
Nein, Betriebssysteme wie Linux und seine Dateisysteme sehen keine Vorkehrungen zum Entfernen von Daten am Anfang einer Datei vor. Mit anderen Worten, der Startpunkt der Speicherung einer Datei ist festgelegt.
Das Entfernen von Zeilen vom Anfang einer Datei wird normalerweise erreicht, indem die verbleibenden Daten in eine neue Datei geschrieben und die alten gelöscht werden. Wenn ein Programm die alte Datei zum Schreiben geöffnet hat, wird das Löschen dieser Datei verschoben, bis die Anwendung die Datei schließt.
Wie die Kommentatoren angemerkt haben, müssen Sie aus den in meinem vorherigen Satz genannten Gründen normalerweise die Protokolldateibereinigung mit den Programmen koordinieren, die die Protokolle schreiben. Wie Sie dies genau tun, hängt von den Programmen ab. Einige Programme schließen ihre Protokolldateien und öffnen sie erneut, wenn Sie ihnen ein Signal senden (z. B. HUP). Dies kann verwendet werden, um zu verhindern, dass Protokolldatensätze in eine „gelöschte“ Protokolldatei geschrieben werden, ohne den Dienst zu unterbrechen.
Es gibt viele Dienstprogramme zum Verwalten der Größe von Protokolldateien, zum Beispiel logrotate
Einige Programme haben ihre eigenen Dienstprogramme. Beispielsweise enthält der Apache-Webserver ein Rotatelogs-Dienstprogramm.
Nein. Eine Lösung für dieses allgemeine Problem des Wachstums von Protokolldateien ist die Protokollrotation. Dies beinhaltet das regelmäßige (normalerweise jede Nacht oder wöchentlich) Verschieben einer vorhandenen Protokolldatei auf einen anderen Dateinamen und das erneute Starten mit einer leeren Protokolldatei. Nach einer gewissen Zeit werden die alten Protokolldateien verworfen.
Siehe:http://www-uxsup.csx.cam.ac.uk/~jw35/courses/apache/html/x1670.htm