Ответы:
А? От 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's утверждает, что
если ШАБЛОН не указан,
--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и тому подобное не удаляются автоматически.
Чтобы ответить на ваш главный вопрос, конечно, странно зависеть от файла, который может исчезнуть, поэтому люди не зависят от файлов tmp, они созданы для временного хранения данных, и тогда мы можем забыть о них. Существует много способов создания постоянного файла со случайным именем. Например:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmpкаталог очищается, а когда файлы, созданные с помощью mktemp, удаляются. Как видите, эти два понятия не обязательно связаны между собой :).
Помните, что временные файлы могут быть удалены во время загрузки системы или в соответствии с TMPTIME. Пожалуйста, посмотрите, что у вас есть /etc/cron.daily/tmpwatch.
/var/tmp/с другой стороны, обычно невосприимчив к tmpwatch.
Временные файлы создаются за (обычно) короткий период времени. У них есть временное имя, поэтому выполнить атаку по времени нелегко, и обычно они удаляются, когда они больше не нужны программе. Обычно ваш скрипт хранит этот файл в течение очень короткого периода времени, обычно обрабатывая какой-либо текст или другие файлы, и удаляет его, как только он не нужен. Если ваш сценарий потерпит крах, то вам также понадобятся процедуры поддержки папок / tmp (если вы решили их туда поместить).
Вам не нужно создавать временный файл в /tmp
mktempможет быть запущен в любом каталоге и просто создает произвольное имя файла, я не вижу, как это связано с чем-либо tmpwatch.
mktempсоздает файлы в /tmp/.
Временные файлы не исчезают сами по себе. Они называются временными файлами просто потому, что в вашем скрипте или сеансе или где бы вы их не создавали, вы должны будете удалить их, когда закончите. Или оставьте их лежать, если это ваше дело. mktemp существует исключительно для того, чтобы вы могли создать файл с уникальным именем, чтобы он не перезаписывал существующий файл.
TMPTIME?
/tmpили других каталогов tmp. Он не будет просто случайным образом удалять созданные пользователем файлы.
mktempсоздает файлы в /tmp/.