Berapa lama file sementara yang dibuat dengan mktemp bertahan?

20

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.

MYV
sumber

Jawaban:

17

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
terdon
sumber
2
Ini tidak menjawab pertanyaan saya. Dikatakan itu membuat file "sementara", dan tidak memberikan informasi tentang berapa lama itu berlangsung. Jadi itu bertahan selamanya? Apakah direktori tmp tertahan pada boot sistem?
MYV
@Maksim melihat jawaban yang diperbarui. Selain itu, pertanyaan Anda tidak menanyakan kapan tmpdirektori dihapus tetapi ketika file yang dibuat dengan mktempdihapus. Seperti yang Anda lihat, keduanya belum tentu terkait :).
terdon
6

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

Chris
sumber
Melihat 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.
terdon
1
Secara default mktempmembuat file dalam /tmp/.
Chris
hanya jika Anda tidak memberikan TEMPLATE, lihat jawaban saya yang diperbarui.
terdon
1

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.

EBGreen
sumber
Bukankah beberapa sistem menggunakan TMPTIME?
demure
@ pastikan ya tetapi hanya untuk menghapus /tmpatau direktori tmp lainnya. Itu tidak akan hanya menghapus file yang dibuat pengguna secara acak.
terdon
Secara default mktempmembuat file dalam /tmp/.
Chris