Zu diesem Zweck wurde ein Tool erstellt:
truncate -s 0 filename
Dadurch wird der Inhalt gelöscht, es bleibt jedoch die gleiche Datei (die Inode bleibt gleich).
Dies ist wichtig, da einige Programme ein Handle auf die Datei "by inode" haben. Angenommen, Sie "leeren" eine Datei mithilfe der naiven Methode zum Löschen und Neuerstellen der Datei. Einige Programme behalten möglicherweise immer noch ein Handle für die alte Datei (mit dem alten Inhalt), auch wenn sie nicht mehr wie gewohnt sichtbar ist ls.
Einige Links zu weiteren Details am Ende dieser Antwort.
Ein anderer Weg, vielleicht leichter zu merken:
echo -n > filename
Dies hält auch die gleiche Inode.
Beachten Sie, dass beide truncateund echo -nnicht von POSIX definiert werden .
Für die POSIX-Konformität verwenden Sie cat /dev/null:
cat /dev/null > filename
Noch ein anderer Weg, obskurer und wahrscheinlich nicht Shell-Agnostiker:
> filename
Wenn die zu schneidende Datei zum Schreiben Root-Rechte benötigt, funktionieren die folgenden Zeilen nicht wie erwartet:
sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename
Dies liegt daran, dass die Umleitung von der Shell durchgeführt wird, noch bevor sudo ausgeführt wird. Dies bedeutet, dass der Schreibzugriff auf die Datei mit den Rechten des Benutzers erfolgt, der die Shell ausführt, nicht mit den Rechten, die von sudo gewährt werden.
Eine Problemumgehung besteht darin, die Umleitung auf eine Shell zu verschieben, die mit folgenden sudo-Berechtigungen ausgeführt wird:
sudo sh -c "echo -n > filename"
Für die Verwendung von truncatebenötigen Sie keine solche Problemumgehung, da der Schreibzugriff nicht von der Shell vorgenommen wird, sondern truncatevon sudo mit sudo-Berechtigungen ausgeführt wird.
sudo truncate -s 0 filename
Einige wichtige Informationen zu Programmen, die die Datei geöffnet halten, auch wenn die Datei gelöscht wurde, finden Sie in den folgenden Abschnitten:
tail -n +1000 file.txt > file.txtsollte 1000 Zeilen entfernen und die neuesten Zeilen in der Datei behalten (Sie wissen nie, wann Sie einen Teil des letzten Datensatzes benötigen, um etwas zu verfolgen).