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.\" 30.Dd September 27, 2025 31.Dt MKTEMP 1 32.Os 33.Sh NAME 34.Nm mktemp 35.Nd make temporary file name (unique) 36.Sh SYNOPSIS 37.Nm 38.Op Fl d 39.Op Fl p Ar tmpdir 40.Op Fl q 41.Op Fl t Ar prefix 42.Op Fl u 43.Ar template ... 44.Nm 45.Op Fl d 46.Op Fl p Ar tmpdir 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.XXXXXXXXXX . 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. 95If the 96.Fl p 97option is set, then the given 98.Ar tmpdir 99will be used if the 100.Ev TMPDIR 101environment variable is not set. 102Finally, 103.Pa /tmp 104will be used if neither 105.Ev TMPDIR 106or 107.Fl p 108are set and used. 109Care should 110be taken to ensure that it is appropriate to use an environment variable 111potentially supplied by the user. 112.Pp 113If no arguments are passed or if only the 114.Fl d 115flag is passed 116.Nm 117behaves as if 118.Fl t Li tmp 119was supplied. 120.Pp 121Any number of temporary files may be created in a single invocation, 122including one based on the internal template resulting from the 123.Fl t 124flag. 125.Pp 126The 127.Nm 128utility is provided to allow shell scripts to safely use temporary files. 129Traditionally, many shell scripts take the name of the program with 130the pid as a suffix and use that as a temporary file name. 131This 132kind of naming scheme is predictable and the race condition it creates 133is easy for an attacker to win. 134A safer, though still inferior, approach 135is to make a temporary directory using the same naming scheme. 136While 137this does allow one to guarantee that a temporary file will not be 138subverted, it still allows a simple denial of service attack. 139For these 140reasons it is suggested that 141.Nm 142be used instead. 143.Sh OPTIONS 144The available options are as follows: 145.Bl -tag -width indent 146.It Fl d , Fl -directory 147Make a directory instead of a file. 148.It Fl p Ar tmpdir , Fl -tmpdir Ns Oo = Ns Ar tmpdir Oc 149Use 150.Ar tmpdir 151for the 152.Fl t 153flag if the 154.Ev TMPDIR 155environment variable is not set. 156Additionally, any provided 157.Ar template 158arguments will be interpreted relative to the path specified as 159.Ar tmpdir . 160If 161.Ar tmpdir 162is either empty or omitted, then the 163.Ev TMPDIR 164environment variable will be used. 165.It Fl q , Fl -quiet 166Fail silently if an error occurs. 167This is useful if 168a script does not want error output to go to standard error. 169.It Fl t Ar prefix 170Generate a template (using the supplied 171.Ar prefix 172and 173.Ev TMPDIR 174if set) to create a filename template. 175.It Fl u , Fl -dry-run 176Operate in 177.Dq unsafe 178mode. 179The temp file will be unlinked before 180.Nm 181exits. 182This is slightly better than 183.Xr mktemp 3 184but still introduces a race condition. 185Use of this 186option is not encouraged. 187.El 188.Sh ENVIRONMENT 189.Bl -tag -width TMPDIR 190.It Ev TMPDIR 191The directory in which to store temporary files. 192Refer to 193.Xr environ 7 . 194.El 195.Sh EXIT STATUS 196.Ex -std 197.Sh EXAMPLES 198The following 199.Xr sh 1 200fragment illustrates a simple use of 201.Nm 202where the script should quit if it cannot get a safe 203temporary file. 204.Bd -literal -offset indent 205tempfoo=`basename $0` 206TMPFILE=`mktemp /tmp/${tempfoo}.XXXXXXXXXX` || exit 1 207echo "program output" >> $TMPFILE 208.Ed 209.Pp 210To allow the use of 211.Ev TMPDIR : 212.Bd -literal -offset indent 213tempfoo=`basename $0` 214TMPFILE=`mktemp -t ${tempfoo}` || exit 1 215echo "program output" >> $TMPFILE 216.Ed 217.Pp 218In this case, we want the script to catch the error itself. 219.Bd -literal -offset indent 220tempfoo=`basename $0` 221TMPFILE=`mktemp -q /tmp/${tempfoo}.XXXXXXXXXX` 222if [ $? -ne 0 ]; then 223 echo "$0: Can't create temp file, exiting..." 224 exit 1 225fi 226.Ed 227.Sh SEE ALSO 228.Xr mkdtemp 3 , 229.Xr mkstemp 3 , 230.Xr mktemp 3 , 231.Xr environ 7 232.Sh HISTORY 233A 234.Nm 235utility appeared in 236.Ox 2.1 . 237This implementation was written independently based on the 238.Ox 239man page, and 240first appeared in 241.Fx 2.2.7 . 242This man page is taken from 243.Ox . 244