Mktemp ile yapılan geçici dosyalar ne kadar sürer?


20

Mktemp ile oluşturulan geçici dosyaların ne kadar sürdüğünü merak ediyordum. Herhangi bir zamanda kaybolabilecek bir dosyaya güvenmek bana garip geliyor. Eğer önemliyse ubuntu'dayım.

Yanıtlar:


17

Ha? Gönderen man mktemp:

DESCRIPTION
   Create  a  temporary  file  or directory, safely, and
   print its name.  TEMPLATE must  contain  at  least  3
   consecutive  `X's  in last component.  If TEMPLATE is
   not specified, use tmp.XXXXXXXXXX,  and  --tmpdir  is
   implied.   Files  are  created  u+rw, and directories
   u+rwx, minus umask restrictions.

mktempbenzersiz bir dosya adı oluşturmak için rastgele bir dize ekler. Kimse otomatik olarak kaldıramayacak.


Biraz tartışma olduğu için biraz daha ayrıntıya girelim. mktempadlı kullanıcının sayfası şöyle diyor

TEMPLATE belirtilen değilse, --tmpdireğer kabul edilir --tmpdirbelirtilmemişse, /tmpvarsayılır.

Bu, basitçe çalıştırmanın / tmp dizinindemktemp adlandırılan bir dosya oluşturacağı anlamına gelir . Bu nedenle evet, hiçbir parametre olmadan çalışmak , sisteme bağlı bir şekilde diğer her şeyle birlikte temizlenecek bir dosya oluşturur . Bu tür dosyalar için değişken, Chris'in aşağıdaki cevabında açıklandığı gibi önemli olacaktır. Birçok dağıtım için, varsayılan olarak her önyüklemeyi temizler çünkü ayarlıdır . Çoğu (hepsi değilse de) dağıtımlarda, bu dosyada ayarlanır :tmp.RANDOM_STRING mktemp/tmp$TMPTIME/tmp$TMPTIME0/etc/default/rcS

$ grep TMPTIME /etc/default/rcS
TMPTIME=0

Eğer Şimdi, eğer bunu bir ŞABLON belirtmek örneğin mktemp fooXXXardından adlı bir dosya fooXXXgeçerli dizinde oluşturulur XXXüç rastgele karakterler ile değiştirilir. Özellikle seçmediğiniz sürece bu dosya asla silinmeyecektir. Sadece "resmi" geçici dizinlerdeki dosyalar gibi /tmpsistem tarafından otomatik olarak silinir, ayarlayabileceğiniz sihirli bir bit yoktur /tmp.

Ana sorunuza cevap vermek için, elbette kaybolabilecek bir dosyaya bağımlı olmak gariptir, bu yüzden insanlar tmp dosyalarına bağımlı değildir, geçici olarak veri tutmak için yaratılır ve daha sonra bunları unutabiliriz. Kalıcı, rastgele adlandırılmış bir dosya oluşturmanın birçok yolu vardır. Örneğin:

echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt

2
Bu sorumu cevaplamıyor. "Geçici" bir dosya yaptığını ve ne kadar sürdüğü hakkında bilgi vermediğini söylüyor. Yani sonsuza kadar sürecek mi? Tmp dizini sistem önyüklemesinde saplanıyor mu?
MYV

@Maksim güncellenmiş cevaba bakınız. Ayrıca, sorunuz tmpdizinin ne zaman silindiğini değil, bununla oluşturulan dosyaların silindiğini sordu mktemp. Gördüğünüz gibi, ikisi birbiriyle ilişkili değil :).
terdon

6

Geçici dosyaların sistem açılışında veya TMPTIME uyarınca kaldırılabileceğini lütfen unutmayın. Lütfen neye sahip olduğunuzu görün /etc/cron.daily/tmpwatch.

/var/tmp/Öte yandan genellikle bağışıktır tmpwatch.

Geçici dosyalar (genellikle) kısa bir süre için oluşturulur. Geçici isimleri vardır, bu nedenle zamanlama saldırısı yapmak kolay değildir ve genellikle artık programa ihtiyaç duyulmadığında silinir. Genellikle betiğiniz bu dosyayı çok kısa bir süre için saklar, genellikle bazı metinleri veya diğer dosyaları işler ve gerekmediği anda kaldırır. Eğer betiğiniz çökerse, aynı zamanda / tmp klasörü temizlik prosedürlerine geri dönersiniz (eğer bunları koymaya karar verdiyseniz).

İçinde geçici dosya oluşturmanız gerekmez /tmp


Gördüğünüz gibi mktempherhangi bir dizinde çalıştırılabilir ve sadece rasgele bir dosya adı üretir, bunun nasıl bir şey olduğunu görmüyorum tmpwatch.
terdon

1
Varsayılan olarak mktempiçinde dosya oluşturur /tmp/.
Chris

yalnızca ŞABLON vermezseniz, güncellenmiş cevabımı inceleyin.
terdon

1

Geçici dosyalar kendi başlarına kaybolmazlar. Bunlara geçici dosyalar denir, çünkü betiğinizde veya oturumunuzda veya nerede yaparsanız yapın, işiniz bittiğinde bunları silmeniz beklenir. Ya da eğer bu senin işinse onları etrafta bırak. mktemp yalnızca benzersiz bir adda bir dosya bulmanıza izin vermek için vardır, böylece varolan bazı dosyaların üzerine yazmaz.


Bazı sistemler a kullanmıyor TMPTIMEmu?
13:20

@ evet ama sadece temizlemek /tmpveya diğer tmp dizinleri. Kullanıcı tarafından oluşturulan dosyaları rastgele siler.
terdon

Varsayılan olarak mktempiçinde dosya oluşturur /tmp/.
Chris
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.