Я не понимаю функцию mktemp
и что означает временный файл.
В чем разница между словами touch xyz
и mktemp xyz
(кроме того, что mktemp
создаст файл с xxx, добавленным к нему и будет иметь 600 разрешений?)
Просьба пояснить.
Я не понимаю функцию mktemp
и что означает временный файл.
В чем разница между словами touch xyz
и mktemp xyz
(кроме того, что mktemp
создаст файл с xxx, добавленным к нему и будет иметь 600 разрешений?)
Просьба пояснить.
mktemp
рандомизирует имя.
Это очень важно с точки зрения безопасности.
Только представьте, что вы делаете что-то вроде:
echo something > /tmp/temporary-file
в корневом каталоге script.
И кто-то (прочитавший ваш script) делает
ln -s /etc/passwd /tmp/temporary-file
раньше.
Команда mktemp
может помочь вам в этой ситуации:
TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}
Теперь эта атака ln /etc/passwd
не будет работать.
Вам часто нужен "файл с блокнотом" (или каталог). Кроме того, вам может понадобиться несколько таких файлов одновременно, и вы не хотите беспокоиться о том, как их назвать, чтобы не было конфликтов.
"mktemp" соответствует счету:)
Вы сами ответили: mktemp()
гарантирует уникальное имя.
http://linux.die.net/man/3/mktemp
Функция mktemp() генерирует уникальное временное имя файла из шаблон. Последние шесть символов шаблона должны быть XXXXXX, и эти заменяются строкой, которая делает имя файла уникальным.
Но, как указывает комментарий @MarcB (и справочная страница), вы не должны использовать его: вы должны использовать mkstemp() вместо этого.
Хорошо, на самом деле это написано на страницах man.
mktemp - создать временный файл или каталог.
Создайте временный файл или каталог, безопасно и напечатайте его имя.
Безопасное создание файла или каталога означает, что никакой другой пользователь не может получить к нему доступ, поэтому его разрешение составляет 600
touch - изменение временных меток файла
Он просто меняет временные метки файла, если он уже создан, и создайте файл, если он не существует. Но по умолчанию разрешение файла по-прежнему 644.
Для более подробной проверки следуйте man-страницам:
Еще одна дополнительная причина: не все системы используют /tmp
как временную директорию.
Например, https://termux.com/ по техническим причинам (он работает как процессы внутри Android), имеет другой длинный путь, как это tmp-каталог.
Скрипты, которые создают временные файлы или каталоги с помощью mktemp
, будут переносимыми и также будут работать в таких специальных средах.
По крайней мере, в оболочке bash вы можете сделать что-то вроде:
dirpath="/tmp/dir1-$$/dir2-$$"
mkdir -p $dirpath
chmod -R 0700 /tmp/dir1-$$
например.