मटमैले से बनी अस्थायी फाइलें कितने समय तक चलती हैं?


20

मैं सोच रहा था कि कितने लंबे अस्थायी फ़ाइलें पिछले mktemp के साथ बनाई गई हैं। मुझे उस फ़ाइल पर भरोसा करना अजीब लगता है जो किसी भी समय गायब हो सकती है। मैं ubuntu पर हूँ, अगर यह मायने रखता है।

जवाबों:


17

है ना? से 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

2
यह मेरे सवाल का जवाब नहीं है। यह कहता है कि यह एक "अस्थायी" फ़ाइल बनाता है, और इस पर कोई जानकारी नहीं देता है कि यह कितने समय तक रहता है। तो यह हमेशा के लिए रहता है? क्या tmp निर्देशिका सिस्टम बूट पर उपलब्ध है?
एमवायवी

@Maksim अपडेटेड उत्तर देखें। साथ ही, आपके प्रश्न ने यह नहीं पूछा कि tmpनिर्देशिका कब साफ़ की जाती है लेकिन जब बनाई गई फ़ाइलें mktempहटा दी जाती हैं। जैसा कि आप देख सकते हैं, दो जरूरी संबंधित नहीं हैं :)।
टेराडो

6

कृपया याद रखें कि सिस्टम बूटअप के दौरान या TMPTIME के ​​अनुसार अस्थायी फ़ाइलों को हटाया जा सकता है। कृपया देखें कि आपके पास क्या है /etc/cron.daily/tmpwatch

/var/tmp/दूसरी ओर आमतौर पर प्रतिरक्षा है tmpwatch

अस्थायी फाइलें कम समय के लिए (आमतौर पर) बनाई जाती हैं। उनके पास अस्थायी नाम है, इसलिए समय पर हमले को अंजाम देना आसान नहीं है और आमतौर पर जब प्रोग्राम की आवश्यकता नहीं होती है तो उन्हें हटा दिया जाता है। आमतौर पर आपकी स्क्रिप्ट इस फ़ाइल को बहुत कम समय के लिए रखती है, आमतौर पर कुछ पाठ या अन्य फ़ाइलों को संसाधित करती है और इसे जल्द से जल्द हटा देगी। यदि आपकी स्क्रिप्ट क्रैश हो जाती है तो आप भी / tmp फ़ोल्डर हाउसकीपिंग प्रक्रियाओं पर वापस आ जाते हैं (यदि ऐसा आपने कहां लगाने का फैसला किया है)।

आप में अस्थायी फ़ाइल बनाने के लिए नहीं है /tmp


जैसा mktempकि किसी भी निर्देशिका में चलाया जा सकता है और बस एक मनमाना फ़ाइल नाम का निर्माण होता है, मैं यह नहीं देखता कि इसके साथ क्या करना है tmpwatch
टेराडॉन

1
डिफ़ॉल्ट रूप mktempसे में फ़ाइलें बनाता है /tmp/
क्रिस

केवल अगर आप कोई TEMPLATE नहीं देते हैं, तो मेरा अद्यतन उत्तर देखें।
टेराडन

1

टेंप फाइल्स अपने आप दूर नहीं जातीं। उन्हें अस्थायी फ़ाइलों को केवल इसलिए कहा जाता है क्योंकि आपकी स्क्रिप्ट या सत्र में या जहाँ भी आप उन्हें बना रहे हैं, आपसे अपेक्षा की जाती है कि जब आप काम कर लें। या उन्हें छोड़ दो अगर वह तुम्हारी चीज़ है। mktemp केवल एक ऐसी फ़ाइल के साथ आने की अनुमति देने के लिए मौजूद है जिसका नाम कुछ अद्वितीय है ताकि यह कुछ मौजूदा फ़ाइल को अधिलेखित न करे।


कुछ सिस्टम एक का उपयोग नहीं करते TMPTIME?
संकोची

@demure हां लेकिन केवल स्पष्ट /tmpया अन्य tmp निर्देशिकाओं के लिए। यह उपयोगकर्ता-निर्मित फ़ाइलों को केवल बेतरतीब ढंग से नष्ट नहीं करेगा।
टेराडॉन

डिफ़ॉल्ट रूप mktempसे में फ़ाइलें बनाता है /tmp/
क्रिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.