
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.