Wie man unter Linux Dateien trunkiert (leert)
In manchen Situationen möchte man eine bestehende Datei auf eine Länge von Null trunkieren (leeren). Einfach ausgedrückt bedeutet das Kürzen einer Datei, dass der Inhalt der Datei entfernt wird, ohne die Datei zu löschen.
Das Kürzen einer Datei ist viel schneller und einfacher als das Löschen der Datei, das Neuerstellen der Datei und das Einstellen der richtigen Berechtigungen und des Besitzers. Wenn die Datei von einem Prozess geöffnet wird, kann das Entfernen der Datei außerdem dazu führen, dass das Programm, das die Datei verwendet, nicht mehr funktioniert.
Dieses Tutorial erklärt, wie man Dateien in Linux-Systemen mit Hilfe der Shell-Umleitung und des truncate
-Befehls auf die Größe Null abschneidet.
Shell-Umleitung #
Die einfachste und am häufigsten verwendete Methode zum Abschneiden von Dateien ist die Verwendung des >
-Shell-Umleitungsoperators.
Das allgemeine Format für das Abschneiden von Dateien mit Umleitung ist:
: > filename
Lassen Sie uns den Befehl aufschlüsseln:
- Der
:
Doppelpunkt bedeutettrue
und erzeugt keine Ausgabe. - Der Umleitungsoperator
>
leitet die Ausgabe des vorhergehenden Befehls in die angegebene Datei um. -
filename
, die Datei, die abgeschnitten werden soll.
Wenn die Datei existiert, wird sie auf Null abgeschnitten. Andernfalls wird die Datei erstellt.
Anstelle von :
kann auch ein anderer Befehl verwendet werden, der keine Ausgabe erzeugt.
Hier ist ein Beispiel für die Verwendung des cat
Befehls, um den Inhalt des Geräts /dev/null
auszugeben, das nur ein Dateiendezeichen zurückgibt:
cat /dev/null > filename
Ein anderer Befehl, der verwendet werden kann, ist echo
. Die Option -n
weist echo
an, keinen Zeilenumbruch anzuhängen:
echo -n > filename
Auf den meisten modernen Shells wie Bash oder Zsh können Sie den Befehl vor dem Umleitungssymbol weglassen und verwenden:
> filename
Um eine Datei abschneiden zu können, müssen Sie Schreibrechte für die Datei haben. Normalerweise würden Sie dafür sudo
verwenden, aber die erhöhten Root-Rechte gelten nicht für die Umleitung. Hier ist ein Beispiel:
sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied
Es gibt mehrere Lösungen, die eine Umleitung mit sudo
ermöglichen. Die erste Möglichkeit besteht darin, eine neue Shell mit sudo zu starten und einen Befehl innerhalb dieser Shell mit dem -c
-Flag auszuführen:
sudo sh -c '> filename'
Eine andere Möglichkeit besteht darin, die Ausgabe an den tee
-Befehl zu leiten, die tee
-Rechte mit sudo
zu erhöhen und die leere Ausgabe in eine bestimmte Datei zu schreiben:
: | sudo tee filename
truncate Command #
truncate
ist ein Kommandozeilenprogramm, mit dem Sie eine Datei auf eine bestimmte Größe verkleinern oder vergrößern können.
Die allgemeine Syntax für das Abschneiden von Dateien auf die Größe Null mit dem Befehl truncate
lautet wie folgt:
truncate -s 0 filename
Die Option -s 0
setzt die Dateigröße auf Null.
Um beispielsweise das Nginx-Zugriffsprotokoll zu leeren, verwenden Sie:
sudo truncate -s 0 /var/log/nginx/access.log
Alle Protokolldateien leeren #
Mit der Zeit kann Ihr Laufwerk mit vielen großen Protokolldateien überladen werden, die viel Speicherplatz belegen.
Der folgende Befehl leert Dateien, die mit „.log“ endenden Dateien unter dem Verzeichnis /var/log
leeren:
sudo truncate -s 0 /var/log/**/*.log
Eine bessere Option wäre es, die Protokolldateien mit dem logrotate
Tool zu rotieren, zu komprimieren und zu entfernen.
Schlussfolgerung #
Um eine Datei unter Linux zu kürzen, verwenden Sie den Umleitungsoperator >
gefolgt vom Dateinamen.