In der Vergangenheit konnte ich auf Linux-Systemen große, offene Protokolldateien (d. H. Eine Datei, in die ein Prozess aktiv schreibt) mit abschneiden cat /dev/null > file.log
.
Bei 10.9 (Mavericks) scheint dies jedoch nicht der Fall zu sein. Ich habe eine 11-GB-Datei, auf die sich eine Anwendung anmeldet, aber wenn ich denselben Befehl mit dieser Datei ausführe, scheint nichts zu passieren.
Wenn ich das mit einer Datei von trivialer Größe versuche, funktioniert es.
Hier ist ls -l /dev/null
:
crw-rw-rw- 1 root wheel 3, 2 Dec 16 12:49 /dev/null
Ich habe auch erfolglos versucht cp /dev/null file.log
.
Da ich dachte, ich könnte die Truncate-Funktion ( man 2 truncate
in Darwin) nutzen, kompilierte ich diese und führte sie für zwei Dateien aus, eine von unbedeutender Größe und die andere für die eigentliche Protokolldatei. Wiederum funktionierte es gegen die Trivialdatei und nicht für das viel größere Protokoll.
/*
* Copyright (c) 2013 Thomas de Grivel <thomas@lowh.net>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
...
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <unistd.h>
int main (int argc, const char **argv)
{
int e = 0;
while (--argc) {
argv++;
if (truncate(*argv, 0)) {
e = 4;
warn("%s", *argv);
}
}
return e;
}
Der Prozess kehrt zurück, 0
unabhängig davon, welche Datei ich verwende.
du -h /tmp/file.log
Ergebnisse in11G /tmp/file.log
du
oderdu -h
sagt? Ist es möglich, dass es sich bei der Datei um eine Sparse-Datei handelt?