Главная » 2017 » Ноябрь » 15 » man mktemp
23:03
man mktemp

SEO sprint - Всё для максимальной раскрутки!

ИМЯ

mktemp - создать временное имя файла (уникальное)


СИНТАКСИС
mktemp [-V] | [-dqtu] [-p directory] [шаблон]
ОПИСАНИЕ
Утилита mktemp принимает данный шаблон имени файла и перезаписывает его часть для создания уникального имени файла. Шаблоном может быть любое имя файла с некоторым количеством добавленных к нему Xs, например /tmp/tfile.XXXXXXXXXX. Если ни один шаблон не указан, используется значение по умолчанию tmp.XXXXXXXXXX и подразумевается флаг -t (см. Ниже).

Заканчивающиеся «Xs» заменяются комбинацией текущего номера процесса и случайных букв. Выбранное имя зависит как от количества «Xs» в шаблоне, так и от количества коллизий с уже существующими файлами. Количество уникальных имен файлов, которые mktemp может вернуть, зависит от количества предоставленных «Xs»; десять `Xs 'приведут к тестированию mktemp примерно 26 ** 10 комбинаций.

Если mktemp может успешно сгенерировать уникальное имя файла, файл (или каталог) создается с разрешениями на файлы, так что он доступен только для чтения и записи его владельцем (если не указан флаг -u), а имя файла печатается на стандартный вывод.

mktemp предоставляется, чтобы позволить скриптам оболочки безопасно использовать временные файлы. Традиционно многие сценарии оболочки принимают имя программы с PID как суффикс и используют это как временное имя файла. Такая схема именования предсказуема, и состояние гонки, которое оно создает, легко для злоумышленника победить. Более безопасный, хотя и более низкий подход заключается в создании временного каталога с использованием той же схемы именования. Хотя это позволяет гарантировать, что временный файл не будет искажен, он по-прежнему позволяет просто атаковать отказ в обслуживании. По этим причинам рекомендуется использовать mktemp.

Возможны следующие варианты:

-V
Распечатайте версию и выйдите.
-d
Создайте каталог вместо файла.
-p каталог
Использовать указанный каталог в качестве префикса при создании временного имени файла. Если он установлен, каталог будет переопределен переменной среды TMPDIR пользователя. Эта опция подразумевает флаг -t (см. Ниже).
-q
Если ошибка возникает, не работает. Это полезно, если скрипт не хочет, чтобы вывод ошибки включался в стандартную ошибку.
-t
Создайте путь, внедренный во временную директорию. Этот каталог выбирается следующим образом:

*
Если задана переменная среды TMPDIR пользователя, используется содержащаяся в ней директория.
*
В противном случае, если был задан флаг -p, используется указанный каталог.
*
Если ни одна из вышеперечисленных не применяется, используется / tmp.

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

-u
Работайте в режиме «небезопасно». Временный файл будет отсоединен до выхода mktemp. Это немного лучше, чем mktemp (3), но все же вводит условие гонки. Использование этого параметра не рекомендуется.

Утилита mktemp завершается со значением 0 при успешном завершении или 1 при сбое.
ПРИМЕРЫ
Следующий фрагмент sh (1) иллюстрирует простое использование mktemp, где сценарий должен выйти, если он не может получить безопасный временный файл.


TMPFILE = `mktemp / tmp / example.XXXXXXXXXX` || выход 1
echo "выход программы" >> $ TMPFILE

Тот же фрагмент с поддержкой переменной среды TMPDIR пользователя может быть записан следующим образом.


TMPFILE = `mktemp -t example.XXXXXXXXXX` || выход 1
echo "выход программы" >> $ TMPFILE

Это может быть дополнительно упрощено, если мы не заботимся о фактическом имени временного файла. В этом случае подразумевается флаг -t.


TMPFILE = `mktemp` || выход 1
echo "выход программы" >> $ TMPFILE

В некоторых случаях может быть желательно использовать временный каталог по умолчанию, отличный от / tmp. В этом примере временный файл будет создан в / extra / tmp, если только переменная среды TMPDIR пользователя не указала иначе.


TMPFILE = `mktemp -p / extra / tmp example.XXXXXXXXXX` || выход 1
echo "выход программы" >> $ TMPFILE

В некоторых случаях мы хотим, чтобы скрипт обнаружил ошибку. Например, если мы попытаемся создать два временных файла, а второй - не удастся, нам нужно удалить первое перед выходом.


TMP1 = `mktemp -t example.1.XXXXXXXXXX` || выход 1
TMP2 = `mktemp -t example.2.XXXXXXXXXX`
если [$? -ne 0]; тогда
rm -f $ TMP1
выход 1
фи

Или, возможно, вы не хотите выйти, если mktemp не может создать файл. В этом случае вы можете защитить эту часть скрипта.


TMPFILE = `mktemp -t example.XXXXXXXXXX` && {
# Безопасно использовать $ TMPFILE в этом блоке
echo data> $ TMPFILE
...
rm -f $ TMPFILE
}


ОКРУЖАЮЩАЯ СРЕДА

TMPDIR
каталог, в который помещается временный файл в режиме -t


СМОТРИТЕ ТАКЖЕ
mkdtemp (3), mkstemp (3), mktemp (3)
ИСТОРИЯ
Утилита mktemp появилась в OpenBSD 2.1.
Категория: (1) Прикладные программы и команды оболочки | Просмотров: 657 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar