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