Dans le passé, sur les systèmes Linux, j'ai pu tronquer de gros fichiers journaux ouverts (c'est-à-dire un fichier qui est activement écrit par un processus) en utilisant cat /dev/null > file.log
.
Cependant, sur 10.9 (Mavericks), cela ne semble pas être le cas. J'ai un fichier de 11 Go connecté à une application, mais lorsque j'exécute la même commande avec ledit fichier, rien ne semble se produire.
Quand j'essaye ceci sur un fichier de taille insignifiante, cela fonctionne.
Voici ls -l /dev/null
:
crw-rw-rw- 1 root wheel 3, 2 Dec 16 12:49 /dev/null
J'ai également essayé cp /dev/null file.log
en vain.
Pensant que je pourrais profiter de la fonction tronquer ( man 2 truncate
dans Darwin), j'ai compilé cela et l'ai exécuté contre deux fichiers, l'un de taille triviale et l'autre le fichier journal réel. Encore une fois, cela a fonctionné contre le fichier trivial et n'a pas fonctionné sur le journal beaucoup plus volumineux.
/*
* 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;
}
Le processus retourne 0
quel que soit le fichier que j'utilise.
du -h /tmp/file.log
résultats dans11G /tmp/file.log
du
oudu -h
dire? Est-il possible que le fichier soit un fichier clairsemé?