Подтвердить что ты не робот

Зачем нам нужен mktemp?

Я не понимаю функцию mktemp и что означает временный файл.

В чем разница между словами touch xyz и mktemp xyz (кроме того, что mktemp создаст файл с xxx, добавленным к нему и будет иметь 600 разрешений?)

Просьба пояснить.

4b9b3361

Ответ 1

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 не будет работать.

Ответ 2

Вам часто нужен "файл с блокнотом" (или каталог). Кроме того, вам может понадобиться несколько таких файлов одновременно, и вы не хотите беспокоиться о том, как их назвать, чтобы не было конфликтов.

"mktemp" соответствует счету:)

Ответ 3

Вы сами ответили: mktemp() гарантирует уникальное имя.

http://linux.die.net/man/3/mktemp

Функция mktemp() генерирует уникальное временное имя файла из шаблон. Последние шесть символов шаблона должны быть XXXXXX, и эти заменяются строкой, которая делает имя файла уникальным.

Но, как указывает комментарий @MarcB (и справочная страница), вы не должны использовать его: вы должны использовать mkstemp() вместо этого.

Ответ 4

Хорошо, на самом деле это написано на страницах man.

mktemp - создать временный файл или каталог.

Создайте временный файл или каталог, безопасно и напечатайте его имя.

Безопасное создание файла или каталога означает, что никакой другой пользователь не может получить к нему доступ, поэтому его разрешение составляет 600

touch - изменение временных меток файла

Он просто меняет временные метки файла, если он уже создан, и создайте файл, если он не существует. Но по умолчанию разрешение файла по-прежнему 644.

Для более подробной проверки следуйте man-страницам:

http://linux.die.net/man/1/mktemp

http://linux.die.net/man/1/touch

Ответ 5

Еще одна дополнительная причина: не все системы используют /tmp как временную директорию. Например, https://termux.com/ по техническим причинам (он работает как процессы внутри Android), имеет другой длинный путь, как это tmp-каталог.

Скрипты, которые создают временные файлы или каталоги с помощью mktemp, будут переносимыми и также будут работать в таких специальных средах.

Ответ 6

По крайней мере, в оболочке bash вы можете сделать что-то вроде:

dirpath="/tmp/dir1-$$/dir2-$$"  
mkdir -p $dirpath  
chmod -R 0700 /tmp/dir1-$$  

например.