Eine Datei zu leeren bedeutet, ihren Inhalt zu entfernen, ohne sie zu löschen. Das ist oft die bessere Wahl als Löschen und Neuerstellen, denn Berechtigungen und Eigentümer bleiben erhalten. Außerdem: Wenn ein Programm die Datei gerade geöffnet hat, führt das Löschen zu Problemen.
Shell-Umleitung
Die schnellste Methode nutzt den Doppelpunkt : mit Umleitung:
: > dateiname
Der Doppelpunkt ist ein Synonym für true und erzeugt keine Ausgabe. Der Umleitungsoperator > schreibt diese leere Ausgabe in die Datei und überschreibt dabei den gesamten Inhalt.
Alternative Schreibweisen
In Bash und Zsh kannst du den Befehl vor dem Umleitungssymbol weglassen:
> dateiname
Oder du leitest /dev/null in die Datei um:
cat /dev/null > dateiname
Eine weitere Möglichkeit ist echo mit der Option -n, die den Zeilenumbruch unterdrückt:
echo -n > dateiname
Dateien mit Root-Rechten leeren
Bei Systemdateien wie Logs brauchst du Root-Rechte. Ein einfaches sudo vor dem Befehl funktioniert nicht, da die Umleitung von der Shell ausgeführt wird:
sudo : > /var/log/syslog
# Ergebnis: Berechtigung verweigert
Lösung 1: Starte eine neue Shell mit Root-Rechten:
sudo sh -c '> /var/log/syslog'
Lösung 2: Nutze tee mit sudo:
: | sudo tee /var/log/syslog > /dev/null
Der truncate-Befehl
Der Befehl truncate setzt die Dateigröße auf einen bestimmten Wert. Mit -s 0 leerst du die Datei:
truncate -s 0 dateiname
Im Gegensatz zur Shell-Umleitung funktioniert truncate direkt mit sudo:
sudo truncate -s 0 /var/log/nginx/access.log
Mehrere Log-Dateien leeren
Mit Glob-Mustern leerst du alle passenden Dateien auf einmal. Der folgende Befehl leert alle .log-Dateien unterhalb von /var/log:
sudo truncate -s 0 /var/log/**/*.log
Für die regelmäßige Wartung von Log-Dateien ist logrotate die bessere Wahl. Das Tool rotiert, komprimiert und löscht Logs automatisch nach einem konfigurierbaren Zeitplan.
Zusammenfassung
| Methode | Befehl |
|---|---|
| Shell-Umleitung | > dateiname |
| Mit Root-Rechten | sudo sh -c '> dateiname' |
| truncate | truncate -s 0 dateiname |
| truncate mit sudo | sudo truncate -s 0 dateiname |
Für einzelne Dateien ist die Shell-Umleitung am kürzesten. Bei Root-Rechten oder mehreren Dateien ist truncate praktischer.