So leeren Sie eine Datei richtig

So leeren Sie eine Datei richtig

Ok, ich versuche also, eine Datei zu leeren. Es ist eine Textprotokolldatei, die kontinuierlich geschrieben wird. Mein ls -lh sagt, sie ist 3 GB groß

ich renne

 > file.log

Mein ls -lh sagt, es sind immer noch 3 GB

Allerdings ist die Größe des Ordners, der diese Datei enthält, 3 GB kleiner. Seltsamerweise zeigt das Zählen der Zeilen an, dass er nicht leer ist, und ich kann ihn nicht mit vim öffnen (zu groß).

Ich habe keinen Administratorzugriff, bin jedoch der Eigentümer der Datei.

Ich habe versucht, eine neue Datei mit nur der ersten Zeile zu erstellen, um zu sehen, was passiert

head -1 file.log > first_line.txt

Und die Datei first_line.txt ist 3 GB groß. Das ist in der Tat ein seltsames Verhalten.

Frage 1: Warum leert mein erster Befehl die Datei nicht?

Frage 2: Wie kann ich die Datei leeren, ohne sie zu löschen?

Danke,

BEARBEITEN nach Kommentaren: Die Datei wird kontinuierlich von anderen Prozessen geöffnet und beschrieben.

Leider kann ich in diese Prozesse nicht eingreifen, also kann ich sie nicht vorübergehend beenden oder neu starten

Antwort1

Ihre Datei wird von einem Prozess festgehalten, Sie können sie nicht löschen.

Verwenden Sie es lsof file.log, um zu wissen, welcher Prozess darauf schreibt.

Dann

mv file.log old.file.log

Starten Sie den Vorgang neu. (Dies hängt vom Vorgang ab.)

Als nächstes können Sie löschen old.file.log.

Wenn Ihre Datei-ID aufgeführt ist, /etc/logrotate.d/*können Sie einen Logrotate-Befehl ausgeben.

Antwort2

Um die Datei (fast) zu leeren, verwenden Sie den Befehl

echo "" > file.log

Oder, falls Ihr Betriebssystem es unterstützt,

truncate file.log --size 0

Wird es auf 0 Bytes kürzen.

Wenn die Datei keine Zeilenumbrüche hat, ist es möglich, dass die gesamte Datei 1 Zeile lang ist, was eine 3-GB-Datei erklärt.

Sie können eine Probe der Datei mit dem folgenden Befehl abrufen:

dd if=file.log of=firstpart.txt count=1 bs=200

Dadurch werden die ersten 200 Bytes der Datei belegt. (Wenn Sie mehr benötigen, erhöhen Sie den Parameter „bs“ auf bis zu 4096. Wenn Sie mehr benötigen, verwenden Sie den Parameter count. Um 8192 Blöcke zu erhalten, verwenden Sie count=2 bs=4096.)

@Archemar, der Rat ist gut, aber ich bin nicht sicher, ob er Ihre Fragen beantwortet.

verwandte Informationen