Відповіді:
Так? Від 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
просто додає випадковий рядок для створення унікального імені файлу. Ніхто не збирається його видаляти автоматично.
Оскільки, здається, є трохи аргументу, давайте детальніше розберемося. mktemp
Сторінка man говорить про це
якщо TEMPLATE не вказано,
--tmpdir
передбачається, якщо--tmpdir
не вказано,/tmp
передбачається.
Це означає, що просто запущений mktemp
файл створить файл, який називається tmp.RANDOM_STRING
в каталозі / tmp . Так що так, запуск mktemp
без параметрів створить файл, який буде очищений разом із усім іншим у /tmp
системному режимі. Для таких файлів $TMPTIME
змінна буде важливою, як пояснено у відповіді Кріса нижче. Для багатьох дистрибутивів за замовчуванням очищається /tmp
кожне завантаження, оскільки $TMPTIME
встановлено значення 0
. У більшості (якщо не у всіх) дистрибутивах це встановлюється у файлі /etc/default/rcS
:
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
Тепер, якщо ви робите вказати ШАБЛОН, наприклад , mktemp fooXXX
то файл з ім'ям fooXXX
створюється в поточному каталозі , де XXX
замінюється трьома випадковими символами. Цей файл ніколи не буде видалений, якщо ви спеціально не зробили це. Видаляються лише файли з "офіційних" тимчасових каталогів, такі як /tmp
коли-небудь автоматично, видаляється системою. Немає магічного біта, який можна встановити, який визначає тимчасовий файл, а файли зовні /tmp
та його ilk не видаляються автоматично.
Щоб відповісти на ваше головне питання, звичайно дивно залежати від файлу, який може зникнути, тому люди не залежать від файлів tmp, вони створені для тимчасового зберігання даних, і ми можемо забути про них. Існує багато способів створення стійкого файлу з випадковим іменем. Наприклад:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmp
очищається каталог, але коли файли, створені за допомогою mktemp
, видаляються. Як бачимо, обоє не обов'язково пов'язані :).
Пам'ятайте, що тимчасові файли можуть бути видалені під час завантаження системи чи відповідно до TMPTIME. Будь ласка, подивіться, що у вас є /etc/cron.daily/tmpwatch
.
/var/tmp/
з іншого боку, як правило, імунітет tmpwatch
.
Тимчасові файли створюються (зазвичай) короткий проміжок часу. Вони мають ім'я temp, тому виконати атаку синхронізації непросто, і зазвичай вони видаляються, коли програма більше не потрібна. Зазвичай ваш сценарій зберігає цей файл дуже короткий проміжок часу, зазвичай обробляючи текст чи інші файли, і він видаляє його, як тільки це не потрібно. Якщо ваш сценарій вийде з ладу, тоді ви також мали б відновлювати процедури ведення папок / tmp (якщо саме там ви вирішили поставити їх).
Вам не потрібно створювати темп-файл у /tmp
mktemp
можна запуститись у будь-якому каталозі та просто створити довільне ім’я файлу, я не бачу, як це має нічого спільного tmpwatch
.
mktemp
створює файли в /tmp/
.
Тимчасові файли не проходять самостійно. Їх називають тимчасовими файлами просто тому, що у вашому сценарії чи сеансі чи там, де ви їх робите, очікується, що ви видалите їх після завершення. Або залиште їх лежати, якщо це ваша справа. mktemp існує виключно, щоб ви могли створити файл, названий чимось унікальним, щоб він не перезаписав якийсь існуючий файл.
TMPTIME
?
/tmp
чи інших каталогів tmp. Він не буде просто випадковим чином видаляти створені користувачем файли.
mktemp
створює файли в /tmp/
.