क्या हम / tmp की सामग्री को मैन्युअल रूप से हटाना चाहते हैं?


26

मैं इस धारणा के तहत था कि "पुरानी" फाइलें /tmpनियमित रूप से हटा दी जाएंगी। हालाँकि, यह मुझे लगता है कि /tmpजब तक यह चाहेगा, तब तक यह बढ़ता जाएगा, और कुछ भी नहीं हटाया जाएगा। कुछ लोग कहते /tmpहैं कि डिस्क को पूरा होने पर अकेले छोड़ना और उसकी सामग्री को हटाना बेहतर है ।

मेरा सवाल यह है कि /tmpक्या वास्तव में खुद की देखभाल नहीं करने के लिए डिज़ाइन किया गया है? सर्वोत्तम अभ्यास क्या हैं?


1
/tmpरिबूट के बाद सामान्य रूप से साफ हो जाता है, लेकिन यह वहां लगे फाइल सिस्टम पर निर्भर करता है। क्या df -hकहता है?
etagenklo

जवाबों:


27

सवालों के जवाब देने के लिए:

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

यदि आप खुद से पूछ सकते हैं:

  • क्या मैं /tmpकिसी भी कारण से फ़ाइलों को हटा सकता हूं (स्थान की आवश्यकता है, निशान हटाना चाहते हैं, आदि): यह निर्भर करता है , पर पढ़ें

फाइलसिस्टम पदानुक्रम मानक (FHS) बताता है :

अस्थायी फ़ाइलों की आवश्यकता वाले कार्यक्रमों के लिए tmp निर्देशिका उपलब्ध कराई जानी चाहिए।

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

/var/tmp/एक समान उद्देश्य है , लेकिन रिबूट के दौरान हटाया नहीं जाना चाहिए

यह गारंटी नहीं है कि नियमित रूप से साफ किया जाता है /tmp/या नहीं/var/tmp/ । यह आपके वितरण और सेटिंग्स पर निर्भर हो सकता है, हालांकि अधिकांश सिस्टम समय-समय पर कुछ सफाई करते हैं। द्वारा टिप्पणी देखें mike

यदि आपको / tmp में किसी फ़ाइल को हटाने की आवश्यकता है , तो पहले देखें कि क्या फ़ाइल उपयोग में है। आप इसे आसानी से कर सकते हैं:

lsof /tmp/file_to_delete

यदि आपके पास ऐसा करने का अधिकार है, तो यह उस फ़ाइल को हैंडल करने वाली प्रक्रिया को दिखाएगा, जैसे कि प्रक्रिया का नाम, पीआईडी ​​और फ़ाइल का प्रकार। वास्तव में सभी प्रक्रियाओं को दिखाने के लिए, sudoउपयोगकर्ता रूट के रूप में प्रस्तुत करना या चलाना ।

lsof +D /tmp

वर्तमान में खुली हुई /tmp(और नीचे +D) निर्देशिका में आपको सभी फाइलें दिखाएगा । बेशक आपको ये फाइलें डिलीट नहीं करनी चाहिए।

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


सामान्य तौर पर यह सभी उत्कृष्ट सलाह है, पिछले पैराग्राफ की जासूसी करें। लेकिन क्या कोई प्रणाली वास्तव में सफाई करती है / tmp उस प्रणाली पर निर्भर है। उदाहरण के लिए, OpenSUSE में, यह तब तक नहीं होता है , जब तक आप इसे (/ etc / sysconfig से, या 200 मिलियन के माध्यम से) कॉन्फ़िगर नहीं करते हैं। इसके अलावा, उपयोगकर्ताओं के व्यक्तिगत ~ / tmp (यदि उनके पास एक है) स्वचालित रूप से साफ़ नहीं होता है।
माइक

तो अभी भी उन फ़ाइलों को हटाना संभव है जो प्रक्रियाएं खुली हैं? और यह प्रोग्राम को क्रैश नहीं करता है? फ़ाइल कहाँ मौजूद है? क्या प्रोग्राम अभी भी इस "खुले लेकिन समवर्ती हटाए गए" फ़ाइल के साथ बातचीत कर सकता है? फ़ाइल को हटाने के लिए rm के लिए इसे मुश्किल या असंभव बनाने का कोई तरीका है? शायद एक फ़ाइल लॉक की तरह कुछ?
CMCDragonkai

फ़ाइलें फ़ाइल सिस्टम में डेटासेट्स हैं जो एक पथ और एक फ़ाइल नाम के माध्यम से एक पदानुक्रमित नाम स्थान में सुलभ हैं। एक फ़ाइल में कई नाम (हार्ड लिंक) हो सकते हैं, और प्रक्रिया में फ़ाइल के लिए एक खुला हैंडल हो सकता है। यदि फ़ाइल पहुँच योग्य नहीं है, तो यह तब है जब इसका कोई नाम और कोई खुला हैंडल नहीं है, इसे हटा दिया गया है। डिलीट को रोकना मेरी विशेषज्ञता और IMO से इस सवाल के दायरे से परे है। "मैंडेटरी लॉकिंग" की तलाश करें।
ट्रेपिकि

[डुप्लीकेट उत्तर था]
ट्रेपिकि

4

मुझे लगता है कि यह ओएस संस्करण पर निर्भर है। मुझे लगता है कि / tmp आमतौर पर रिबूट पर मंजूरी दे दी है, और वास्तव में यह मध्य सत्र को साफ करने के लिए प्रणाली के लिए सुरक्षित नहीं होगा क्योंकि यह नहीं पता होगा कि क्या फ़ाइलें सक्रिय हैं।

यदि आप बहादुर हैं, तो आप एक कमांड को crontab में फेंकना चाहते हैं, जो एक बड़ी उम्र की फ़ाइलों को हटा देता है, लेकिन यह कुछ मुद्दों का कारण हो सकता है यदि यह अभी भी उपयोग की गई फ़ाइलों को हटा देता है। आप एक कमांड की कोशिश कर सकते हैं (मैंने इसे आज़माया नहीं है) जैसे

/ tmp -type f -ctime +10 -exec rm {} + खोजें

जो सैद्धांतिक रूप से पुराने 10 दिनों के तहत सभी फाइलों को हटा देगा।


शायद -rउसी में जोड़ना चाहिए
स्टीवन पेनी

1
बिल्कुल नहीं जोड़ -r कि - कि प्रभाव होगा या कम फ़ाइलों को हटाने 10 दिन पुराने जहाँ वे निर्देशिका में मौजूद हैं जो 10 दिन पहले और अधिक बनाया गया था। वास्तव में, कमांड को फाइलों की खोज को सीमित करने के लिए संभवतः / tmp -type f -ctime +10 -exec rm {} + ढूंढना चाहिए। (खोजें कमांड का उपयोग करने से उपनिर्देशिकाओं की
पुनरावृत्ति

1

/ Tmp और / var / tmp निर्देशिकाओं को एक सामान्य समय पर साफ किया जाता है। यह आपके डिस्ट्रो पर निर्भर हो सकता है। मेरे CentOS सिस्टम (RedHat का क्लोन) पर एक क्रोन जॉब है , जो एक दैनिक शेड्यूल पर tmpwatch , एक tmp dir क्लीनर, चलाने के लिए निर्धारित है । / Var / tmp में फ़ाइलों को / tmp / में फ़ाइलों की तुलना में थोड़ी अधिक देर तक चिपके रहने की अनुमति है। मैंने ऐसी स्क्रिप्ट्स भी देखी हैं जो एक रिबूट पर prune / tmp (लेकिन स्पष्ट रूप से नहीं / var / tmp) है, यह जानते हुए कि सभी प्रक्रियाओं के नए होने के बाद से उस फ़ाइल को खोलने के लिए कुछ भी नहीं हो सकता है।

तो, हाँ, / tmp का मूल स्क्रिप्ट से रखरखाव है। यह अभी भी उन रखरखाव समय के बाहर भर सकता है। यदि आपने मैन्युअल रूप से चीजों को साफ करने के लिए चुना है, तो सबसे अच्छा sysadmin अभ्यास सावधान रहना है। Sysadmin विद्या nlb sysadmins को एक सरल findस्क्रिप्ट चलाने पर हटाए गए आवश्यक सिस्टम फ़ाइलों की ओर इशारा करते हुए / tmp में सिमिलिंक के बारे में बात करता है ।


2
Centos 7 और सिस्टम के साथ अन्य RedHat जैसे संस्करण 7+ सिस्टम पर, क्लीनअप को /usr/lib/tmpfiles.d/tmp.conf में कॉन्फ़िगर किया गया है। यह systemd के लक्ष्य systemd-tmpfiles-clean.service द्वारा लगाया जाता है।
shonky linux यूजर

1

CentOS पर एक ऐसी नौकरी है /etc/cron.dailyजिसे कॉल किया जाता है, tmpwatchजो उन फ़ाइलों को हटा देगा , जिन्हें किसी निश्चित समय के लिए एक्सेस नहीं किया गया है। आम तौर पर, यह निर्देशिकाओं को साफ करने के लिए उपयोग किया जाता है जो अस्थायी होल्डिंग स्पेस जैसे / tmp के लिए उपयोग किया जाता है।

यह /etc/cron.daily/tmpwatchस्क्रिप्ट है

#! / Bin / श
झंडे = -umc
/ usr / sbin / tmpwatch "$ झंडे" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/ tmp / hsperfdata_ *' 10d / tmp
/ usr / sbin / tmpwatch "$ झंडे" 30d / var / tmp
d / in / var / {cache / man, catman} / {cat?, X11R6 / cat?, स्थानीय / बिल्ली?} के लिए करना
    अगर [-d "$ d"]; फिर
        / usr / sbin / tmpwatch "$ झंडे" -f 30d "$ d"
    फाई
किया हुआ

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


0

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


0

FHS को परिभाषित करता है /tmpके रूप में निर्देशिका "अस्थायी फ़ाइलों (देखें भी / var / tmp), अक्सर प्रणाली रिबूट के बीच संरक्षित नहीं", और /var/tmp"के रूप में अस्थायी फ़ाइलों को रिबूट के बीच संरक्षित करने की"।

आजकल, /tmpकई GNU / Linux वितरण में डिफ़ॉल्ट रूप से (हालांकि वैकल्पिक) रैम रैम सिस्टम (tmpfs) होने के साथ , /tmpप्रभावी रूप से गैर-स्थायी है।

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


बहुत सारे कार्यक्रम फाइलों को साफ करने का एक बेहतर काम कर सकते हैं /tmpजब वे उनके साथ किए जाते हैं, या जब वे बाहर निकलते हैं, लेकिन /tmpकिसी प्रोग्राम की असामान्य समाप्ति (क्रैश) के बाद भी फाइलों की समस्या बनी रहती है।
केविन फेगन

0

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

मेरा सुझाव है

  • TMPTIMEसर्वर पर चर का उपयोग करना
  • माउंट (tmp के रूप में tmpfs (RAM में) एक डेस्कटॉप पर (अधिक गति के लिए)

0

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

du -hs /* | sort -h

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

systemctl status systemd-tmpfiles-clean

नीचे आपको निम्न जैसा कुछ दिखाई देगा, जो बताता है कि सेवा अंतिम बार कब चली थी:

systemd-tmpfiles-clean.service - Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.service; static; vendor preset: disabled)
   Active: inactive (dead) since Wed 2018-07-18 15:43:36 IST; 18h ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
  Process: 30495 ExecStart=/usr/bin/systemd-tmpfiles --clean (code=exited, status=0/SUCCESS)
 Main PID: 30495 (code=exited, status=0/SUCCESS)

Jul 18 15:43:36 host-name systemd[1]: Starting Cleanup of Temporary Directories...
Jul 18 15:43:36 host-name systemd[1]: Started Cleanup of Temporary Directories.

ध्यान दें कि क्लीन-अप के साथ ही यह सेवा समाप्त हो जाएगी। इसे नियमित रूप से चालू करने के लिए एक टाइमर सेवा जिम्मेदार है। आप इसे इसके साथ देख सकते हैं:

systemctl status systemd-tmpfiles-clean.timer

और आपको निम्नलिखित की तरह कुछ उम्मीद करनी चाहिए:

systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled)
   Active: active (waiting) since Tue 2018-07-03 10:56:59 IST; 2 weeks 1 days ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)

Jul 03 10:56:59 host-name systemd[1]: Started Daily Cleanup of Temporary Directories.
Jul 03 10:56:59 host-name systemd[1]: Starting Daily Cleanup of Temporary Directories.

यदि आप फ़ाइलों की सफाई के लिए जिम्मेदार वास्तविक सेवा को फिर से देखते हैं, तो आप देखेंगे कि यह सब चलता है:

/usr/bin/systemd-tmpfiles --clean

तो आप या तो उस कमांड को सीधे चला सकते हैं, या इसे ठीक से कर सकते हैं, बस:

systemctl start systemd-tmpfiles-clean

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

अस्थायी फ़ाइलों की सामान्य हैंडलिंग के लिए एक जगह हो सकती है /usr/lib/tmpfiles.d/tmp.confजिसमें निम्नलिखित प्रासंगिक लाइनें हो सकती हैं:

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

आप उन लोगों को कम समय में बदल सकते हैं, यदि आपका सिस्टम अंतरिक्ष से बाहर चलता रहता है, उदाहरण के लिए:

v /tmp 1777 root root 12h
v /var/tmp 1777 root root 1d

यह सुनिश्चित करने के लिए कि आप क्या कर रहे हैं, man tmpfiles.dमैनुअल पढ़ने के लिए। फिर से, मैंने एक CentOS (RedHat आधारित) और एक उबंटू प्रणाली पर प्रासंगिक होने के लिए यहां प्रस्तुत दृष्टिकोण को पाया है, लेकिन मुझे अन्य वितरणों के बारे में ज्यादा जानकारी नहीं है।

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