과거에는 Linux 시스템에서을 사용하여 크고 열린 로그 파일 (즉, 프로세스에서 활발하게 쓰는 파일)을자를 수있었습니다 cat /dev/null > file.log
.
그러나 10.9 (매버릭스)에서는 그렇지 않습니다. 응용 프로그램에서 11GB 파일을 기록하고 있지만 해당 파일과 동일한 명령을 수행하면 아무 일도 일어나지 않는 것 같습니다.
사소한 크기의 파일로 시도하면 작동합니다.
여기 있습니다 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
Darwin에서) 을 활용할 수 있다고 생각하여 이것을 컴파일하고 두 가지 파일, 하나는 사소한 크기의 파일과 다른 하나는 실제 로그 파일에 대해 실행했습니다. 다시, 그것은 사소한 파일에 대해 작동했으며 훨씬 더 큰 로그에서는 작동하지 않았습니다.
/*
* 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
말? 파일이 희소 파일 일 수 있습니까?