Ich habe eine Datei namens error.log auf meinem Server, die ich häufig abschneiden muss. Ich habe rw-Berechtigungen für die Datei. Das Öffnen der Datei in vi> Löschen aller Inhalte> Speichern funktioniert (offensichtlich). Aber wenn ich das unten versuche
cat /dev/null > error.log
Ich verstehe die Nachricht
File already exists.
Offensichtlich wird auf dem Server eine Konfiguration vorgenommen, um ein versehentliches Überschreiben von Dateien zu verhindern. Kann jemand sagen, wie ich die Datei in einem einzigen Befehl "abschneiden" kann?
linux
file
command-line
Sumeet Pareek
quelle
quelle
Antworten:
Sie haben die
noclobber
Option festgelegt. Der Fehler scheint von csh zu stammen, also würden Sie Folgendes tun:Wenn ich falsch liege und Sie Bash verwenden, sollten Sie Folgendes tun:
In Bash können Sie das auch verkürzen auf:
quelle
File exists
Fehler aus, während bash den sehr unterschiedlichencannot overwrite existing file
Fehler ausgibt.>file
funktioniert nicht.> file
und>| file
?noclobber
Option festgelegt haben, schlägt der Versuch, zu einer vorhandenen Datei umzuleiten, fehl. Um die spezifische Umleitung zu überschreiben, während noclobber eingeschaltet bleibt, können Sie>|
Sie können auch die Funktion Abschneiden verwenden
Wenn die Erlaubnis verweigert wird, verwenden Sie sudo
Hilfe / Handbuch: Mann abschneiden
getestet auf Ubuntu Linux
quelle
Dies reicht aus, um die Dateigröße auf 0 zu setzen:
quelle
Der Kredit geht an meinen älteren Kollegen dafür:
Dadurch werden Protokolldateien nicht beschädigt, sodass Sie sie beispielsweise sogar für Syslog verwenden können.
quelle
:
ist ein No-Effect-Befehl (fast ein Kommentar) und wird dann>
wie gewohnt umgeleitet. Dadurch wird nur die fehlende Ausgabe eines Befehls umgeleitet, der nichts in die Datei einfügt. Wenn noclobber aktiviert ist, benötigen Sie:>| filename
(bash) (und ich nehme:>! filename
in csh an, vorausgesetzt, csh hat:
).kann auch funktionieren
quelle
dd
wäre es sogar noch besser, nichts auszugeben, als einfach lesbar zu seinfalse
?Da sudo nicht mit Umleitung funktioniert
>
, gefällt mir dertee
Befehl zu diesem Zweckquelle
error.log
. Wenn diese bereits beschreibbar sind, muss kein Sudo ausgeführt werden. Ich denke, das andere Problem ist, dass Sie den Befehl als Zeichenfolgenargument übergebensh
. Ich weiß nicht, wie das intern behandelt wird, aber das ist eine weitere Ebene der Komplexität / Umleitung, die hinzugefügt wurdeecho ""
eine neue Zeile hinzugefügt wird. Sie können verwendenecho -n ""
, um die Newline zu unterdrückenJeder kann diesen Befehl versuchen, um jede Datei im Linux-System abzuschneiden
Dies wird sicherlich in jedem Format funktionieren:
quelle
Ich mag das:
cp /dev/null file
quelle
Sie können auch versuchen:
echo -n > /my/file
quelle
noclobber
und fragen Sie sich dann, ob Ihre Antwort überhaupt Sinn macht.