मैं / tmp के अंदर एक फोल्डर को कैसे साफ़ होने से रोकता हूँ?


12

यह प्रश्न मेरे डेवलपर लैपटॉप पर Ubuntu 14.10 के बारे में है।

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

अब /tmp/fooहर बार जब मैं अपनी मशीन को रिबूट करता हूं तो वह डिलीट हो जाती है। अब तक मैंने रिबूट के बाद मैन्युअल रूप से फ़ोल्डर को फिर से बनाया है। अब मैंने जाना कि कैसे / tmp निर्देशिका को साफ किया जाता है? वहाँ एक काम है कि कर रहा है।

मैंने देखा है, /etc/init/mounted-tmp.confलेकिन मेरे बशफू और विशेष रूप से मेरे खोजफू को वह करने के लिए पर्याप्त नहीं है जो मैं चाहता हूं। यहाँ उस फ़ाइल का एक अंश दिया गया है:

   EXCEPT='! -name .
            ! ( -path ./lost+found -uid 0 )
            ! ( -path ./quota.user -uid 0 )
            ! ( -path ./aquota.user -uid 0 )
            ! ( -path ./quota.group -uid 0 )
            ! ( -path ./aquota.group -uid 0 )
            ! ( -path ./.journal -uid 0 )
            ! ( -path ./.clean -uid 0 )
            ! ( -path "./...security*" -uid 0 )'

   # Remove all old files, then all empty directories
   find . -depth -xdev $TEXPR $EXCEPT ! -type d -delete
   find . -depth -xdev $DEXPR $EXCEPT -type d -empty -delete

मैं जो करना चाहता हूं वह एक ऐसी शर्त है जो इसे हर अंदर को नष्ट कर देती है /tmp/foo, लेकिन /tmp/fooखुद को नहीं । मैं उसको कैसे करू?


है /tmp/fooएक निर्देशिका या फ़ाइल?
टेराडॉन

एक निर्देशिका। अंदर फाइलें हैं।
सिमबेक

mkdir /tmp/fooपहले क्यों नहीं जोड़ा गया end script?
हेगन वॉन एटिजन

बस FYI (आप पहले से ही यह जान सकते हैं): 14.10 जुलाई 2015 में EOL तक पहुँच गया है, इसलिए आपको जल्द से जल्द Vivid में अपग्रेड करना चाहिए।
लीओ लैम

जवाबों:


20

/etc/init/mounted-tmp.confmountallपैकेज का हिस्सा है , इसलिए उस पैकेज पर कोई भी अपडेट और सुझाए गए बदलाव वापस किए जाएंगे।

$ sudo dpkg -S /etc/init/mounted-tmp.conf 
mountall: /etc/init/mounted-tmp.conf

इसके बजाय, फाइलसिस्टम हिरेची मानक (FHS) के अनुसार ;

के बारे में / tmp :

प्रोग्राम को यह नहीं मानना ​​चाहिए कि प्रोग्राम के इनवोकेशन के बीच किसी भी फाइल या डायरेक्टरी / tmp को संरक्षित किया गया है।

के बारे में / var / tmp :

/ Var / tmp निर्देशिका उन प्रोग्रामों के लिए उपलब्ध कराई जाती है जिन्हें अस्थायी फ़ाइलों या निर्देशिकाओं की आवश्यकता होती है जो सिस्टम रिबूट के बीच संरक्षित होती हैं। इसलिए, / var / tmp में संग्रहीत डेटा / tmp में डेटा की तुलना में अधिक स्थायी है।

इसलिए आपको /var/tmpइसके बजाय उपयोग करने के लिए अपने प्रतीकात्मक लिंक को बदलना चाहिए /tmp


3
क्लासिक उदाहरण जब आपके पास एक हथौड़ा है, तो सब कुछ एक नाखून की तरह दिखता है।
वर्नरसीडी

@ErnerCD क्या आप इसका विस्तृत अर्थ बता सकते हैं? क्या आप कह रहे हैं कि /var/tmpयह एक अच्छा विचार नहीं है?
सिम्बैब

6
जब आपके पास एक हथौड़ा है ... - If a person is familiar with ... a certain, single instrument, they may have a confirmation bias to believe that it is the answer to/involved in everything.मैं कह रहा हूं कि ओपी किसी चीज के लिए / tmp का उपयोग कर रहा है, जिसका उपयोग करने के लिए नहीं किया जाता है - tmp-but-not-काफी रखने की उसकी समस्या के लिए हथौड़ा के रूप में / tmp का उपयोग करना -tmp सामान / var / tmp को रिबूट के बीच रखा जा सकता है, इसलिए इसका सही उत्तर है।
वर्नरसीडी

8

आपके प्रश्न का उत्तर सख्ती से नहीं, लेकिन आपको /var/tmpएक अधिक उपयुक्त स्थान मिल सकता है, क्योंकि यह रिबूट से अधिक साफ नहीं होता है। यह अस्थायी फ़ाइलों के लिए डिज़ाइन किया गया है जिन्हें थोड़े समय के बाद स्वचालित रूप से त्याग नहीं किया जाना चाहिए।

हालांकि, मैं अक्सर अपने आप को एक फ़ोल्डर बनाता हूं / यादृच्छिक चीज़ों को संग्रहीत करने का विकल्प चुनता हूं जो मुझे घर में नहीं चाहिए। यह मुख्य ओएस के नियंत्रण से बाहर की चीजों को रखने के लिए एक उपयुक्त स्थान है।


यह सही विचार है। यदि / tmp वह नहीं करता है जो आप चाहते हैं, तो अपनी जानकारी कहीं और स्टोर करें - यहां तक ​​कि एक अन्य ड्राइव पर भी अगर वहां स्पेस उपलब्ध है। जब तक लिनक्स (और अन्य प्रोग्रामर) उन चीजों के साथ गड़बड़ नहीं करता है, जब तक कि आपके लिए आवश्यक परिणाम प्राप्त करने का एकमात्र तरीका नहीं हो जाता है।
जो

6

इस तरह:

EXCEPT='! -name .
            ...
            ! ( -path "./foo" )'

   # Remove all old files, then all empty directories
   ...
   find /tmp/foo/* -depth -xdev $TEXPR -delete

उदाहरण:

$ cd /tmp/foo/
$ mkdir 1 2 3
$ touch 3 4 5
$ find /tmp/foo/* -depth -xdev $TEXPR -delete
$ ls /tmp/foo/
$

मैं उपयोगकर्ता aap से सहमत हूं: आपको या तो इस बात का ध्यान रखना चाहिए कि निर्देशिका को फिर से बनाने के लिए उपयोग किए जाने वाले सॉफ़्टवेयर में यदि वे tmp फ़ाइलें हैं या किसी अन्य निर्देशिका का उपयोग करते हैं यदि वे tmp फ़ाइलें नहीं हैं जो शुद्ध नहीं हैं।


यह वास्तव में काम नहीं करता है। जबकि findकमांड मैन्युअल रूप से चलाने के दौरान अपेक्षा के अनुसार काम करता है, निर्देशिका को संपादन के बाद भी हटा दिया जाता है /etc/init/mounted-tmp.conf। ऐसा लगता है कि यहां कुछ और चल रहा है।
टेराडॉन

wth। ehm। इसका मतलब यह होना चाहिए कि पहली पंक्ति दोषपूर्ण है। हो सकता है कि उसे सापेक्ष (?) होने की आवश्यकता हो
Rinzwind

@terdon हाँ लगता है कि इसके सापेक्ष होने की आवश्यकता है / tmp /
Rinzwind

मुझे ऐसा नहीं लगता, मैंने विभिन्न क्रमपरिवर्तन की कोशिश की, जिसमें शामिल है -path ./fooऔर यहां तक ​​कि -name '*foo*'उनमें से कोई भी काम नहीं किया (उबंटू सर्वर 14.04 पर)। मुझे लगता है कि यह सिर्फ सही फ़ाइल नहीं है और हम गलत जगह देख रहे हैं। आप जो सुझाव दे रहे हैं वह काम करना चाहिए , यह सिर्फ प्रतीत नहीं होता है।
टेराडॉन

0

भविष्य के मूल्य के साथ फाइल करना एक बुरा विचार है, / tmp निर्देशिका (/ var / tmp, जैसा कि दूसरों द्वारा सुझाया गया है, एक बेहतर जगह है) को लिखें। उस ने कहा, आप चैट शॉट पर शॉट देना चाह सकते हैं। आवेदन से बाहर निकलने के बाद इसे चलाया जाना चाहिए, लेकिन बंद होने से पहले। याद रखें कि यह ऑपरेशन उस निर्देशिका को कुछ भी लिखने नहीं देगा ।

स्पर्श /tmp/foo/ddmmyy/.001_immute_me chattr + i /tmp/foo/ddmmyy/.001_immute_me


यदि मैं एक अस्थायी निर्देशिका करना चाहता हूं तो यह कैसे उपयोगी होगा?
सिम्बैब

-1

इसे चलाओ:

echo "if [ ! -e /etc/foo/ ]; then mkdir /etc/foo/; fi; rm -rf /etc/foo/*" > /bin/foodel; sudo chmod 755 /bin/foodel 

फिर इसे / etc / inittab में जोड़ें यहाँ देखें: inittab फ़ाइल कहाँ है? :

foo:2345:boot:/bin/foodel

यह बूट पर / etc / foo बना देगा यदि यह मौजूद नहीं है, और फिर इसे खाली करें।

यह बैश लॉगिन पर भी ऐसा ही करेगा:

echo "/bin/foodel" >> ~/.bashrc

Ubuntu संस्करण 14 का उपयोग नहीं करता है /etc/inittab। यह स्पष्ट और असमान रूप से इसके मैनुअल पेज पर बताया गया है।
जेडीबीपी

* facepalm * क्षमा करें @JdeBP, लाइनक्स के 4 अलग-अलग संस्करणों को टटोलने के बाद मेरे साथ ऐसा होता है। उन्होंने कहा कि कहीं न कहीं कोड डाल सकते हैं कहा askubuntu.com/questions/34308/where-is-inittab-file
डैनियल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.