/ Tmp içindeki bir klasörün temizlenmesini nasıl önleyebilirim?


12

Bu soru geliştirici dizüstü bilgisayarımdaki Ubuntu 14.10 hakkında.

/tmpBir uygulama tarafından geçici şeyler koymak için kullanılan bir klasör var. Bu uygulama genellikle homedirimde geçici bir klasör oluşturur ve daha sonra siler. Nedense homedir şifrelendiğinde bu işe yaramaz. Bunun yerine, /tmp/foohomedirimin içine bir sembolik bağ yaptım. Uygulamam yazabilir ve geçici alt klasör yapabilir.

/tmp/fooMakinemi her yeniden başlattığımda artık siliniyor. Şimdiye kadar yeniden başlattıktan sonra klasörü manuel olarak yeniden oluşturdum. Şimdi / tmp dizini nasıl temizlenir? bunu yapan bir iş olduğunu.

Ben baktım /etc/init/mounted-tmp.confama benim bashfu ve özellikle benim findfu ne istediğimi yapmak için yeterli değil. İşte bu dosyadan bir alıntı:

   EXCEPT='! -name .
            ! ( -path ./lost+found -uid 0 )
            ! ( -path ./quota.user -uid 0 )
            ! ( -path ./aquota.user -uid 0 )
            ! ( -path ./quota.group -uid 0 )
            ! ( -path ./aquota.group -uid 0 )
            ! ( -path ./.journal -uid 0 )
            ! ( -path ./.clean -uid 0 )
            ! ( -path "./...security*" -uid 0 )'

   # Remove all old files, then all empty directories
   find . -depth -xdev $TEXPR $EXCEPT ! -type d -delete
   find . -depth -xdev $DEXPR $EXCEPT -type d -empty -delete

Yapmak istediğim, içindeki her şeyi silmesini sağlayan bir koşul eklemektir /tmp/foo, ancak /tmp/fookendisini değil . Bunu nasıl yaparım?


/tmp/foobir dizin veya dosya?
terdon

Bir dizin. İçinde dosyalar var.
simbabque

Neden daha mkdir /tmp/fooönce eklemiyorsun end script?
Hagen von Eitzen

Sadece FYI (bunu zaten biliyor olabilirsiniz): 14.10 Temmuz 2015'te EOL'ye ulaştı, bu yüzden en kısa zamanda gerçekten Vivid'e yükseltmelisiniz.
Léo Lam

Yanıtlar:


20

/etc/init/mounted-tmp.confmountallpaketin bir parçası olduğundan, paketteki güncellemeler ve önerilen değişiklikler geri alınır.

$ sudo dpkg -S /etc/init/mounted-tmp.conf 
mountall: /etc/init/mounted-tmp.conf

Bunun yerine, Dosya Sistemi Hierachy standardına (FHS) göre ;

İlişkin / tmp :

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

İle ilgili olarak , / var / tmp :

/ Var / tmp dizini, sistem yeniden başlatılanlar arasında korunan geçici dosyalar veya dizinler gerektiren programlar için kullanılabilir. Bu nedenle, / var / tmp içinde saklanan veriler / tmp içindeki verilerden daha kalıcıdır.

Kullanmak için sembolik bir bağlantı değiştirmelisiniz Yani /var/tmpyerine /tmp.


3
Çekiçiniz olduğunda klasik bir örnek, her şey bir çiviye benziyor.
WernerCD

@WernerCD bununla ne demek istediğini açıklayabilir misin? Bunun /var/tmpiyi bir fikir olmadığını mı söylüyorsun ?
simbabque

6
Sahip olduğunuz tek şey bir çekiç olduğunda ... - If a person is familiar with ... a certain, single instrument, they may have a confirmation bias to believe that it is the answer to/involved in everything.OP'nin, kullanılması amaçlanmayan bir şey için / tmp kullandığını söylüyorum - / tmp'yi, tmp'yi ama oldukça değil -tmp şeyler. / var / tmp yeniden başlatmalar arasında tutulmalıdır, bu yüzden doğru cevaptır.
WernerCD

8

Sorunuza kesinlikle bir cevap değil, ancak /var/tmpyeniden başlatma sırasında temizlenmediği için daha uygun bir yer bulabilirsiniz . Kısa bir süre sonra otomatik olarak atılmaması gereken geçici dosyalar için tasarlanmıştır.

Ancak sık sık yaptığım şey, kendimi evde istemediğim rastgele şeyleri saklamak için / opt altında bir klasör oluşturmak. Burası ana işletim sisteminin kontrolü dışındaki şeyleri koymak için uygun bir yer.


Bu doğru fikir. / Tmp istediğinizi yapmazsa, alanınız varsa başka bir sürücüde bile bilgilerinizi başka bir yerde saklayın. İhtiyacınız olan sonucu almanın tek yolu olmadığı sürece Linux'un (ve diğer programcıların) belirli bir yol olmasını beklediği şeylerle uğraşmayın.
Joe

6

Şöyle ki:

EXCEPT='! -name .
            ...
            ! ( -path "./foo" )'

   # Remove all old files, then all empty directories
   ...
   find /tmp/foo/* -depth -xdev $TEXPR -delete

Misal:

$ cd /tmp/foo/
$ mkdir 1 2 3
$ touch 3 4 5
$ find /tmp/foo/* -depth -xdev $TEXPR -delete
$ ls /tmp/foo/
$

Ben kullanıcı aap ile katılıyorum: Ya tmp dosyaları varsa orada dizini yeniden oluşturarak kullanılan yazılımda dikkat etmeli veya temizlenmemiş tmp dosyaları değilse başka bir dizin kullanın.


Bu aslında işe yaramıyor. İken findkomut elle çalıştırdığınızda beklendiği gibi çalıştığını, dizin hala düzenledikten sonra kaldırılır /etc/init/mounted-tmp.conf. Burada başka bir şey oluyor gibi görünüyor.
terdon

wth. ehm. bu 1. hattın hatalı olduğu anlamına gelmelidir. belki göreceli olması gerekir (?)
Rinzwind

@terdon evet / tmp / ile ilgili olması gerektiği anlaşılıyor
Rinzwind

Ben öyle düşünmüyorum, dahil olmak üzere çeşitli permütasyonlar denedim -path ./foove hatta -name '*foo*'hiçbiri çalıştı (Ubuntu Server 14.04'te). Bence bu sadece doğru dosya değil ve yanlış yere bakıyoruz. Önerdiğiniz Ne gereken çalışmak, sadece görünmüyor.
terdon

0

Gelecekteki değeri olan dosyalara sahip olmak, / tmp dizinine yazmak kötü bir fikirdir (/ var / tmp, başkaları tarafından önerildiği gibi, daha iyi bir yerdir). Bununla birlikte, chattr'de bir şans vermek isteyebilirsiniz. Bu işlem uygulamadan çıktıktan sonra ancak kapatmadan önce çalıştırılmalıdır. Bu işlemin bu dizine hiçbir şey yazmasına izin vermeyeceğini unutmayın .

/tmp/foo/ddmmyy/.001_immute_me chattr + i /tmp/foo/ddmmyy/.001_immute_me'ye dokunun


Geçici bir dizine sahip olmak istersem bu nasıl yararlı olur?
simbabque

-1

Bunu çalıştırın:

echo "if [ ! -e /etc/foo/ ]; then mkdir /etc/foo/; fi; rm -rf /etc/foo/*" > /bin/foodel; sudo chmod 755 /bin/foodel 

daha sonra bunu / etc / inittab dosyasına ekleyin buraya bakın: inittab dosyası nerede? :

foo:2345:boot:/bin/foodel

Bu, yoksa / etc / foo'yu oluşturur ve sonra boşaltır.

Bu, bash girişinde de aynısını yapacak:

echo "/bin/foodel" >> ~/.bashrc

Ubuntu sürüm 14 kullanmıyor /etc/inittab. Bu, kılavuz sayfasında açıkça ve açık bir şekilde belirtilmiştir.
JdeBP

* facepalm * Üzgünüm @JdeBP, linux'un 4 farklı versiyonunu hokkabazladıktan sonra başıma bu geliyor. Kodu askubuntu.com/questions/34308/where-is-inittab-file
Daniel
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.