/ Tmp içeriğini elle silmemiz mi gerekiyor?


26

“Eski” dosyaların /tmpdüzenli olarak silineceği izlenimini edindim. Ancak, bana /tmpistediği kadar büyüyecek ve hiçbir şey silinmeyecek gibi görünüyor. Bazı insanlar /tmpyalnız kalmanın ve içeriğini yalnızca disk doluysa silmenin daha iyi olduğunu söylüyor .

Sorum şu, /tmpgerçekten kendine dikkat etmeyecek şekilde tasarlandı En iyi uygulamalar nelerdir?


1
normal olarak /tmpyeniden başlatıldıktan sonra temizlenir, ancak bu oraya monte edilen dosya sistemine bağlıdır. Ne df -hdiyor?
etagenklo

Yanıtlar:


27

Soruları cevaplamak için:

  • Is /tmpotomatik boşaltılması gerekiyordu: Evet
  • Dosyaları /tmpdüzenli ve manuel olarak mı silmemiz gerekiyor : Hayır , sisteminiz bunlarla ilgilenecektir.

Kendinize sorabilirsiniz:

  • Herhangi bir /tmpnedenden dolayı dosyaları silebilir miyim (alana ihtiyaç duyar, izleri silmek istiyorum vb.): Bu , okumaya bağlıdır .

Dosya Sistemi Hiyerarşi Standardı (FHS) belirtir :

Geçici dosyalar gerektiren programlar için / tmp dizini hazır bulundurulmalıdır.

Programlar, programın çağrıları arasında / tmp içindeki herhangi bir dosya veya dizinin korunduğunu varsaymamalıdır.

/var/tmp/Bir sahiptir benzer bir amaca ancak olmamalıdır yeniden başlatma sırasında silinecektir.

O olduğu için garanti olduğunu /tmp/veya /var/tmp/düzenli olarak temizlenir. Bu, dağıtımınıza ve ayarlarınıza bağlı olabilir, ancak çoğu sistem zaman zaman biraz temizlik yapar. Tarafından yapılan yoruma bakınız mike.

/ Tmp içindeki bir dosyayı silmeniz gerekirse, önce dosyanın kullanımda olup olmadığını görün. Bunu kolayca yapabilirsiniz:

lsof /tmp/file_to_delete

Bunu yapma hakkınız varsa, bu işlem, işlem adı, PID ve dosyanın türü gibi tanıtıcıyı bu dosyaya tutan işlemi gösterir. Gerçekten tüm işlemleri göstermek için, sudokullanıcı kökü olarak hazırlayın veya çalıştırın .

lsof +D /tmp

şu anda açık olan tüm dosyaları /tmpve dizinleri aşağıda ( +D) gösterecektir . Elbette bu dosyaları silmemelisiniz.

Aslında hala açık olan bir dosyayı sildiğinizde - bunu yapma hakkınız varsa - dosya sistemi ad alanından erişilemez hale gelir, ancak bunun için açık bir dosya tanıtıcısı olan işlemler için hala var olur. Bu tanıtıcıyı kapattıktan sonra, bu işlem için dosyaya artık erişilemez ve dosya daha fazla açılmamışsa dosya silinir. Bir işlem, dosyanın sonraki opençağrılar arasında sağ kaldığını düşünmemelidir, ancak programcılar özensizdir ve asla bilemezsiniz. Bu nedenle , hala bazı programlar tarafından kullanılmakta olan dosyaları silmek o kadar da akıllıca değil .


Genel olarak tüm bunlar mükemmel bir tavsiye, özellikle de son paragraf. Ancak bir sistemin aslında temizleme / tmp yapıp yapmaması o sisteme bağlıdır. Örneğin, openSUSE'de, öyle değil (/ etc / dan sysconfig veya Yast ile) şekilde yapılandırın sürece,. Ayrıca, kullanıcıların kişisel ~ / tmp (varsa) otomatik olarak silinmez.
Mike,

Yani işlemlerin açık olduğu dosyaları silmek hala mümkün mü? Ve bu program çökmez mi? Dosya nerede var o zaman? Program bu "açılmış ancak aynı anda silinmiş" dosyasıyla etkileşime girebilir mi? Rm'nin dosyayı kaldırmasını zorlaştırmak veya imkansız hale getirmenin bir yolu var mı? Belki bir dosya kilidi gibi bir şey?
CMCDragonkai

Dosyalar, dosya sistemindeki hiyerarşik bir ad alanında, bir yol ve dosya adıyla erişilebilir hale getirilen veri kümeleridir. Bir dosya birden fazla ada sahip olabilir (sabit bağlantılar) ve işlem bir dosya için açık bir tutamaç içerebilir. Dosyaya erişilemiyorsa, adı ve açık tanıtıcısı bulunmadığında silinir. Silmeyi önlemek, uzmanlığımın ötesinde ve IMO bu sorunun kapsamı dışında. "Zorunlu kilitleme" aramayı deneyin.
trapicki

[yinelenen bir cevaptı]
trapicki

4

Bunun işletim sistemi değişkenine bağlı olduğunu düşünüyorum. Genellikle / tmp'nin yeniden başlatma sırasında silindiğini ve aslında hangi dosyaların aktif olduğunu bilmeyeceğinden sistemin kendi kendini temizlemesinin güvenli olmayacağını hayal ediyorum.

Cesursanız, belli bir yaştan büyük dosyaları silen crontab komutunu vermek isteyebilirsiniz, ancak hala kullanılan dosyaları silerken bu bazı sorunlara neden olabilir. Gibi bir komut deneyebilirsiniz (denemedim)

find / tmp -tipi f-zamanı +10 -exec rm {} +

Teorik olarak / tmp altındaki tüm dosyaları 10 gün sonra teorik olarak kaldıracaktır.


Muhtemelen eklemek gerekir -rbuna
Steven Penny

1
Kesinlikle -R buna eklemeyin, 10 günden daha önce oluşturulmuş dizinlerde bulunan 10 günden daha kısa bir süre önce dosyaları etkileyecektir. Aslında, komut muhtemelen aramayı dosyalara sınırlamak için / tmp -type f -ctime +10 -exec rm {} + 'yı bulmalıdır. (
Find

1

/ Tmp ve / var / tmp dizinleri normal bir programda temizlenir. Bu, dağıtımınıza bağlı olabilir. CentOS sistemimde (RedHat klonu) günlük programda tmpwatch , tmp dir temizleyici çalıştırmak üzere programlanmış bir cron işi var . / Var / tmp içindeki dosyaların / tmp / içindeki dosyalardan biraz daha uzun süre kalmasına izin verilir. Ayrıca, tüm işlemler yeni olduğu için bu dosyayı açık tutan hiçbir şey olamayacağını bilerek bir yeniden başlatmada / tmp (ancak açıkça / / / / tmp değil) budayan komut dosyaları gördüm.

Öyleyse, evet, / tmp temel betiklerden bakım almıştır. Hala bu bakım sürelerinin dışını doldurabilir. Manuel olarak temizlik yapmayı seçtiyseniz, en iyi sysadmin uygulaması dikkatli olmaktır. Sysadmin, n00b sysadmins basit bir findkomut dosyası çalıştırdığında silinmiş gerekli sistem dosyalarına işaret eden / tmp içindeki sembolik bağlantılar hakkında konuşur .


2
Centos 7 ve systemd özellikli diğer RedHat benzeri sürüm 7+ sistemlerinde, temizleme /usr/lib/tmpfiles.d/tmp.conf. Bu, systemd'nin target systemd-tmpfiles-clean.service tarafından çağrılır.
shonky linux kullanıcısı,

1

CentOS'ta , belirli bir süredir erişilmeyen dosyaları tekrar tekrar silecek şekilde /etc/cron.dailyadlandırılan bir iş tmpwatchvar. Normalde, / tmp gibi geçici tutma alanları için kullanılan dizinleri temizlemek için kullanılır.

Bu /etc/cron.daily/tmpwatchkomut dosyası

#! / Bin / sh
bayraklar = -umc
/ usr / sbin / tmpwatch "$ flag" -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 "bayraklar" 30d / var / tmp
d / var / {cache / man, catman} / {cat?, X11R6 / cat?, local / cat?}; yap
    eğer [-d "$ d"]; sonra
        / usr / sbin / tmpwatch "$ flag" -f 30d "$ d"
    fi
tamam

/tmp Dizin içeriği yalnızca sistem yeniden başlatıldığında silinir, çünkü çalışan işlem bu dizinden dosyalara erişebilir.


0

İçeriği /tmp/; ancak bunu yapmanın sorunu, düzenli olarak yazan bir servisiniz /tmp/varsa ve dosyaları silerseniz, hizmeti yeniden başlatana kadar çökmesine veya bozulmasına neden olabilirsiniz.


0

FHS tanımlar /tmpve "genellikle sistem yeniden başlatma arasında korunmaz, (aynı zamanda / var / tmp bakınız) geçici dosyaları" olarak dizin /var/tmp"geçici dosyalar yeniden doğmuş arasında korunacak" şeklinde.

Günümüzde, /tmpbirçok GNU / Linux dağıtımında varsayılan olarak (isteğe bağlı olsa da) RAM dosya sistemi (tmpfs) olmak, /tmpkalıcı bir şekilde etkin değildir.

(Tartışmalı olarak) uygulamalar, geçici dosyaları uygun bir şekilde yönetmelidir; bence kullanımları bittiğinde onları silmeyi içerir ve yöneticilerin olası yıkıcı silmeleri planlamasına gerek duymaz.


Pek çok program, dosyaları /tmpkendileriyle birlikte yaptıkları zaman veya dışarı çıktıklarında temizleme konusunda daha iyi bir iş çıkartabilir , ancak yine /tmpde bir programın olağandışı bir şekilde sonlandırılmasından (çökmesi) sonra bırakılan bir dosya sorunu vardır .
Kevin Fegan

0

Debian kullanıyorsanız (veya Ubuntu gibi bir türev kullanıyorsanız) / etc / default / rcS dosyasına bakmalı ve TMPTIMEortam değişkenini ayarlamalısınız . Tanım olarak / tmp içinde bulunanların bir sonraki açılışta burada yapacak bir şeyleri yok.

Ben tavsiye ediyorum

  • TMPTIMEBir sunucudaki değişkeni kullanarak
  • masaüstünde tmpfs (ram olarak) olarak mount / tmp (daha fazla hız için)

0

Dağılımlar elbette farklı, ancak geçici dosyaların sistem hazır durumdayken otomatik olarak yönetilmesini bekliyorum. Muhtemelen cron işlerini ya da systemd-tmpfiles-clean hizmetini kullanırlardı. Disk alanı için endişeleniyorsanız, bu her kök klasörün ne kadar yer kapladığına bakmak için yararlı bir komuttur:

du -hs /* | sort -h

Sisteminizin geçici dosyaları yönetmek için sistemd servisini kullanıp kullanmadığını görmek için, sadece deneyebilirsiniz:

systemctl status systemd-tmpfiles-clean

En altta, servisin en son ne zaman çalıştığını size söyleyen aşağıdaki gibi bir şey göreceksiniz:

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.

Bu hizmetin, temizlik yapıldıktan hemen sonra çıkacağını unutmayın. Bir zamanlayıcı servisi düzenli olarak tetiklemekten sorumludur. Şunlarla kontrol edebilirsiniz:

systemctl status systemd-tmpfiles-clean.timer

Ve aşağıdaki gibi bir şey beklemelisiniz:

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.

Dosyaları temizlemekten sorumlu asıl servise tekrar bakarsanız, tüm işlemlerin çalıştığını görürsünüz:

/usr/bin/systemd-tmpfiles --clean

Böylece doğrudan bu komutu çalıştırabilir ya da doğru şekilde yapabilirsiniz.

systemctl start systemd-tmpfiles-clean

Hangi sisteminiz için uygun komutu çalıştıracak. Ancak, bunun bir "tüm geçici dosyaları şimdi sil" komutu olmadığını unutmayın. Neyin silindiğini ve ne zaman uygulanacağını kontrol eden ve böylece geçici dosyaları ayrı ayrı yapılandırabilen birkaç yapılandırma dosyası vardır.

Geçici dosyaların genel olarak ele alınmasının aranacağı yerlerden /usr/lib/tmpfiles.d/tmp.confbiri, aşağıdaki ilgili satırlara sahip olabilir:

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

Örneğin, sisteminiz yetersiz kalmaya devam ederse, bunları daha kısa bir süreye değiştirebilirsiniz:

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

Ne yaptığınızdan emin olmak man tmpfiles.diçin kılavuzu okuyun. Yine burada sunulan yaklaşımı bir CentOS (RedHat tabanlı) ve bir Ubuntu sistemi ile alakalı buldum, ancak diğer dağıtımlar hakkında fazla bir şey bilmiyorum.

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.