Jawaban:
Hah? Dari 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.
mktemphanya menambahkan string acak untuk membuat nama file unik. Tidak ada yang akan menghapusnya secara otomatis.
Karena tampaknya ada sedikit argumen, mari kita masuk ke beberapa detail. mktempHalaman manual menyatakan itu
jika TEMPLATE tidak ditentukan,
--tmpdirdiasumsikan, jika--tmpdirtidak ditentukan,/tmpdiasumsikan.
Ini berarti bahwa hanya menjalankan mktempakan membuat file bernama tmp.RANDOM_STRING di direktori / tmp . Jadi ya, menjalankan mktemptanpa parameter akan membuat file yang akan dihapus bersama dengan semua yang lain /tmpdengan cara yang bergantung pada sistem. Untuk file seperti itu, $TMPTIMEvariabel akan menjadi penting seperti yang dijelaskan dalam jawaban Chris di bawah ini. Untuk banyak distribusi, defaultnya adalah menghapus /tmpsetiap boot karena $TMPTIMEdiatur ke 0. Di sebagian besar (jika tidak semua) distribusi, ini diatur dalam file /etc/default/rcS:
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
Sekarang, jika Anda melakukan menentukan TEMPLATE, misalnya mktemp fooXXXmaka file bernama fooXXXdibuat dalam direktori saat ini di mana XXXdigantikan oleh tiga karakter acak. File ini tidak akan pernah dihapus kecuali Anda secara khusus memilih untuk melakukannya. Hanya file dalam direktori sementara "resmi" seperti /tmpyang pernah secara otomatis dihapus oleh sistem, tidak ada bit ajaib yang dapat Anda atur yang menentukan file sementara, file di luar /tmpdan sejenisnya tidak dihapus secara otomatis.
Untuk menjawab pertanyaan utama Anda, tentu saja aneh untuk bergantung pada file yang bisa menghilang, itu sebabnya orang tidak bergantung pada file tmp, mereka dibuat untuk sementara menyimpan data dan kita kemudian bisa melupakannya. Ada banyak cara untuk membuat file persisten, yang dinamai secara acak. Sebagai contoh:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmpdirektori dihapus tetapi ketika file yang dibuat dengan mktempdihapus. Seperti yang Anda lihat, keduanya belum tentu terkait :).
Harap diingat bahwa file temp mungkin dihapus selama boot sistem atau sesuai TMPTIME. Silakan lihat apa yang Anda miliki /etc/cron.daily/tmpwatch.
/var/tmp/di sisi lain biasanya kebal terhadap tmpwatch.
File temp dibuat untuk (biasanya) waktu singkat. Mereka memiliki nama temp sehingga tidak mudah untuk melakukan serangan waktu dan biasanya mereka dihapus ketika tidak dibutuhkan oleh program lagi. Biasanya skrip Anda akan menyimpan file ini untuk waktu yang sangat singkat, biasanya memproses beberapa teks atau file lain dan itu akan menghapusnya segera setelah itu tidak diperlukan. Jika skrip Anda macet, Anda juga harus mengembalikan prosedur tata letak folder / tmp (jika Anda memutuskan untuk meletakkannya).
Anda tidak harus membuat file temp /tmp
mktempdapat dijalankan di direktori apa saja dan hanya menghasilkan nama file yang sewenang-wenang, saya tidak melihat bagaimana ini ada hubungannya dengan apa pun tmpwatch.
mktempmembuat file dalam /tmp/.
File temp tidak hilang dengan sendirinya. Mereka disebut file temp hanya karena dalam skrip atau sesi Anda atau di mana pun Anda membuatnya, Anda diharapkan untuk menghapusnya ketika Anda selesai. Atau biarkan mereka berbaring di sekitar jika itu yang Anda inginkan. mktemp ada hanya untuk memungkinkan Anda menemukan file yang diberi nama sesuatu yang unik sehingga tidak menimpa beberapa file yang ada.
TMPTIME?
/tmpatau direktori tmp lainnya. Itu tidak akan hanya menghapus file yang dibuat pengguna secara acak.
mktempmembuat file dalam /tmp/.