Di masa lalu, pada sistem linux, saya bisa memotong file log yang besar dan terbuka (yaitu, file yang sedang aktif ditulis oleh suatu proses) menggunakan cat /dev/null > file.log
.
Namun, pada 10.9 (Mavericks), sepertinya tidak demikian. Saya punya file 11GB yang sedang didata oleh aplikasi, tetapi ketika saya melakukan perintah yang sama dengan file tersebut, sepertinya tidak ada yang terjadi.
Ketika saya mencoba ini pada file ukuran sepele, itu berhasil.
Ini adalah ls -l /dev/null
:
crw-rw-rw- 1 root wheel 3, 2 Dec 16 12:49 /dev/null
Saya juga sudah mencoba cp /dev/null file.log
tidak berhasil.
Berpikir bahwa saya dapat mengambil keuntungan dari fungsi truncate ( man 2 truncate
di Darwin) saya mengkompilasi ini dan menjalankannya terhadap dua file, satu ukuran sepele dan yang lainnya file log yang sebenarnya. Sekali lagi, ini bekerja melawan file sepele dan tidak bekerja pada log yang jauh lebih besar.
/*
* 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;
}
Proses kembali 0
terlepas dari file mana yang saya gunakan.
du -h /tmp/file.log
hasil dalam11G /tmp/file.log
du
ataudu -h
dikatakan? Apakah mungkin file tersebut adalah file yang jarang?