/ Tmp निर्देशिका को कैसे साफ किया जाता है?


300

/tmpनिर्देशिका को कैसे साफ किया जाता है? क्या यह स्वचालित है? यदि हां, तो इसे कितनी बार साफ किया जाता है?


15
मेरी अस्थायी फ़ाइलों को डिस्क पर कभी नहीं लिखा जाता है। वे एक रैम डिस्क पर लिखे जाते हैं। मैंने tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/ etc / fstab में डाला ।
बेनामी

जवाबों:


192

ध्यान दें! यह उत्तर कम से कम ubuntu 14.04 से पुराना है। वर्तमान स्थिति के लिए अन्य उत्तर देखें और यदि वे सही साबित होते हैं तो उन्हें उग्र रूप से बढ़ावा दें। टिप्पणी भी पोस्ट करें ताकि मैं वर्तमान सही उत्तर के लिए लिंक यहां डाल सकूं।

14.04 के लिए https://askubuntu.com/a/759048/1366 देखें

16.10 के लिए https://askubuntu.com/a/857154/453746 देखें


2011 से पुराना उत्तर:

ऊपर की /tmpपटकथा द्वारा सफाई की जाती है /etc/init/mounted-tmp.conf। स्क्रिप्ट को ऊपर की ओर से चलाया जाता है, हर बार /tmpमुहिम शुरू की जाती है। व्यावहारिक रूप से इसका मतलब है कि हर बूट पर।

स्क्रिप्ट लगभग निम्नलिखित कार्य करती है: यदि कोई फ़ाइल दिनों /tmpसे पुरानी है तो $TMPTIMEउसे हटा दिया जाएगा।

डिफ़ॉल्ट मान $TMPTIME0 है, जिसका अर्थ है कि हर फ़ाइल और निर्देशिका /tmpहट जाती है। $TMPTIMEएक पर्यावरण चर में परिभाषित किया गया है /etc/default/rcS


यह अब 14.04 के लिए सच नहीं है (स्क्रिप्ट अब मौजूद नहीं है)।
मार्टिन श्रोडर

@ मॉर्टिन श्रोडर - स्क्रिप्ट मेरे सिस्टम पर मौजूद है और यह 14.04 की एक साफ स्थापित है और tmpreaper मौजूद नहीं है!
लांस हॉलैंड

मैं अब आर्क लिनेक्स का उपयोग कर रहा हूं ताकि मैं सत्यापित न कर सकूं। माफ़ करना। कृपया किसी ने इसे सत्यापित किया और टिप्पणी की या मेरे उत्तर को संपादित किया।
घावना

4
: ubuntu में 16.04 tmpreaper के रूप में गैर-सुरक्षित कृपया देखें छोड़ दिया जाता है fossies.org/linux/tmpreaper/debian/README.security
tamerlaha

1
नहीं। उबंटू 16.04 में यह सिस्टेड मैकेनिज्म के द्वारा सिंपल है। उस दस्तावेज़ को पढ़ें, और जो आप वास्तव में पाएंगे, वह स्पष्टीकरण है कि असुरक्षा का दावा करने वाला सुरक्षा विश्लेषण त्रुटिपूर्ण क्यों है।
JdeBP

141

प्रत्येक बूट पर डिफ़ॉल्ट रूप से निर्देशिका साफ़ हो जाती है, क्योंकि TMPTIMEडिफ़ॉल्ट रूप से 0 है।

यहाँ आप निम्न फ़ाइल में समय बदल सकते हैं:

/etc/default/rcS

TMPTIME कहते हैं कि दिनों में कितनी बार tmp dir sould को साफ़ किया जाता है


9
हर बूट पर समाशोधन एक मशीन के लिए आदर्श नहीं है जिसे सर्वर की तरह कभी भी रिबूट नहीं किया जाता है। मुझे अपने / tmp में 5Gb स्पेस लेने के लिए 500,000 से अधिक फाइलें मिली हैं क्योंकि मेरे सर्वर में 378 दिन का समय है। मैं इसे रिबूट करने के लिए अनिच्छुक हूं, बस क्योंकि रिबूट पर उन फ़ाइलों को साफ़ करने में घंटों लगते हैं।
rjmunro

10
आपके मामले में आपको tmpreaperएक मौका देना चाहिए ।
क्ब्

1
एक CRON नौकरी आसानी से हल कर सकता है।
केन तीव्र

tmpwatchएक उपयुक्त उपकरण भी होना चाहिए।
आरकेबुलस्की

1
ऐसा लगता है कि Ubuntu / systemd पहले से ही एक समाधान प्रदान करता है। मैं और कहूंगा लेकिन .... सिस्टमड।
केन शार्प

65

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

/tmpक्लीनअप फ्रीक्वेंसी बदलना

डिफ़ॉल्ट सेटिंग जो आपके सिस्टम को /tmpरिबूट पर साफ़ करने के लिए कहती है, वह /etc/default/rcSफ़ाइल में होती है। हम जिस मान को देखेंगे TMPTIME

TMPTIME=0कहने का वर्तमान मूल्य फ़ाइल की उम्र के बावजूद रिबूट पर फ़ाइलों को हटा दें। इस मान को एक अलग (पॉजिटिव) नंबर में बदलने से फ़ाइल के जीवित रहने के दिनों की संख्या बदल जाएगी /tmp

TMPTIME=7

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


1
अच्छे खर्च। लेकिन सफाई स्क्रिप्ट किस लिपि में है? मैंने देखा है /etc/init/mounted-temp.conf, लेकिन इसमें वह रेखा start on mounted MOUNTPOINT=/tmpहै जो मुझे लगता है कि यह लागू नहीं है।
enzotib

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

1
जब आपकी मशीन दुर्घटनाग्रस्त हो जाती है, तो संभवत: OOM के कारण ऐसी फ़ाइलों को रखना आसान है जिन्हें आप खोना चाहते हैं (प्रदान किए गए वीडियो फ्रेम)। एक बेहतर समाधान समस्या को ठीक करना होगा, निश्चित रूप से। :-)
केन तीव्र

क्या यह सिग्विन के अंदर किया जा सकता है?
CMCDragonkai

46

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

मुझे लगता है कि सही उत्तर यह है कि Ubuntu 16.10 में एक नया सेटअप है। मैन पेज "tmpfiles.d" में प्रलेखित एक फ़ोल्डर /etc/tmpfiles.d है। उस फ़ोल्डर में, किसी को यह नियंत्रित करने के लिए एक कॉन्फ़िगरेशन फ़ाइल रखनी चाहिए कि क्या / tmp को मिटाना है। जब तक वे 20 दिन पुराने नहीं हो जाते, तब तक मैं रिबूट को फ़ाइलों को मिटाने से रोकने के लिए कर रहा / रही हूँ:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

"20d" को "-" से बदलें यदि आप कभी नहीं चाहते कि फाइलें हटाई जाएं। यह मेरा सबसे अच्छा प्रयास है, वह आदमी पृष्ठ विस्तार के साथ लगभग अभेद्य है।

नए सेटअप का लाभ यह है कि एक फाइल क्लीनर अभी भी चल सकता है, भले ही सिस्टम रिबूट न ​​हो (जैसा कि सर्वर पर हमेशा होता है)। मुझे लगता है कि एक बड़ा प्लस है।



मैंने पाया कि आप हाइफ़न का उपयोग करके मूल फ़ाइल अनुमतियों और स्वामी को संरक्षित कर सकते हैं:d /tmp/ - - - 20d
डेव यारवुड

2
यह भी ध्यान देने योग्य है: आप मैन्युअल रूप से सफाई कार्य चलाकर अपने विन्यास का परीक्षण कर सकते हैं:systemctl start systemd-tmpfiles-clean
डेव यारवुड

@ pauljohn32 यह 16.10 के बाद के संस्करणों के लिए भी सही है?
kapad

3
@ कापड: मैंने अभी सत्यापित किया है कि यह उबंटू १ too.०४ पर भी काम करता है।
जीन विंसेंट

26

उबंटू में 14.04 यह द्वारा किया जाता है tmpreaper, जिसे क्रोन (से /etc/cron.daily) द्वारा दैनिक कहा जाता है । कार्यक्रम के माध्यम से /etc/default/rcSऔर कॉन्फ़िगर किया जा सकता है /etc/tmpreaper.conf


मेरे सिस्टम पर, tmpreaper /etc/cron.daily में नहीं था - लेकिन मैं इसे उपयुक्त तरीके से स्थापित करने में सक्षम था
जो जर्मेस्का

10

14.04 से पहले:

हर बार रिबूट करने के बाद यह साफ हो जाता है।


14.04+ के साथ दिखाई देता है यह केवल tmpreaper का उपयोग करता है, न कि "प्रति बूट" स्क्रिप्ट FWIW
rogerdpack

मेरे 14.04 सिस्टम सभी रिबूट पर सफाई करते हैं। कभी सुना भी नहीं tmpreaper
केन तीव्र

क्या होगा यदि आप सिस्टम को कभी रिबूट नहीं करते हैं?
phuclv

7

एक systemdUbuntu (15.10 और नए) में, यह सिस्टमड द्वारा systemd-tmpfiles-cleanसेवा और टाइमर का उपयोग करके किया जाता है :

$ systemctl cat systemd-tmpfiles-clean.service 
# /lib/systemd/system/systemd-tmpfiles-clean.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-sync.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle

तथा

$ systemctl cat systemd-tmpfiles-clean.timer  
# /lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

इसलिए systemd-tmpfiles-cleanशटडाउन पर चलता है, और प्रति दिन एक बार अन्यथा। एक अन्य उत्तर/etc/tmpfiles.d में उल्लिखित फ़ाइलों का उपयोग करके इसे साफ किया जा सकता है ।

आप systemctl edit systemd-tmpfiles-clean.timerविभिन्न सिस्टमड Timerकॉन्फ़िगरेशन विकल्पों (देखें man 5 systemd.timer) का उपयोग करके टाइमर व्यवहार को स्वयं बदल सकते हैं ।


मैंने टाइमर को 20 मिनट में बदल दिया है, और मुझे लगता है कि स्थिति कमांड से पता चलता है कि यह वास्तव में 20min कॉन्फ़िगरेशन का उपयोग कर रहा है। लेकिन मेरी समस्या यह है कि /tmpअभी भी सफाई नहीं हुई है । और मुझे इसे साफ करने की आवश्यकता है। यहां तक ​​कि मैनुअल स्टार्ट भी sudo systemctl start systemd-tmpfiles-cleanट्रिक नहीं करता है। कोई विचार क्यों?
user2932688

5

उबंटू चलाने वाले हमारे एक सर्वर पर, हमारे पास / tmp में फ़ाइलों को हटाने के लिए एक स्क्रिप्ट है और यह रात को चलती है।

स्क्रिप्ट है:

#!/bin/sh
# Clean file and dirs more than 3 days old in /tmp nightly

/usr/bin/find /tmp -type f -atime +2 -mtime +2  |xargs  /bin/rm -f &&

/usr/bin/find /tmp -type d -mtime +2 -exec /bin/rm -rf '{}' \; &&

/usr/bin/find /tmp -type l -ctime +2 |xargs /bin/rm -f &&

/usr/bin/find -L /tmp -mtime +2 -print -exec rm -f {} \;

बस ऊपर दी गई सामग्री को फ़ाइल को 775 फ़ाइल में सहेजें और इसे चलाने के लिए क्रोन प्रविष्टि बनाएँ। चूंकि यह एक वेब सर्वर है, हम इसे स्पष्ट कारणों से रिबूट नहीं करना चाहते हैं।


6
आप tmpwatch का उपयोग करके बेहतर हो सकते हैं ।
पूल

9
आखिरी लाइन बेहद खतरनाक है। आम तौर पर, हर कोई दौड़ने में सक्षम होता है ln -s /usr /tmp/kaboomया ln -s /* /tmp/...
डैनियल एल्डर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.