Команда mktemp

Команда mktemp позволяет задействовать одноименную утилиту, предназначенную для создания временных файлов и директорий. Разумеется, все временные файлы создаются по умолчанию в предназначенной для них директории /tmp и имеют уникальные имена. Эти имена выводятся с помощью стандартного потока вывода утилиты. Сама утилита является достаточно гибкой: пользователь может задать суффикс для имени создаваемого файла или директории, а также указать шаблон имени с целью создания файла или директории с произвольным именем в рамках текущей директории. Файлы или директории создаются с правами чтения и записи лишь для текущего пользователя, причем в случае создания директории добавляется флаг исполнения того, чтобы у текущего пользователя имелась возможность просмотра ее содержимого. После окончания использования файл или директория должны удаляться силами пользователя с помощью команды rm и rmdir соответственно. Как вы наверняка догадались, данная команда может оказаться чрезвычайно полезной при разработке сценариев командной оболочки, осуществляющих обработку данных и их хранение во временных файлах.

Базовый синтаксис команды выглядит следующим образом:

$ mktemp [параметры] [шаблон-имени-файла]

Команда может принимать шаблон имени временного файла или директории, а также ряд параметров. Актуальными для обычного пользователя параметрами являются параметр -d, позволяющий создать директорию вместо файла, параметр --suffix, позволяющий задать суффикс имени создаваемого файла, параметр -q, позволяющий скрыть сообщения о возникающих ошибках, а также параметр -u, позволяющий вывести сгенерированное имя временного файла или директории без создания самого элемента файловой системы.

Примеры использования

Создание временного файла

Для создания временного файла достаточно использовать утилиту mktemp без каких-либо параметров:

$ mktemp
/tmp/tmp.WBEWMMjZGR
$ ls -al /tmp/tmp.*
-rw------- 1 alex alex 0 фев 15 17:57 /tmp/tmp.WBEWMMjZGR
$ rm /tmp/tmp.WBEWMMjZGR

Утилита выводит имя созданного временного файла с помощью потока стандартного вывода. В существовании этого файла несложно убедиться с помощью утилиты ls. Для удаления созданного файла достаточно использовать утилиту rm.

Пользователь может задать свой собственный суффикс имени файла, воспользовавшись параметром --suffix:

$ mktemp --suffix=+authentic
/tmp/tmp.kh7t0CBSaF+authentic
$ ls -al /tmp/tmp.*
-rw------- 1 alex alex 0 фев 15 18:03 /tmp/tmp.kh7t0CBSaF+authentic
$ rm /tmp/tmp.kh7t0CBSaF+authentic

Несложно догадаться, что имя суффикса будет добавлено к сгенерированному имени файла.

Также имеется возможность создания временного файла в текущей директории с произвольным именем. Для этого следует указать шаблон имени, причем этот шаблон должен содержать символы X, которые будут заменены утилитой на произвольные.

$ mktemp authentic+XXXXXX.tmp
authentic+yBA27G.tmp
$ ls -al *.tmp
-rw------- 1 alex alex 0 фев 15 18:07 authentic+yBA27G.tmp
$ rm authentic+yBA27G.tmp

Как и было сказано ранее, символы X в шаблоне были заменены на произвольные символы, а сам файл был создан в текущей директории.

Создание временной директории

Для создания временной директории в достаточно использовать утилиту с параметром -d:

$ mktemp -d
/tmp/tmp.CatJPSDWmd
$ ls -al /tmp/ | grep tmp.
drwx------ 2 alex alex 6 фев 15 18:10 tmp.CatJPSDWmd
$ rmdir /tmp/tmp.CatJPSDWmd/

Из вывода утилиты ls очевидно, что вместо файла была создана директория (символ d в столбце прав доступа), причем текущему пользователю разрешается просмотр ее содержимого (символ x там же). Для ее удаления должна использоваться команда rmdir, а не rm, как в случае с файлом.

Для имени директории по аналогии с именем файла может быть задан суффикс:

$ mktemp -d --suffix=+authentic
/tmp/tmp.u2BD7E2rhr+authentic
$ ls -al /tmp/ | grep tmp.
drwx------ 2 alex alex 6 фев 15 18:16 tmp.u2BD7E2rhr+authentic
$ rmdir /tmp/tmp.u2BD7E2rhr+authentic/

Директория создается с теми же правами доступа и в той же директории — изменяется лишь ее имя.

При создании временных директорий также могут использоваться шаблоны:

$ mktemp -d authentic+XXXXXX
authentic+Ddg61O
$ ls -al | grep authentic
drwx------ 2 alex alex 6 фев 15 18:18 authentic+Ddg61O
$ rmdir authentic+Ddg61O/

Директория создается в текущей директории, причем ее имя соответствует заданному шаблону.