1.\" Copyright (c) 1989, 1991, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. Neither the name of the University nor the names of its contributors 13.\" may be used to endorse or promote products derived from this software 14.\" without specific prior written permission. 15.\" 16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" SUCH DAMAGE. 27.\" 28.\" From: $OpenBSD: mktemp.1,v 1.8 1998/03/19 06:13:37 millert Exp $ 29.\" $FreeBSD: src/usr.bin/mktemp/mktemp.1,v 1.7.2.8 2003/02/24 22:37:42 trhodes Exp $ 30.\" $DragonFly: src/usr.bin/mktemp/mktemp.1,v 1.4 2006/02/17 19:39:09 swildner Exp $ 31.\" 32.Dd November 3, 2012 33.Dt MKTEMP 1 34.Os 35.Sh NAME 36.Nm mktemp 37.Nd make temporary file name (unique) 38.Sh SYNOPSIS 39.Nm 40.Op Fl d 41.Op Fl q 42.Op Fl t Ar prefix 43.Op Fl u 44.Ar template ... 45.Nm 46.Op Fl d 47.Op Fl q 48.Op Fl u 49.Fl t Ar prefix 50.Sh DESCRIPTION 51The 52.Nm 53utility takes each of the given file name templates and overwrites a 54portion of it to create a file name. 55This file name is unique 56and suitable for use by the application. 57The template may be 58any file name with some number of 59.Ql X Ns s 60appended 61to it, for example 62.Pa /tmp/temp.XXXX . 63The trailing 64.Ql X Ns s 65are replaced with the current process number and/or a 66unique letter combination. 67The number of unique file names 68.Nm 69can return depends on the number of 70.Ql X Ns s 71provided; six 72.Ql X Ns s 73will 74result in 75.Nm 76selecting 1 of 56800235584 (62 ** 6) possible file names. 77.Pp 78If 79.Nm 80can successfully generate a unique file name, the file 81is created with mode 0600 (unless the 82.Fl u 83flag is given) and the filename is printed 84to standard output. 85.Pp 86If the 87.Fl t Ar prefix 88option is given, 89.Nm 90will generate a template string based on the 91.Ar prefix 92and the 93.Ev TMPDIR 94environment variable if set. 95The default location if 96.Ev TMPDIR 97is not set is 98.Pa /tmp . 99Care should 100be taken to ensure that it is appropriate to use an environment variable 101potentially supplied by the user. 102.Pp 103If no arguments are passed or if only the 104.Fl d 105flag is passed 106.Nm 107behaves as if 108.Fl t Li tmp 109was supplied. 110.Pp 111Any number of temporary files may be created in a single invocation, 112including one based on the internal template resulting from the 113.Fl t 114flag. 115.Pp 116The 117.Nm 118utility is provided to allow shell scripts to safely use temporary files. 119Traditionally, many shell scripts take the name of the program with 120the pid as a suffix and use that as a temporary file name. 121This 122kind of naming scheme is predictable and the race condition it creates 123is easy for an attacker to win. 124A safer, though still inferior, approach 125is to make a temporary directory using the same naming scheme. 126While 127this does allow one to guarantee that a temporary file will not be 128subverted, it still allows a simple denial of service attack. 129For these 130reasons it is suggested that 131.Nm 132be used instead. 133.Sh OPTIONS 134The available options are as follows: 135.Bl -tag -width indent 136.It Fl d 137Make a directory instead of a file. 138.It Fl q 139Fail silently if an error occurs. 140This is useful if 141a script does not want error output to go to standard error. 142.It Fl t Ar prefix 143Generate a template (using the supplied 144.Ar prefix 145and 146.Ev TMPDIR 147if set) to create a filename template. 148.It Fl u 149Operate in 150.Dq unsafe 151mode. 152The temp file will be unlinked before 153.Nm 154exits. 155This is slightly better than 156.Xr mktemp 3 157but still introduces a race condition. 158Use of this 159option is not encouraged. 160.El 161.Sh EXIT STATUS 162.Ex -std 163.Sh EXAMPLES 164The following 165.Xr sh 1 166fragment illustrates a simple use of 167.Nm 168where the script should quit if it cannot get a safe 169temporary file. 170.Bd -literal -offset indent 171tempfoo=`basename $0` 172TMPFILE=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1 173echo "program output" >> $TMPFILE 174.Ed 175.Pp 176To allow the use of $TMPDIR: 177.Bd -literal -offset indent 178tempfoo=`basename $0` 179TMPFILE=`mktemp -t ${tempfoo}` || exit 1 180echo "program output" >> $TMPFILE 181.Ed 182.Pp 183In this case, we want the script to catch the error itself. 184.Bd -literal -offset indent 185tempfoo=`basename $0` 186TMPFILE=`mktemp -q /tmp/${tempfoo}.XXXXXX` 187if [ $? -ne 0 ]; then 188 echo "$0: Can't create temp file, exiting..." 189 exit 1 190fi 191.Ed 192.Sh SEE ALSO 193.Xr mkdtemp 3 , 194.Xr mkstemp 3 , 195.Xr mktemp 3 , 196.Xr environ 7 197.Sh HISTORY 198A 199.Nm 200utility appeared in 201.Ox 2.1 . 202This implementation was written independently based on the 203.Ox 204man page, and 205first appeared in 206.Fx 2.2.7 . 207This man page is taken from 208.Ox . 209