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