ในอดีตที่ผ่านมาบนระบบลินุกซ์, ฉันได้รับสามารถที่จะตัดขนาดใหญ่ล็อกไฟล์เปิด (นั่นคือแฟ้มที่จะถูกเขียนอย่างแข็งขันโดยกระบวนการที่) 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
ในดาร์วิน) ฉันรวบรวมและวิ่งกับไฟล์สองไฟล์หนึ่งในขนาดที่ไม่สำคัญและอีกไฟล์บันทึกจริง อีกครั้งมันทำงานกับไฟล์เล็ก ๆ น้อย ๆ และไม่ทำงานในบันทึกที่มีขนาดใหญ่กว่ามาก
/*
* 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
พูดอะไร เป็นไปได้หรือไม่ที่ไฟล์เป็นไฟล์แบบกระจาย