जवाबों:
है ना? से 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$TMPTIME0/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/।