mktemp

Make a temporary file.

Syntax
      mktemp [-d] [-q] [-t prefix] [-u] template ...

      mktemp [-d] [-q] [-u] -t prefix

Options
   -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 encouraged.

The mktemp utility takes each of the given file name templates and overwrites 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. On case-insensitive file systems, the effective number of unique names is significantly less; given six `Xs', mktemp will instead select 1 of 2176782336 (36 ** 6) possible unique file names.

If mktemp can successfully generate a unique file name, the file is created 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 _CS_DARWIN_USER_TEMP_DIR configuration variable if available. Fallback locations if _CS_DARWIN_USER_TEMP_DIR is not available are TMPDIR and /tmp.

Care should be taken to ensure 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 behaves as if -t tmp was supplied.

Any number of temporary files may be created in a single invocation, including one based on the internal template resulting from the -t flag.

The mktemp utility is provided to allow shell scripts to safely use temporary 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 creates is easy for an attacker to win. A safer, though still inferior, approach 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.

EXIT Status The mktemp utility exits 0 on success, and >0 if an error occurs.

Examples

Create a temp file and store the filename in $SCRATCH:
$ SCRATCH=$(mktemp -t tmp.XXXXXXXXXX)

Delete the file:
$ rm -f "$SCRATCH"

Script fragment to create a temp file and quit if unable to get a safe temporary file.

tempfoo=`basename $0`
TMPFILE=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1
echo "program output" >> $TMPFILE

"If you want to make an apple pie from scratch, you must first create the universe" ~ Dr. Carl Sagan

Related:

mktemp man page - Apple.com
chmod - Change access permissions
stat - Display the status of a file


Copyright © SS64.com 1999-2018
Some rights reserved