Раньше в системах Linux я мог обрезать большие открытые файлы журналов (то есть файл, который активно записывается процессом) с использованием cat /dev/null > file.log
.
Тем не менее, на 10,9 (Mavericks), это не так. У меня есть файл размером 11 ГБ, в который регистрируется приложение, но когда я выполняю ту же команду с указанным файлом, кажется, ничего не происходит.
Когда я пробую это на файле тривиального размера, это работает.
Вот ls -l /dev/null
:
crw-rw-rw- 1 root wheel 3, 2 Dec 16 12:49 /dev/null
Я также пытался cp /dev/null file.log
безрезультатно.
Думая, что я мог бы воспользоваться функцией усечения ( man 2 truncate
в Дарвине), я скомпилировал это и запустил для него два файла, один из которых имеет тривиальный размер, а другой - сам файл журнала. Снова, это работало против тривиального файла и не работало на намного большем журнале.
/*
* 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
независимо от того, какой файл я использую.
du -h /tmp/file.log
Результаты:11G /tmp/file.log
du
илиdu -h
сказать? Возможно ли, что файл является разреженным файлом?