अतीत में, लिनक्स सिस्टम पर, मैं बड़ी, खुली लॉग फाइल (यानी, एक ऐसी फ़ाइल जो सक्रिय रूप से एक प्रक्रिया द्वारा लिखी जा रही है) का उपयोग करके काट-छाँट करने में सक्षम है 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
कहता है? क्या यह संभव है कि फ़ाइल एक विरल फ़ाइल है?