Trước đây, trên các hệ thống linux, tôi đã có thể cắt bớt các tệp nhật ký lớn, mở (nghĩa là một tệp đang được một quá trình tích cực ghi vào một quy trình) bằng cách sử dụng cat /dev/null > file.log
.
Tuy nhiên, vào ngày 10.9 (Mavericks), điều đó dường như không xảy ra. Tôi đã có một tệp 11GB đang được đăng nhập bởi một ứng dụng, nhưng khi tôi thực hiện cùng một lệnh với tệp đã nói, dường như không có gì xảy ra.
Khi tôi thử điều này trên một tập tin có kích thước tầm thường, nó hoạt động.
Đây là ls -l /dev/null
:
crw-rw-rw- 1 root wheel 3, 2 Dec 16 12:49 /dev/null
Tôi cũng đã cố gắng cp /dev/null file.log
vô ích.
Nghĩ rằng tôi có thể tận dụng chức năng cắt ngắn ( man 2 truncate
ở Darwin), tôi đã biên dịch nó và chạy nó với hai tệp, một kích cỡ tầm thường và tệp kia là tệp nhật ký thực tế. Một lần nữa, nó hoạt động chống lại tệp tầm thường và không hoạt động trên nhật ký lớn hơn nhiều.
/*
* 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;
}
Quá trình trả về 0
bất kể tập tin nào tôi sử dụng.
du -h /tmp/file.log
kết quả trong11G /tmp/file.log
du
haydu -h
nói gì? Có thể các tập tin là một tập tin thưa thớt?