एक निर्देशिका को हटाए जाने से / tmp में रोकें


10

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

tmp
 |- me # this should stay
 |  |- foo1 # this should be deleted...
 |  |- bar1 # ...and this as well
 |- other stuff...

क्या इसे करने का कोई तरीका है? शायद अनुमति के साथ या एक विशेष कॉन्फ़िगरेशन के साथ?


1
वर्कअराउंड के रूप में, आप अपने शेल की लॉगिन फ़ाइलों में कुछ कोड "परीक्षण और mkdir" में डाल सकते हैं।
जेफ स्कालर

3
/tmpसंभावना है कि एक tmpfsफाइलसिस्टम है। उन फ़ाइलों को वास्तव में नष्ट नहीं किया गया है; वे बस राम में संग्रहीत हैं और एक रिबूट पर खो गए हैं। इसलिए आपको ऐसे उत्तर मिलते हैं जो "बूट या लॉगिन पर फिर से बनाने" के लिए
उबालते हैं

जवाबों:


4

एक समाधान @rebootक्रोन जॉब का उपयोग करना होगा :

@reboot mkdir -p "/tmp/$USER"

crontab -eजब भी मशीन बूट करती है, तो इसे अपने क्रेटेब के साथ जोड़कर इसे निष्पादित किया जाता है।

या, उपयोग करें

mkdir -p "/tmp/$USER"

आपके शेल की स्टार्टअप फ़ाइल में।

किसी भी स्थिति में, आप उपयोग करना चाह सकते हैं

TMPDIR=/tmp/$USER
export TMPDIR

यदि आप उस निर्देशिका को डिफ़ॉल्ट अस्थायी निर्देशिका के रूप में उपयोग करना चाहते हैं, तो अपने शेल की स्टार्टअप फ़ाइल में।


क्या यह) सभी उपयोगकर्ताओं के लिए निर्देशिका बनाएगा और बी) 'कोल्ड' स्टार्टअप से भी ट्रिगर होगा?
Linux4win

1
@ Linux4win यह जवाब एक एकल उपयोगकर्ता की जरूरतों को संबोधित करता है, क्योंकि इस तरह से आपने प्रश्न को हल किया है। इससे कोई फर्क नहीं पड़ता कि मशीन को कैसे बूट किया जाता है (गर्म, ठंडा, या गुनगुना), लेकिन हाइबरनेशन से फिर से शुरू होने पर यह ट्रिगर नहीं होगा (क्योंकि यह बूटिंग नहीं है)।
Kusalananda

किसी कारण @reboot mkdir -p "/tmp/$USER"से क्रेस्टब के अंत में जोड़ने से कुछ भी नहीं होता है, जबकि mkdir -p "/tmp/$USER"वास्तव में चलने से डायरेक्टरी बनती है । दूसरा मेरे लिए काम नहीं करता है, क्योंकि मुझे /tmpअन्य कार्यक्रमों के माध्यम से अपनी पहुंच बनाने की आवश्यकता है , और हर बार शेल को फायर करना थोड़े कष्टप्रद है ...
Linux4win

@ Linux4win @rebootक्रॉन जॉब एक ​​निर्देशिका नहीं बनाता है? क्या आप क्रोन डेमॉन के किसी भी त्रुटि संदेश के साथ अपने खाते में कोई ईमेल भेज रहे हैं?
Kusalananda

अच्छा नहीं ... शायद इसलिए कि मैंने कॉन्फ़िगर नहीं किया है mail? या कि आवश्यकता नहीं है?
Linux4win

14

मैं इसके लिए उपयोग करता हूं pam-tmpdir: यह लॉगिन पर एक उपयोगकर्ता-निजी अस्थायी निर्देशिका बनाता है। इसे सेट करने के लिए, जोड़ें

session optional pam_tmpdir.so

उपयुक्त PAM सेवाओं के लिए; डेबियन-आधारित प्रणाली पर, libpam-tmpdirपैकेज को स्थापित करना आपके लिए ऐसा करने की पेशकश करेगा, या आप लाइन को इसमें जोड़ सकते हैं /etc/pam.d/common-session। अगली बार जब आप में प्रवेश करें आप के तहत एक निर्देशिका मिल जाएगा, /tmp/user, अपने प्रयोक्ता आईडी के साथ और TMPऔर TMPDIRउचित रूप से सेट।


7
क्या आप बता सकते हैं कि उपयुक्त PAM सेवाएँ क्या हैं और उनके साथ लाइन कैसे जोड़ी जा सकती है? क्या फ़ाइलों को संपादित किया जाना चाहिए?
टेराडो

2

यदि आप systemd के साथ कोई सिस्टम नहीं चला रहे हैं और यह क्लीनअप को प्रबंधित करने के लिए systemd-tmpfiles का उपयोग करता है, तो आपको उस सिस्टम का उपयोग करके निर्देशिका को कॉन्फ़िगर करना चाहिए।

यहाँ एक पूर्ण प्रलेखन है । आप /etc/tmpfiles.d/something.confसामग्री के साथ बनाकर जो चाहें हासिल कर सकते हैं:

d     /tmp/your_username   0750 your_user your_group  - -

1

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

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

find $HOME/tmp -depth -mtime +30 -print0 | xargs -0 -r rm -rf

अर्ध-अस्थायी के रूप में मैं जो कुछ भी डाउनलोड करता हूं या बनाता हूं, वह वहां चला जाता है और सिस्टम कुछ भी साफ करता है जिसे मैं पीछे छोड़ देता हूं। कुछ भी है कि स्थायी घर की जरूरत है एक लंबे समय से पहले क्रॉन नौकरी से छुटकारा मिल जाता है।


mkdir a a/b; touch a/b/c। अब इंतजार करें जब तक कि आपके 30 दिन समाप्त नहीं हो जाते। जैसे ही आप cइसे हटाते हैं, यह अपडेट हो जाएगा b, जिसका अर्थ है कि इसे अगले 30 दिनों तक इंतजार करना होगा। इसी तरह aजब आप हटाते हैं b। दूसरी बात, अगर आप फाइलें बनाते हैं, bलेकिन a30 दिनों तक नहीं छूते हैं , तो aनिर्देशिका rm -rfआपकी हाल की फाइलों को मिटा देगी और मिटा देगी b
रोज़ा ro

find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/nullमेरे लिए काम करता है
roaima
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.