Saya bertanya-tanya berapa lama file temp dibuat dengan mktemp terakhir. Rasanya aneh bagi saya untuk mengandalkan file yang bisa hilang kapan saja. Saya di ubuntu, jika itu penting.
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.
mktemp
hanya 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. mktemp
Halaman manual menyatakan itu
jika TEMPLATE tidak ditentukan,
--tmpdir
diasumsikan, jika--tmpdir
tidak ditentukan,/tmp
diasumsikan.
Ini berarti bahwa hanya menjalankan mktemp
akan membuat file bernama tmp.RANDOM_STRING
di direktori / tmp . Jadi ya, menjalankan mktemp
tanpa parameter akan membuat file yang akan dihapus bersama dengan semua yang lain /tmp
dengan cara yang bergantung pada sistem. Untuk file seperti itu, $TMPTIME
variabel akan menjadi penting seperti yang dijelaskan dalam jawaban Chris di bawah ini. Untuk banyak distribusi, defaultnya adalah menghapus /tmp
setiap boot karena $TMPTIME
diatur 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 fooXXX
maka file bernama fooXXX
dibuat dalam direktori saat ini di mana XXX
digantikan oleh tiga karakter acak. File ini tidak akan pernah dihapus kecuali Anda secara khusus memilih untuk melakukannya. Hanya file dalam direktori sementara "resmi" seperti /tmp
yang pernah secara otomatis dihapus oleh sistem, tidak ada bit ajaib yang dapat Anda atur yang menentukan file sementara, file di luar /tmp
dan 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
tmp
direktori dihapus tetapi ketika file yang dibuat denganmktemp
dihapus. 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 terhadaptmpwatch
.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
sumber
mktemp
dapat dijalankan di direktori apa saja dan hanya menghasilkan nama file yang sewenang-wenang, saya tidak melihat bagaimana ini ada hubungannya dengan apa puntmpwatch
.mktemp
membuat 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.
sumber
TMPTIME
?/tmp
atau direktori tmp lainnya. Itu tidak akan hanya menghapus file yang dibuat pengguna secara acak.mktemp
membuat file dalam/tmp/
.