過去に、Linuxシステムでは、を使用して、大きく開いたログファイル(つまり、プロセスによってアクティブに書き込まれているファイル)を切り捨てることができましたcat /dev/null > file.log
。
ただし、10.9(Mavericks)では、そうではないようです。アプリケーションによって記録されている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
ダーウィン)を利用するかもしれないと考えて、これをコンパイルし、サイズが小さいファイルと実際のログファイルの2つのファイルに対して実行しました。繰り返しますが、それは些細なファイルに対して機能し、はるかに大きなログでは機能しませんでした。
/*
* 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
と言いますか?ファイルがスパースファイルである可能性はありますか?