В контексте Mktemp «безопасный» означает защиту от непреднамеренного вмешательства других программ, особенно в результате столкновение имен , mktemp пытается дать вам некоторую уверенность в том, что даже если ваш файл находится в файловой системе, используемой многими другими программами, ваш скрипт, вероятно, будет единственным, взаимодействующим с файлом. mktemp обрабатывает это для вас тремя способами:
- Он создает имена со случайными символами, поэтому они вряд ли будут иметь то же имя, что и другие программы (или другие запущенные экземпляры того же скрипта).
- Он устанавливает права доступа к файлу таким образом, чтобы его могли читать и записывать только его владельцы, ограничивая количество других программ, которые могут его нарушить.
- Он проверяет, что имя еще не используется. Другими словами, он проверяет, что файл еще не существует.
Пробный запуск mktemp не может обработать права доступа для вас (# 2), но это достаточно легко сделать самостоятельно с помощью chmod, если хотите.
Проблема, о которой вас предупреждает документация mktemp - №3. В то время как вызов mktemp в текущий скрипт будет гарантировать, что имя не используется еще , он не сообщает об этом другим программам. Поэтому другая программа или другой вызов того же сценария, работающего одновременно, может снова вызвать mktemp и получить тот же временный путь к файлу.
Единственный раз, когда вы можете использовать mktemp --dry-run
is для некоторых редких программ, которые не позволяют уже существовать их выходному файлу или каталогу. В этих обстоятельствах вы можете уменьшить вероятность конфликта имен путем:
- Увеличение количества случайных символов в имени файла (функция mktemp # 1, выше).
- Минимизируйте время между вызовом mktemp и моментом создания файла. Точно так же вы можете позволить mktemp создать файл и удалить его непосредственно перед тем, как другая команда создаст файл по временному пути.
mktemp
вызывается без-u
? Даже если файл создан (в отличие только от имени), ничто не мешает другому процессу записать в тот же файл как только он был создан.