Geçmişte, linux sistemlerde, büyük, açık günlük dosyalarını (yani, bir işlem tarafından aktif olarak yazılan bir dosyayı) kullanarak kesebildim cat /dev/null > file.log
.
Ancak, 10.9'da (Mavericks) durum böyle görünmüyor. Bir uygulama tarafından oturum açmış 11GB'lık bir dosyam var, ancak adı geçen dosyayla aynı komutu gerçekleştirdiğimde hiçbir şey olmuyor gibi görünüyor.
Bunu önemsiz boyuttaki bir dosyada denediğimde işe yarıyor.
İşte ls -l /dev/null
:
crw-rw-rw- 1 root wheel 3, 2 Dec 16 12:49 /dev/null
Ben de cp /dev/null file.log
boşuna çalıştım .
Kesik işlevden ( man 2 truncate
Darwin'de) yararlanabileceğimi düşünerek bunu derledim ve biri önemsiz boyutta diğeri gerçek günlük dosyası olan iki dosyaya karşı çalıştırdım. Yine, önemsiz dosyaya karşı çalıştı ve çok daha büyük kütük üzerinde çalışmadı.
/*
* 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;
}
0
Hangi dosyayı kullandığımdan bağımsız olarak işlem geri döner .
du -h /tmp/file.log
sonuçları11G /tmp/file.log
du
ya dadu -h
diyor? Dosyanın seyrek bir dosya olması mümkün mü?