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

MethodeBefehl
Shell-Umleitung> dateiname
Mit Root-Rechtensudo sh -c '> dateiname'
truncatetruncate -s 0 dateiname
truncate mit sudosudo truncate -s 0 dateiname

Für einzelne Dateien ist die Shell-Umleitung am kürzesten. Bei Root-Rechten oder mehreren Dateien ist truncate praktischer.