| Current File : //usr/share/man/zh_CN.UTF-8/man1/mktemp.1 |
'\" te
.\" Copyright (c) 2008, 2012, Oracle and/or its affiliates.All rights reserved.
.TH mktemp 1 "2012 年 7 月 23 日" "SunOS 5.11" "用户命令"
.SH 名称
mktemp \- 创建临时文件名
.SH 用法概要
.LP
.nf
\fBmktemp\fR [\fB-dtqu\fR] [\fB--directory\fR] [\fB--quiet\fR] [\fB--dry-run\fR] [\fB-p\fR \fIdirectory\fR]
[\fB--suffix\fR=\fIsuff\fR] [\fB--tmpdir\fR[=\fIdir\fR]] [\fItemplate\fR]
.fi
.SH 描述
.sp
.LP
\fBmktemp\fR 实用程序可创建临时文件名。要执行此操作,\fBmktemp\fR 会采用指定文件名模板并覆盖该模板的某部分以创建唯一文件名。请参见\fB\fR“操作数”部分。
.sp
.LP
可使用 \fBmktemp\fR(3C)、\fBmkdtemp\fR(3C)、\fBmkstemp\fR(3C) 和 \fBmkstemps\fR(3C) 库函数将该模板转换为路径名。
.sp
.LP
如果 \fBmktemp\fR 可以成功生成唯一文件名,则会创建具有以下文件权限的文件(或目录):只有文件所有者可读取和写入该文件(除非给出 \fB-u\fR 标志)且文件名将输出到标准输出。
.sp
.LP
\fBmktemp\fR 允许 shell 脚本安全使用临时文件。传统上,许多 shell 脚本都采用程序的名称加 \fBPID\fR 前缀,并将其用作临时文件名。这种命名方案具有可预测性,在竞争情况下,它为攻击者的成功提供了可趁之机。差一点但比较安全的方法是使用相同的命名方案来创建临时目录。这种方法能保证临时文件不被破坏,同时能够简便地拒绝服务攻击。改为使用 \fBmktemp\fR。
.SH 选项
.sp
.LP
支持以下选项:
.sp
.ne 2
.mk
.na
\fB\fB-d\fR, \fB-–directory\fR\fR
.ad
.sp .6
.RS 4n
创建目录,而不是文件。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-p\fR \fIdirectory\fR\fR
.ad
.sp .6
.RS 4n
生成临时文件名时,使用指定目录作为前缀。用户的 \fBTMPDIR\fR 环境变量(如果已设置)可以覆盖目录。此选项隐式指定 \fB-t\fR 标志。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-q\fR, \fB-–quiet\fR\fR
.ad
.sp .6
.RS 4n
如果发生错误,则会失败而不进行提示。如果脚本不希望错误输出转为标准错误,则该选项十分有用。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-–suffix\fR=\fIsuff\fR\fR
.ad
.sp .6
.RS 4n
将 \fIsuff\fR 附加到模板。\fIsuff\fR 不得包含斜杠 (\fB/\fR)。当模板以可替代的 X 字符以外的其他字符结束,且不会删除包括此类 X 字符的要求时,会隐式使用该选项。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-–tmpdir\fR[=\fIdir\fR]\fR
.ad
.sp .6
.RS 4n
“模板”与 \fIdir\fR 相关。如果没有指定 \fIdir\fR,则会使用用户的环境变量 \fBTMPDIR\fR(如果已设置),否则会使用 \fB/tmp\fR。该选项不支持带有绝对名称的模板,与 \fB-t\fR 的用法不同,模板可以包含斜杠。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-t\fR\fR
.ad
.sp .6
.RS 4n
生成以临时目录为根的路径。选择该目录的情况如下:如果用户的 \fBTMPDIR\fR 环境变量已设置,则会使用其中所包含的目录。否则,如果提供了 \fB-p\fR 标志,则会使用指定目录。如果以上条件均不适用,则使用 \fB/tmp\fR。在此模式下,模板(如果已指定)应该为目录组成部分(与完整路径相对),因此不应该包含任何正斜杠。
.RE
.sp
.ne 2
.mk
.na
\fB\fB-u\fR, \fB-–dry-run\fR\fR
.ad
.sp .6
.RS 4n
在不安全模式下操作。在 \fBmktemp\fR 退出前为临时文件解除了链接。这稍好于 \fBmktemp\fR(3C),但仍然会引入竞争情况。不建议使用该选项。
.RE
.SH 操作数
.sp
.LP
支持下列操作数:
.sp
.ne 2
.mk
.na
\fB\fItemplate\fR\fR
.ad
.RS 12n
.rt
\fItemplate\fR 可以为具有三到六个 \fBX\fR 的任何文件名,例如 \fB/tmp/tfile.XXXXXX\fR。
.sp
如果未指定 \fItemplate\fR,则会使用缺省名 \fBtmp.XXXXXX\fR,并会隐含 \fB-t\fR 标志。
.sp
如果 \fItemplate\fR 具有多个 X 系列,则会使用最后一个系列作为替换文本,除非另行指定 \fB--suffix\fR。
.sp
如果 \fItemplate\fR 在最后一组 X 之后具有字符,则暗示 \fB--suffix\fR 选项为所有此类字符,除非有显式指定。
.RE
.SH 示例
.LP
\fB示例 1 \fR使用 \fBmktemp\fR
.sp
.LP
以下示例说明了 \fBmktemp\fR 在 \fBsh\fR(1) 脚本中的简单使用。在此示例中,如果脚本无法获取安全的临时文件,则会退出。
.sp
.in +2
.nf
TMPFILE=`mktemp /tmp/example.XXXXXX`
if [ -z "$TMPFILE" ]; then exit 1; fi
echo "program output" >> $TMPFILE
.fi
.in -2
.sp
.LP
\fB示例 2 \fR使用 \fBmktemp\fR 支持 \fBTMPDIR\fR
.sp
.LP
以下示例使用 \fBmktemp\fR 支持用户的 \fBTMPDIR\fR 环境变量:
.sp
.in +2
.nf
TMPFILE=`mktemp -t example.XXXXXX`
if [ -z "$TMPFILE" ]; then exit 1; fi
echo "program output" >> $TMPFILE
.fi
.in -2
.sp
.LP
\fB示例 3 \fR在不指定临时文件名称的情况下使用 \fBmktemp\fR
.sp
.LP
以下示例在不指定临时文件的情况下使用 \fBmktemp\fR。此情况暗含 \fB-t\fR 标志。
.sp
.in +2
.nf
TMPFILE=`mktemp`
if [ -z "$TMPFILE" ]; then exit 1; fi
echo "program output" >> $TMPFILE
.fi
.in -2
.sp
.LP
\fB示例 4 \fR对 \fB/tmp\fR 之外的缺省临时目录使用 \fBmktemp\fR
.sp
.LP
以下示例在 \fB/extra/tmp\fR 中创建临时文件,除非用户的 \fBTMPDIR\fR 环境变量另有指定:
.sp
.in +2
.nf
TMPFILE=`mktemp -p /extra/tmp example.XXXXX`
if [ -z "$TMPFILE" ]; then exit 1; fi
echo "program output" >> $TMPFILE
.fi
.in -2
.sp
.LP
\fB示例 5 \fR使用 \fBmktemp\fR 删除文件
.sp
.LP
以下示例尝试创建两个临时文件。如果创建第二个临时文件失败,则 \fBmktemp\fR 会在退出前删除第一个文件:
.sp
.in +2
.nf
TMP1=`mktemp -t example.1.XXXXXX`
if [ -z "$TMP1" ]; then exit 1; fi
TMP2=`mktemp -t example.2.XXXXXX`
if [ -z "$TMP2" ]; then
rm -f $TMP1
exit 1
fi
.fi
.in -2
.sp
.LP
\fB示例 6 \fR使用 \fBmktemp\fR
.sp
.LP
如果 \fBmktemp\fR 无法创建文件,则以下示例不会退出。脚本的该部分已受到保护。
.sp
.in +2
.nf
TMPFILE=`mktemp -q -t example.XXXXXX`
if [ ! -z "$TMPFILE" ]
then
# Safe to use $TMPFILE in this block
echo data > $TMPFILE
...
rm -f $TMPFILE
fi
.fi
.in -2
.sp
.LP
\fB示例 7 \fR使用带后缀选项的 \fBmktemp\fR
.sp
.LP
以下命令说明了如何使用后缀选项。该命令的作用是创建临时文件 \fBex.q5N.SUFF\fR。
.sp
.in +2
.nf
# \fBmktemp --suffix=.SUFF ex.XXXXXX\fR
ex.q5Ngid.SUFF
.fi
.in -2
.sp
.LP
\fB示例 8 \fR使用后缀选项和 Tmpdir 选项
.sp
.LP
以下命令说明了如何使用后缀选项和 tmpdir 选项。
.sp
.in +2
.nf
# \fBmktemp --tmpdir=$HOME --suffix=.bar foo.XXXXXX\fR
/root/foo.7ZaO_N.bar
.fi
.in -2
.sp
.LP
\fB示例 9 \fR使用目录选项和后缀选项
.sp
.LP
以下命令使用目录选项和后缀选项。
.sp
.in +2
.nf
# \fBmktemp --directory --suffix=.bar foo.XXXXXX\fR
foo.GSaO3d.bar
# \fBls -l\fR
drwx------ 2 root staff 512 Mar 19 2012 foo.GSaO.bar
.fi
.in -2
.sp
.LP
\fB示例 10 \fR支持带有非结尾 X 的模板
.sp
.LP
以下命令显示了如何使用带有非结尾 X 字符的目录选项。此命令中暗含了 \fB-–suffix\fR=\fIsuff\fR 选项,其中 \fBbar\fR 用作后缀。
.sp
.in +2
.nf
# \fBmktemp XXfooXXXXXXbar\fR
XXfooaFY0N6bar
.fi
.in -2
.sp
.LP
\fB示例 11 \fR使用静默选项和 Tmpdir 选项
.sp
.LP
以下命令说明了如何使用静默选项和 tmpdir 选项。
.sp
.in +2
.nf
# \fBmktemp --quiet --tmpdir=/tmp foo\fR
[\fBNo diagnostic message is returned\fR]
.fi
.in -2
.sp
.LP
\fB示例 12 \fR使用带多个选项的 \fBmktemp\fR
.sp
.LP
以下命令组合使用了预运行选项、tmpdir 选项和后缀选项。
.sp
.in +2
.nf
# \fBmktemp --dry-run --tmpdir=$HOME --suffix=SUFF\fR
/root/tmp.qdaGcOSUFF
# \fBls -l /root/tmp.qdaGcOSUFF\fR
/root/tmp.qdaGcOSUFF: No such file or directory
.fi
.in -2
.sp
.SH 环境变量
.sp
.LP
有关影响带 \fB-t\fR 选项的 \fBmktemp\fR 执行的以下环境变量的说明,请参见 \fBenviron\fR(5):\fBTMPDIR。\fR
.sp
.ne 2
.mk
.na
\fB\fBTMPDIR\fR\fR
.ad
.RS 10n
.rt
指定用于创建临时文件以覆盖系统缺省值的目录;由 \fBmktemp\fR 使用。
.RE
.SH 退出状态
.sp
.LP
将返回以下退出值:
.sp
.ne 2
.mk
.na
\fB\fB0\fR\fR
.ad
.RS 5n
.rt
成功完成。
.RE
.sp
.ne 2
.mk
.na
\fB\fB1\fR\fR
.ad
.RS 5n
.rt
出现错误。
.RE
.SH 属性
.sp
.LP
有关下列属性的说明,请参见 \fBattributes\fR(5):
.sp
.sp
.TS
tab() box;
cw(2.75i) |cw(2.75i)
lw(2.75i) |lw(2.75i)
.
属性类型属性值
_
可用性system/core-os
_
接口稳定性Committed(已确定)
.TE
.SH 另请参见
.sp
.LP
\fBsh\fR(1)、\fBmkdtemp\fR(3C)、\fBmkstemp\fR(3C)、\fBmkstemps\fR(3C)、\fBmktemp\fR(3C)、\fBattributes\fR(5)、\fBenviron\fR(5)
.SH 附注
.sp
.LP
\fBmktemp\fR 实用程序出现在 OpenBSD 2.1 中。Solaris 实现仅使用对 \fBmktemp\fR(3C)、\fBmkstemp\fR(3C) 和 \fBmkstemps\fR(3C) 有意义的多个 X。