FreeBSD Manual Pages
MKTEMP(1) BSD General Commands Manual MKTEMP(1) NAME mktemp -- make temporary file name (unique) SYNOPSIS mktemp [-d] [-q] [-t prefix] [-u] template ... mktemp [-d] [-q] [-u] -t prefix DESCRIPTION The mktemp utility takes each of the given file name templates and over- writes a portion of it to create a file name. This file name is unique and suitable for use by the application. The template may be any file name with some number of `Xs' appended to it, for example /tmp/temp.XXXX. The trailing `Xs' are replaced with the current process number and/or a unique letter combination. The number of unique file names mktemp can return depends on the number of `Xs' provided; six `Xs' will result in mktemp selecting 1 of 56800235584 (62 ** 6) possible file names. If mktemp can successfully generate a unique file name, the file is cre- ated with mode 0600 (unless the -u flag is given) and the filename is printed to standard output. If the -t prefix option is given, mktemp will generate a template string based on the prefix and the TMPDIR environment variable if set. The de- fault location if TMPDIR is not set is /tmp. Care should be taken to en- sure that it is appropriate to use an environment variable potentially supplied by the user. If no arguments are passed or if only the -d flag is passed mktemp be- haves as if -t tmp was supplied. Any number of temporary files may be created in a single invocation, in- cluding one based on the internal template resulting from the -t flag. The mktemp utility is provided to allow shell scripts to safely use tem- porary files. Traditionally, many shell scripts take the name of the program with the pid as a suffix and use that as a temporary file name. This kind of naming scheme is predictable and the race condition it cre- ates is easy for an attacker to win. A safer, though still inferior, ap- proach is to make a temporary directory using the same naming scheme. While this does allow one to guarantee that a temporary file will not be subverted, it still allows a simple denial of service attack. For these reasons it is suggested that mktemp be used instead. OPTIONS The available options are as follows: -d Make a directory instead of a file. -q Fail silently if an error occurs. This is useful if a script does not want error output to go to standard error. -t prefix Generate a template (using the supplied prefix and TMPDIR if set) to create a filename template. -u Operate in "unsafe" mode. The temp file will be unlinked before mktemp exits. This is slightly better than mktemp(3) but still introduces a race condition. Use of this option is not encour- aged. EXIT STATUS The mktemp utility exits 0 on success, and >0 if an error occurs. EXAMPLES The following sh(1) fragment illustrates a simple use of mktemp where the script should quit if it cannot get a safe temporary file. tempfoo=`basename $0` TMPFILE=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1 echo "program output" >> $TMPFILE To allow the use of $TMPDIR: tempfoo=`basename $0` TMPFILE=`mktemp -t ${tempfoo}` || exit 1 echo "program output" >> $TMPFILE In this case, we want the script to catch the error itself. tempfoo=`basename $0` TMPFILE=`mktemp -q /tmp/${tempfoo}.XXXXXX` if [ $? -ne 0 ]; then echo "$0: Can't create temp file, exiting..." exit 1 fi SEE ALSO mkdtemp(3), mkstemp(3), mktemp(3), environ(7) HISTORY A mktemp utility appeared in OpenBSD 2.1. This implementation was writ- ten independently based on the OpenBSD man page, and first appeared in FreeBSD 2.2.7. This man page is taken from OpenBSD. BSD December 30, 2005 BSD
NAME | SYNOPSIS | DESCRIPTION | OPTIONS | EXIT STATUS | EXAMPLES | SEE ALSO | HISTORY
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=mktemp&sektion=1&manpath=FreeBSD+8.4-RELEASE>