216 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\" $NetBSD: mktemp.1,v 1.19 2009/08/15 20:44:56 wiz Exp $
 | |
| .\" From: $FreeBSD: src/usr.bin/mktemp/mktemp.1,v 1.5 1999/08/28 01:04:13 peter Exp $
 | |
| .\" From: $OpenBSD: mktemp.1,v 1.8 1998/03/19 06:13:37 millert Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1989, 1991, 1993
 | |
| .\"	The Regents of the University of California.  All rights reserved.
 | |
| .\"
 | |
| .\" Redistribution and use in source and binary forms, with or without
 | |
| .\" modification, are permitted provided that the following conditions
 | |
| .\" are met:
 | |
| .\" 1. Redistributions of source code must retain the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer.
 | |
| .\" 2. Redistributions in binary form must reproduce the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer in the
 | |
| .\"    documentation and/or other materials provided with the distribution.
 | |
| .\" 3. Neither the name of the University nor the names of its contributors
 | |
| .\"    may be used to endorse or promote products derived from this software
 | |
| .\"    without specific prior written permission.
 | |
| .\"
 | |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | |
| .\" SUCH DAMAGE.
 | |
| .\"
 | |
| .\" $FreeBSD: src/usr.bin/mktemp/mktemp.1,v 1.5 1999/08/28 01:04:13 peter Exp $
 | |
| .\"
 | |
| .Dd August 15, 2009
 | |
| .Dt MKTEMP 1
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm mktemp
 | |
| .Nd make temporary file name (unique)
 | |
| .Sh SYNOPSIS
 | |
| .Nm mktemp
 | |
| .Op Fl dqu
 | |
| .Op Fl p Ar tmpdir
 | |
| .Bro
 | |
| .Fl t Ar prefix
 | |
| .No |
 | |
| .Ar template ...
 | |
| .Brc
 | |
| .Sh DESCRIPTION
 | |
| The
 | |
| .Nm
 | |
| 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
 | |
| .Ql X Ns s
 | |
| appended to it, for example
 | |
| .Pa /tmp/temp.XXXX .
 | |
| The trailing
 | |
| .Ql X Ns s
 | |
| are replaced with the current process number and/or a
 | |
| unique letter combination.
 | |
| The number of unique file names
 | |
| .Nm
 | |
| can return depends on the number of
 | |
| .Ql X Ns s
 | |
| provided; six
 | |
| .Ql X Ns s
 | |
| will result in
 | |
| .Nm
 | |
| testing roughly 26 ** 6 combinations.
 | |
| .Pp
 | |
| If
 | |
| .Nm
 | |
| can successfully generate a unique file name, the file
 | |
| is created with mode 0600 (unless the
 | |
| .Fl u
 | |
| flag is given) and the filename is printed to standard output.
 | |
| .Pp
 | |
| If the
 | |
| .Fl t Ar prefix
 | |
| option is given,
 | |
| .Nm
 | |
| will generate a template string based on the
 | |
| .Ar prefix
 | |
| and the
 | |
| .Ev TMPDIR
 | |
| environment variable, if set.
 | |
| The default location if
 | |
| .Ev TMPDIR
 | |
| is not set is
 | |
| .Pa /tmp .
 | |
| The default location of the temporary directory can be overridden with the
 | |
| .Fl p Ar tmpdir
 | |
| option.
 | |
| The template string created will consist of the
 | |
| .Ar prefix
 | |
| followed by a
 | |
| .So . Sc
 | |
| and an eight character unique letter combination.
 | |
| .Ql X Ns s
 | |
| in the
 | |
| .Ar prefix
 | |
| string will be treated as literal.
 | |
| If an additional
 | |
| .Ar template
 | |
| argument is passed, a second file will be created.
 | |
| Care should be taken to ensure that it is appropriate to use an
 | |
| environment variable potentially supplied by the user.
 | |
| .Pp
 | |
| Any number of temporary files may be created in a single invocation
 | |
| using multiple
 | |
| .Ar template
 | |
| arguments, also a single one based on the internal template with the
 | |
| .Fl t
 | |
| option value as filename prefix.
 | |
| .Pp
 | |
| At least one
 | |
| .Ar template
 | |
| argument or the
 | |
| .Fl t
 | |
| option must be present.
 | |
| .Pp
 | |
| .Nm
 | |
| 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
 | |
| .Nm
 | |
| be used instead.
 | |
| .Sh OPTIONS
 | |
| The available options are as follows:
 | |
| .Bl -tag -width indent
 | |
| .It Fl d
 | |
| Make a directory instead of a file.
 | |
| .It Fl q
 | |
| Fail silently if an error occurs.
 | |
| This is useful if
 | |
| a script does not want error output to go to standard error.
 | |
| .It Fl t Ar prefix
 | |
| Generate a template (using the supplied
 | |
| .Ar prefix
 | |
| and
 | |
| .Ev TMPDIR
 | |
| if set) to create a filename template.
 | |
| If
 | |
| .Fl t Ar prefix
 | |
| and
 | |
| .Ar template
 | |
| are both given,
 | |
| .Ar prefix
 | |
| will not apply to
 | |
| .Ar template .
 | |
| .It Fl u
 | |
| Operate in
 | |
| .Dq unsafe
 | |
| mode.
 | |
| The temp file will be unlinked before
 | |
| .Nm
 | |
| exits.
 | |
| This is slightly better than
 | |
| .Xr mktemp 3
 | |
| but still introduces a race condition.
 | |
| Use of this option is not encouraged.
 | |
| .El
 | |
| .Sh EXIT STATUS
 | |
| The
 | |
| .Nm
 | |
| utility exits with a value of 0 on success, and 1 on any failure.
 | |
| .Sh EXAMPLES
 | |
| The following
 | |
| .Xr sh 1
 | |
| fragment illustrates a simple use of
 | |
| .Nm
 | |
| where the script should quit if it cannot get a safe
 | |
| temporary file.
 | |
| .Bd -literal -offset indent
 | |
| TMPFILE=`mktemp /tmp/${0##*/}.XXXXXX` || exit 1
 | |
| echo "program output" \*[Gt]\*[Gt] $TMPFILE
 | |
| .Ed
 | |
| .Pp
 | |
| To allow the use of $TMPDIR:
 | |
| .Bd -literal -offset indent
 | |
| TMPFILE=`mktemp -t ${0##*/}` || exit 1
 | |
| echo "program output" \*[Gt]\*[Gt] $TMPFILE
 | |
| .Ed
 | |
| .Pp
 | |
| In this case, we want the script to catch the error itself.
 | |
| .Bd -literal -offset indent
 | |
| TMPFILE=`mktemp -q /tmp/${0##*/}.XXXXXX`
 | |
| if [ $? -ne 0 ]; then
 | |
| 	echo "$0: Can't create temp file, exiting..."
 | |
| 	exit 1
 | |
| fi
 | |
| .Ed
 | |
| .Sh SEE ALSO
 | |
| .Xr mkdtemp 3 ,
 | |
| .Xr mkstemp 3 ,
 | |
| .Xr mktemp 3 ,
 | |
| .Xr environ 7
 | |
| .Sh HISTORY
 | |
| The
 | |
| .Nm
 | |
| utility appeared in
 | |
| .Nx 1.5 .
 | |
| It has been imported from
 | |
| .Fx ,
 | |
| the idea and the manual page were taken from
 | |
| .Ox .
 | 
