Ich kenne drei Methoden, um alle Einträge aus einer Datei zu löschen.
Sie sind
>filename
touch filename
filename < /dev/null
Von diesen dreien missbrauche ich >filename
am meisten, da dies die geringste Anzahl von Tastenanschlägen erfordert.
Ich möchte jedoch wissen, welche der drei Methoden (sofern es effizientere Methoden gibt) in Bezug auf große Protokolldateien und kleine Dateien am effizientesten ist.
Wie funktionieren die drei Codes und wie löschen sie den Inhalt?
shell-script
files
debal
quelle
quelle
truncate -s 0 filename
?Antworten:
Tatsächlich
touch filename
löscht das zweite Formular nichts aus der Datei - es erstellt nur eine leere Datei, wenn keine vorhanden ist, oder aktualisiert das Datum der letzten Änderung einer vorhandenen Datei.Und der dritte
filename < /dev/null
versucht, Dateinamen/dev/null
als Eingabe auszuführen .cp /dev/null filename
funktioniert.Was die Effizienz betrifft, wäre die Effizienz am größten
truncate -s 0 filename
. siehe hier: http://linux.die.net/man/1/truncate .Ansonsten
cp /dev/null filename
oder> filename
beides in Ordnung. Beide öffnen und schließen die Datei mit der Einstellung "Beim Öffnen abschneiden".cp
öffnet auch/dev/null
, so dass es geringfügig langsamer macht.Auf der anderen Seite
truncate
wäre dies wahrscheinlich langsamer als> filename
beim Ausführen eines Skripts, da das System zum Ausführen des Befehls truncate das ausführbare Programm öffnen, laden und ausführen muss.quelle
truncate
am effizientesten?> filename
Methoden aufrufen müssen.truncate(2)
tut das nicht.touch filename
, bleibt der Inode derselbe (vorausgesetzt, es gab vorher eine Datei)?ls -i
Eine andere Option könnte sein:
Aus der Manpage von
echo
:quelle
Es gibt einen eingebauten Befehl ":", der unter Umständen in sh, csh, bash und anderen verfügbar ist und mit dem Umleitungs-Ausgabeoperator zum
>
Abschneiden einer Datei verwendet werden kann:Was ich daran mag ist, dass es keine externen Befehle wie "Echo" etc. benötigt.
Ein großer Vorteil des Abschneidens von Dateien, anstatt sie zu löschen / neu zu erstellen, ist, dass das Ausführen von Anwendungen, die mit dieser Datei funktionieren (z. B. jemand erstellt eine
tail -f filename
oder eine Überwachungssoftware, ...), diese nicht erneut öffnen muss. Sie können den Filedescriptor einfach weiterverwenden und erhalten alle neuen Daten.quelle
man bash
beschreibt die:
eingebaute Shell als wirkungslos.>
in in die Datei um, die die Datei erstellt, wenn sie nicht vorhanden ist, und wenn sie vorhanden ist, kürzen Sie sie auf Null. Besser gesagt: Sie verwenden das:
, um nichts zu tun, und verwenden>
, um nichts in eine Datei umzuleiten und diese zu kürzen.> file
reicht aus, um eine Datei abzuschneiden. Sie benötigen keinen Befehl, nur den Umleitungsoperator.> filename
funktioniert nicht. Zum Beispiel in zsh.: > filename
funktioniert aber trotzdem.> myfile
aber zB csh-Fehler mit zu mögen : Ungültiger Null-Befehl.