Yanıtlar:
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
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 :).
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
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.
mktempiçinde dosya oluşturur /tmp/.
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.
TMPTIMEmu?
/tmpveya diğer tmp dizinleri. Kullanıcı tarafından oluşturulan dosyaları rastgele siler.
mktempiçinde dosya oluşturur /tmp/.