/ Tmp içindeki bir dizinin silinmesini önleme


10

/tmpLinux makinemdeki dizini genellikle geçici dosyaları (örneğin önce indirmemi isteyen bir siteden PDF'ler vb.) Saklamak için kullanırım ve sıklıkla kullanıcı adımla bir dizin oluştururum. Ancak her açılışta (tüm dosyalar dahil) silinir. Şimdi koyabileceğimi biliyorum /var/tmp, ancak tüm içeriğinin silinmesini istiyorum, ancak dizinin kendisinin tutulması için. Yani:

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

Bunu yapmanın bir yolu var mı? Belki izinlerle mi yoksa özel bir konfigürasyonla mı?


1
Geçici bir çözüm olarak, gerektiğinde "test & mkdir" yapmak için kabuğunuzun giriş dosyalarına bazı kodlar koyabilirsiniz.
Jeff Schaller

3
/tmpbüyük olasılıkla bir tmpfsdosya sistemidir. Bu dosyalar gerçekten silinmez; sadece RAM'de saklanır ve yeniden başlatıldığında kaybolurlar. Bu yüzden "önyükleme veya
girişte

Yanıtlar:


4

Bir çözüm bir @rebootcron işi kullanmak olacaktır :

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

Bunu crontab'ınıza ile eklemek crontab -e, makine her başlatıldığında çalışmasını sağlayacaktır.

Veya kullan

mkdir -p "/tmp/$USER"

Kabuğunuzun başlangıç ​​dosyasında.

Her iki durumda da,

TMPDIR=/tmp/$USER
export TMPDIR

dizini varsayılan geçici dizin olarak kullanmak istiyorsanız kabuğunuzun başlangıç ​​dosyasında.


Bu a) tüm kullanıcılar için dizinler oluşturacak mı ve b) 'soğuk' başlatmadan da tetiklenecek mi?
Linux4win

1
@ Linux4win Bu cevap tek bir kullanıcının ihtiyaçlarına yöneliktir, çünkü soruyu bu şekilde ifade ettiniz. Makinenin nasıl önyüklendiği önemli değil (sıcak, soğuk veya ılık), ancak hazırda bekletme modundan devam ettirilirken tetiklenmez (çünkü bu önyükleme yapmaz).
Kusalananda

Nedense @reboot mkdir -p "/tmp/$USER"crontab sonuna eklemek hiçbir şey yapmaz, çalışırken mkdir -p "/tmp/$USER"aslında dizin oluşturur. İkincisi bu arada benim için çalışmıyor, çünkü /tmpdiğer programlardan
erişmem

@ Linux4win @rebootCron işi bir dizin oluşturmuyor mu? Cron arka plan programından herhangi bir hata mesajı ile hesabınıza e-posta gönderiliyor mu?
Kusalananda

iyi hayır ... Belki yapılandırmadım çünkü mail? Yoksa bu gerekli değil mi?
Linux4win

14

Bunun için kullanıyorum pam-tmpdir: girişte bir kullanıcı-özel geçici dizin oluşturur. Ayarlamak için şunu ekleyin:

session optional pam_tmpdir.so

uygun PAM servislerine; Debian tabanlı bir sistemde, libpam-tmpdirpaketin yüklenmesi bunu sizin için yapmayı teklif edebilir veya satırı ekleyebilirsiniz /etc/pam.d/common-session. Bir sonraki oturum açışınızda /tmp/user, kullanıcı kimliğinizin altında bir dizin bulacak TMPve TMPDIRuygun şekilde ayarlayacaksınız.


7
Uygun PAM hizmetlerinin ne olduğunu ve hattın bunlara nasıl eklenebileceğini açıklayabilir misiniz? Hangi dosyalar düzenlenmeli?
terdon

2

Systemd ile bir sistem çalıştırmıyorsanız ve temizlemeyi yönetmek için systemd-tmpfiles kullanıyorsa, dizini bu sistemi kullanarak yapılandırmalısınız.

İşte tam bir dokümantasyon . Aşağıdakiler /etc/tmpfiles.d/something.confgibi içeriklerle oluşturarak istediğiniz şeyi elde edebilirsiniz :

d     /tmp/your_username   0750 your_user your_group  - -

1

Yorumlarda belirtildiği gibi /tmp, geçici olan ve silinirse kaçırılmayacak dosyalar içindir. Bir şeyin ortasındaysanız ve makine yeniden başlatılırsa, orada yazdığınız her şey kaybolacak ve baştan başlamanız gerekecek, bu da sonuçta bu kadar geçici olmayabilir.

Bir gigabaytın çok fazla yer kapladığı yıllardan beri ana dizinimde geçici bir dizin tuttum ve eski ve acımasız hale gelen dosyalardan kurtulmak için periyodik bakım gerektirdiğini gördüm. Bu süreçten sonra bıraktığım çoğu zaman birkaç haftadan daha azdı, bu yüzden şimdi günde bir kez çalışan bir cron işi ile temizliyorum:

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

Yarı geçici olarak indirdiğim veya oluşturduğum her şey oraya gider ve sistem geride bıraktığım her şeyi temizler. Kalıcı bir eve ihtiyaç duyan her şey, cron işi ondan kurtulmadan çok önce bir tane alır.


mkdir a a/b; touch a/b/c. Şimdi 30 gününüzün dolmasını bekleyin. Silmek olarak cgüncellenmesi gerekir b, bu da bir başka 30 gün boyunca beklemek zorunda anlamına gelecektir. Aynı şekilde asildiğinizde de b. İkincisi, dosyalar oluşturursanız bancak a30 gün boyunca dokunmazsanız , adizine isabet edilir rm -rfve son dosyalarınızı altındaki silinir b.
roaima

find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/nullbenim için çalışıyor
roaima
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.