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.
mktemp
benzersiz 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. mktemp
adlı kullanıcının sayfası şöyle diyor
TEMPLATE belirtilen değilse,
--tmpdir
eğer kabul edilir--tmpdir
belirtilmemişse,/tmp
varsayı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
$TMPTIME
0
/etc/default/rcS
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
Eğer Şimdi, eğer bunu bir ŞABLON belirtmek örneğin mktemp fooXXX
ardından adlı bir dosya fooXXX
geç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 /tmp
sistem 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
tmp
dizinin 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
mktemp
herhangi bir dizinde çalıştırılabilir ve sadece rasgele bir dosya adı üretir, bunun nasıl bir şey olduğunu görmüyorum tmpwatch
.
mktemp
iç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.
TMPTIME
mu?
/tmp
veya diğer tmp dizinleri. Kullanıcı tarafından oluşturulan dosyaları rastgele siler.
mktemp
içinde dosya oluşturur /tmp/
.