उस उद्देश्य के लिए एक उपकरण बनाया गया है:
truncate -s 0 filename
इससे सामग्री साफ हो जाएगी लेकिन यह अभी भी एक ही फाइल होगी ( इनोड वही रहती है)।
यह महत्वपूर्ण है क्योंकि कुछ प्रोग्राम फ़ाइल को "इनकोड द्वारा" संभालते हैं। मान लीजिए कि आपने फ़ाइल को हटाने और पुनः बनाने की भोली विधि का उपयोग करके एक फ़ाइल को "खाली" किया है। कुछ कार्यक्रम अभी भी पुरानी फ़ाइल (पुरानी सामग्री के साथ) को संभाल सकते हैं, भले ही वह अब सामान्य साधनों की तरह दिखाई न दे ls।
इस उत्तर के अंत में अधिक जानकारी के लिए कुछ लिंक।
एक और तरीका, शायद याद रखना आसान है:
echo -n > filename
यह भी समान आवक रखता है।
नोट दोनों कि truncateऔर echo -nसे परिभाषित नहीं कर रहे हैं POSIX ।
POSIX अनुपालन उपयोग के लिए cat /dev/null:
cat /dev/null > filename
फिर भी एक और तरीका, अधिक अस्पष्ट और शायद अज्ञेय नहीं है:
> filename
यदि फ़ाइल को अलग करने के लिए रूट विशेषाधिकारों को लिखने की जरूरत है तो निम्नलिखित पंक्तियां उतनी कारगर नहीं होंगी जितनी कि अपेक्षित है:
sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename
ऐसा इसलिए है क्योंकि सूडो को अंजाम देने से पहले ही पुनर्निर्देशन शेल द्वारा किया जाता है। इसका मतलब है कि फ़ाइल तक लिखने की पहुंच शेल चलाने वाले उपयोगकर्ता के विशेषाधिकारों का उपयोग करके की जाती है, न कि उन विशेषाधिकारों की जो सूडो द्वारा दिए जाएंगे।
वर्कअराउंड इस तरह से sudo विशेषाधिकार का उपयोग करके निष्पादित शेल में पुनर्निर्देशन को स्थगित करना है:
sudo sh -c "echo -n > filename"
उपयोग करने के लिए truncateआपको इस तरह के वर्कअराउंड की आवश्यकता नहीं होती है क्योंकि लिखने की पहुंच शेल द्वारा नहीं की जाती है, लेकिन इसके द्वारा truncatesudo विशेषाधिकार का उपयोग करके sudo द्वारा निष्पादित किया जाता है।
sudo truncate -s 0 filename
फ़ाइल को खुले रखने वाले प्रोग्राम के बारे में कुछ विवरण के लिए भले ही फ़ाइल को हटा दिया गया हो, आप निम्न को पढ़ सकते हैं:
tail -n +1000 file.txt > file.txt1000 लाइनों को हटा देना चाहिए और फ़ाइल में सबसे नई लाइनों को रखना चाहिए (आपको कभी नहीं पता होगा कि आपको कुछ ट्रैक करने के लिए हाल के रिकॉर्ड की आवश्यकता हो सकती है)।