/ Tmp dizini nasıl temizlenir?


Yanıtlar:


192

Not! Bu cevap, en azından 14.04 tarihinden beri eski. Mevcut durum için diğer cevaplara bakın ve doğru olduklarını ispatladıktan sonra onları öfkeyle yükseltin. Ayrıca yorum gönder, böylece güncel doğru cevabı buraya bağlayabilirim.

14.04 için bkz https://askubuntu.com/a/759048/1366

16.10 için bkz. Https://askubuntu.com/a/857154/453746


2011'den gelen eski cevap:

Temizliği /tmp, başlangıç ​​betiği tarafından yapılır /etc/init/mounted-tmp.conf. Betik, her seferinde /tmpmonte edildiğinde , başlangıç ​​tarafından çalıştırılır . Pratik olarak bu her açılışta anlamına gelir.

Komut aşağı yukarı şunları yapar: içindeki bir dosya günden /tmpdaha eskiyse $TMPTIMEsilinir.

Varsayılan değer $TMPTIME0'dır, yani içindeki her dosya ve dizin /tmpsilinir. $TMPTIMEtanımlanmış bir ortam değişkeni /etc/default/rcS.


Bu artık 14.04 için doğru değil (senaryo artık yok).
Martin Schröder

@Martin Schröder - senaryo sistemimde mevcut ve temiz bir 14.04 kurulumu ve tmpreaper yok!
Lance Holland,

Şu anda arch linux kullanıyorum bu yüzden doğrulayamıyorum. Üzgünüm. Lütfen birileri bunu doğrulayıp cevabımı yorumlayıp düzenleyin.
lesmana

4
ubuntu'da 16.04 tmpreaper, güvenli olmadığı için terk edildi, lütfen bakınız: fossies.org/linux/tmpreaper/debian/README.security
tamerlaha

1
Hayır. Ubuntu 16.04'te basitçe bir systemd mekanizması tarafından değiştirilir. Bu belgeyi okuyun; gerçekte ne bulacaksınız, güvensizlik iddiasında bulunan güvenlik analizinin neden kusurlu olduğunu gösteren bir açıklama.
JdeBP

141

Her önyüklemede dizin varsayılan olarak temizlenir, çünkü TMPTIMEvarsayılan olarak 0'dır.

Buradan aşağıdaki dosyadaki zamanı değiştirebilirsiniz:

/etc/default/rcS

TMPTIME tmp dir değerinin ne kadar sıklıkla temizleneceğini söylüyor


9
Her önyüklemede temizleme, bir sunucu gibi hiçbir zaman yeniden başlatılmamış bir makine için ideal değildir. Sunucumun 378 gün çalışma süresi olduğundan, / tmp dosyamda 5 Gb alan alan 500.000'in üzerinde dosya var. Yeniden başlatma konusunda isteksizim, çünkü yeniden başlatmadaki bu dosyaları silmek saatler alıyor.
rjmunro

10
Senin durumunda tmpreaperbir şans vermelisin .
qbi

1
Bir CRON işi bunu kolayca çözebilirdi.
Ken Sharp,

Ayrıca tmpwatchuygun bir araç olmalıdır.
ArekBulski

1
Ubuntu / systemd gibi görünüyor zaten bir çözüm sunar. Daha fazlasını söylerdim ama .... systemd.
Ken Sharp,

65

İken /tmpklasör dosyaları uzun vadeli saklamak için bir yer değil, ara sıra biraz daha uzun devam ettirmek istiyoruz yeniden başlattığınız bir dahaki sefere Ubuntu sistemlerinde varsayılan değerdir. /tmpTest sırasında bir şeyler indirdiğim , değişiklikler yaptıktan sonra yeniden başlattıktan sonra orijinal verileri tekrar kaybettiğimi biliyorum . /tmpDosyalarınızı biraz daha uzun tutmak istiyorsanız bu değişiklik yapılabilir .

/tmpTemizleme Frekansını Değiştirme

Sisteminizde /tmpyeniden başlatma sırasında silmenizi söyleyen varsayılan ayar /etc/default/rcSdosyada tutulur . Bakacağımız değer şudur TMPTIME.

Geçerli değer TMPTIME=0, dosyanın yaşına rağmen dosyaları yeniden başlatırken sil diyor. Bu değeri farklı (pozitif) bir sayıya değiştirmek, bir dosyanın hayatta kalabileceği gün sayısını değiştirir /tmp.

TMPTIME=7

Bu ayar dosyaların /tmpbir hafta öncesine kadar kalmasına ve bir sonraki yeniden başlatmada silinmesine olanak tanır . Negatif bir sayı ( TMPTIME=-1), sisteme asla hiçbir şeyi silmemesini söyler /tmp. Bu muhtemelen istediğiniz bir şey değil, kullanılabilir.


1
iyi açıklama. Ama hangi komut dosyasında temizleme komutu var? Gördüm /etc/init/mounted-temp.conf, ancak start on mounted MOUNTPOINT=/tmpuygulanabilir olmadığını düşündüren bir çizgiye sahip.
enzotib

7
Bir dosyanın otomatik olarak kaldırılmasını istemiyorsanız, /var/tmpyerine koyun /tmp.
Gilles

1
Makineniz çöktüğünde, muhtemelen OOM nedeniyle, kaybetmek istemediğiniz dosyaları (işlenen video çerçeveleri) saklamakta da kullanışlıdır. Elbette sorunu çözmek için daha iyi bir çözüm olacaktır. :-)
Ken Sharp

Bu Cygwin'in içinde yapılabilir mi?
CMCDragonkai

46

Bunu Ubuntu 16.10'da kontrol ediyorum. / Etc / default / rcS düzenlemesinin artık hiçbir etkisi olmadığını ve bu dosyaya ne koyduğunuz önemli değil, tmp içindeki dosyaların yeniden başlatılarak silindiğini onaylayabilirim. Diğerlerinin dediği gibi, tmpreaper artık kullanılmamaktadır.

Bence doğru cevap, Ubuntu 16.10'un yeni bir kuruma sahip olduğudur. "Tmpfiles.d" man sayfasında belgelenen /etc/tmpfiles.d adlı bir klasör var. Bu klasörde, / tmp'nin silinip silinmeyeceğini kontrol etmek için bir yapılandırma dosyası yerleştirilmelidir. Bu, 20 gün eski olmadıkça, yeniden başlatmaların / tmp içindeki dosyaları silmelerini durdurmak için yaptığım şey:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

Dosyaları asla silmek istemiyorsanız, "20d" yi "-" ile değiştirin. Bu benim en iyi çabam, bu adam sayfası neredeyse ayrıntılarla aşılmaz.

Yeni kurulumun avantajı, sistem yeniden başlatılmamış olsa bile (her zaman sunucuda olduğu gibi) bir dosya temizleyicinin çalışabilmesidir. Bu büyük bir artı sanırım.


5
man tmpfiles.d
Martin Schröder

Orijinal dosya izinlerini ve sahibini tire kullanarak d /tmp/ - - - 20d
koruyabileceğinizi öğrendim

2
Ayrıca dikkat etmeniz gereken: temizlik işinizi elle çalıştırarak yapılandırmanızı test edebilirsiniz:systemctl start systemd-tmpfiles-clean
Dave Yarwood 22:18

@ pauljohn32 bu 16.10 sonrası sürümler için de geçerli mi?
kapad

3
@kapad: Bunun sadece Ubuntu 18.04'te de çalıştığını doğruladım.
Gene Vincent,

26

Ubuntu 14.04'te bu tmpreapergünlük olarak cron (from /etc/cron.daily) adı verilen bir işlem yapılır . Program /etc/default/rcSve ile yapılandırılabilir /etc/tmpreaper.conf.


sistemimde tmpreaper /etc/cron.daily dosyasında değildi - fakat apt-get ile
kurabildim

10

14.04'ten önce:

Her yeniden başlatışınızda temizlenir.


Görünüşe göre 14.04+ ile "önyükleme başına" betiği değil, yalnızca tmpreaper kullanılıyor FWIW
rogerdpack

14.04 sistemlerin hepsi yeniden başlatılıyor. Hiç duymadım bile tmpreaper.
Ken Sharp,

Ya sistemi hiç yeniden başlatmazsan?
phuclv

7

Bir systemdUbuntu'da (15.10 ve daha yenisi), systemd-tmpfiles-cleanservis ve zamanlayıcı kullanılarak sistemd tarafından yapılır :

$ 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

Ve

$ 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

Böylece systemd-tmpfiles-cleankapanma ve günde bir kez çalışır. Temizlediği dosyalar başka bir cevapta/etc/tmpfiles.d belirtilenler kullanılarak genişletilebilir .

Zamanlayıcı davranışının kendisini kullanarak systemctl edit systemd-tmpfiles-clean.timerve çeşitli sistem Timerkonfigürasyon seçeneklerini kullanarak değiştirebilirsiniz (bkz. man 5 systemd.timer).


Zamanlayıcıyı 20dk olarak değiştirdim ve status komutunun 20dk yapılandırma kullandığını gösterdiğini görüyorum. ama benim sorunum bu /tmphala temizlenmiş değil. ve temizlenmesini istiyorum. manuel başlatma bile sudo systemctl start systemd-tmpfiles-cleanhile yapmaz. Neden bir fikrin var mı?
user2932688

5

Ubuntu çalıştıran sunucularımızdan birinde, / tmp içindeki dosyaları kaldırmak için bir komut dosyası kullanıyoruz ve her gece çalışıyor.

Betik:

#!/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 {} \;

Sadece yukarıdaki içeriği bir dosyaya kaydediniz chmod 775 ve dosyayı çalıştırmak için bir cron girişi oluşturun. Bu bir web sunucusu olduğundan, bariz nedenlerden dolayı yeniden başlatmak istemiyoruz.


6
Tmpwatch kullanarak daha iyi olabilirsiniz .
poolie

9
Son satır son derece tehlikelidir. Normalde, herkes ln -s /usr /tmp/kaboomln -s /* /tmp/
Daniel Alder,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.