Мне было интересно, как долго работают временные файлы, созданные с помощью mktemp. Мне кажется странным полагаться на файл, который может исчезнуть в любое время. Я на Ubuntu, если это имеет значение.
А? От 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/
.