जवाबों:
है ना? से man mktemp
:
DESCRIPTION
Create a temporary file or directory, safely, and
print its name. TEMPLATE must contain at least 3
consecutive `X's in last component. If TEMPLATE is
not specified, use tmp.XXXXXXXXXX, and --tmpdir is
implied. Files are created u+rw, and directories
u+rwx, minus umask restrictions.
mktemp
एक अद्वितीय फ़ाइल नाम बनाने के लिए बस एक यादृच्छिक स्ट्रिंग जोड़ता है। कोई भी इसे अपने आप हटाने वाला नहीं है।
चूँकि थोड़ा सा तर्क लगता है, कुछ और विस्तार में जाने देता है। mktemp
का आदमी पेज बताता है कि
यदि TEMPLATE निर्दिष्ट नहीं है,
--tmpdir
मान लिया गया है, यदि--tmpdir
निर्दिष्ट नहीं है,/tmp
मान लिया गया है।
इसका मतलब यह है कि बस चलाने से / tmp निर्देशिका मेंmktemp
एक फ़ाइल बनाई जाएगी । तो हां, बिना किसी पैरामीटर के साथ चलने से एक फाइल बन जाएगी जो सिस्टम-निर्भर तरीके से बाकी सब चीजों के साथ साफ हो जाएगी । ऐसी फ़ाइलों के लिए, क्रिस महत्वपूर्ण होगा जैसा कि नीचे क्रिस के जवाब में बताया गया है। कई वितरणों के लिए, डिफ़ॉल्ट हर बूट को साफ कर रहा है क्योंकि सेट किया गया है । अधिकांश (यदि सभी नहीं) वितरण में, यह फ़ाइल में सेट है :tmp.RANDOM_STRING
mktemp
/tmp
$TMPTIME
/tmp
$TMPTIME
0
/etc/default/rcS
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
अब, यदि आप एक उदाहरण निर्दिष्ट करते हैं, mktemp fooXXX
तो उदाहरण के लिए एक फ़ाइल fooXXX
बनाई जाती है जिसे वर्तमान निर्देशिका XXX
में तीन यादृच्छिक वर्णों द्वारा प्रतिस्थापित किया जाता है। जब तक आप विशेष रूप से ऐसा करने के लिए नहीं चुनते हैं, तब तक यह फ़ाइल कभी नहीं हटाई जाएगी। केवल "आधिकारिक" अस्थायी निर्देशिकाओं में मौजूद फाइलें जैसे /tmp
कि सिस्टम द्वारा कभी-कभी स्वचालित रूप से हटा दी जाती हैं, कोई जादू बिट नहीं है जिसे आप सेट कर सकते हैं जो एक टेम्परेरी फ़ाइल को निर्दिष्ट करता है, बाहर की फाइलें /tmp
और इसका ilk स्वचालित रूप से हटाए नहीं जाते हैं।
अपने मुख्य प्रश्न का उत्तर देने के लिए, निश्चित रूप से एक फ़ाइल पर निर्भर होना अजीब है जो गायब हो सकता है, यही कारण है कि लोग tmp फ़ाइलों पर निर्भर नहीं होते हैं, वे अस्थायी रूप से डेटा रखने के लिए बनाए जाते हैं और हम फिर उनके बारे में भूल सकते हैं। एक लगातार, बेतरतीब ढंग से नामित फ़ाइल बनाने के कई तरीके हैं। उदाहरण के लिए:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmp
निर्देशिका कब साफ़ की जाती है लेकिन जब बनाई गई फ़ाइलें mktemp
हटा दी जाती हैं। जैसा कि आप देख सकते हैं, दो जरूरी संबंधित नहीं हैं :)।
कृपया याद रखें कि सिस्टम बूटअप के दौरान या TMPTIME के अनुसार अस्थायी फ़ाइलों को हटाया जा सकता है। कृपया देखें कि आपके पास क्या है /etc/cron.daily/tmpwatch
।
/var/tmp/
दूसरी ओर आमतौर पर प्रतिरक्षा है tmpwatch
।
अस्थायी फाइलें कम समय के लिए (आमतौर पर) बनाई जाती हैं। उनके पास अस्थायी नाम है, इसलिए समय पर हमले को अंजाम देना आसान नहीं है और आमतौर पर जब प्रोग्राम की आवश्यकता नहीं होती है तो उन्हें हटा दिया जाता है। आमतौर पर आपकी स्क्रिप्ट इस फ़ाइल को बहुत कम समय के लिए रखती है, आमतौर पर कुछ पाठ या अन्य फ़ाइलों को संसाधित करती है और इसे जल्द से जल्द हटा देगी। यदि आपकी स्क्रिप्ट क्रैश हो जाती है तो आप भी / tmp फ़ोल्डर हाउसकीपिंग प्रक्रियाओं पर वापस आ जाते हैं (यदि ऐसा आपने कहां लगाने का फैसला किया है)।
आप में अस्थायी फ़ाइल बनाने के लिए नहीं है /tmp
mktemp
कि किसी भी निर्देशिका में चलाया जा सकता है और बस एक मनमाना फ़ाइल नाम का निर्माण होता है, मैं यह नहीं देखता कि इसके साथ क्या करना है tmpwatch
।
mktemp
से में फ़ाइलें बनाता है /tmp/
।
टेंप फाइल्स अपने आप दूर नहीं जातीं। उन्हें अस्थायी फ़ाइलों को केवल इसलिए कहा जाता है क्योंकि आपकी स्क्रिप्ट या सत्र में या जहाँ भी आप उन्हें बना रहे हैं, आपसे अपेक्षा की जाती है कि जब आप काम कर लें। या उन्हें छोड़ दो अगर वह तुम्हारी चीज़ है। mktemp केवल एक ऐसी फ़ाइल के साथ आने की अनुमति देने के लिए मौजूद है जिसका नाम कुछ अद्वितीय है ताकि यह कुछ मौजूदा फ़ाइल को अधिलेखित न करे।
TMPTIME
?
/tmp
या अन्य tmp निर्देशिकाओं के लिए। यह उपयोगकर्ता-निर्मित फ़ाइलों को केवल बेतरतीब ढंग से नष्ट नहीं करेगा।
mktemp
से में फ़ाइलें बनाता है /tmp/
।