目录
内容来源:
GUN : Coreutils - GNU core utilities
busybox v1.36.1 : 【busybox记录】【shell指令】基于的Busybox的版本和下载方式-CSDN博客
【GUN】【mktemp】指令介绍
mktemp:创建临时文件或目录
mktemp 管理临时文件和目录的创建。
简介:
mktemp [option]... [template]
基于模板安全地创建临时文件或目录,并打印其名称。如果给出,模板必须在最后一个组件中至少包含三个连续的“X”。如果省略,模板‘tmp.XXXXXXXXXX’使用,并隐含选项 --tmpdir。
模板中最后一次运行的‘X’将被字母数字字符替换;因此,在区分大小写的文件系统上,使用包含n个‘X’实例的模板,有‘62**n’个可能的文件名。
旧的脚本用于通过简单地将程序名称与进程id (‘$$’)作为后缀连接来创建临时文件。
然而,这种命名方案很容易预测,并且存在竞争条件,攻击者可以创建一个适当命名的符号链接,这样当脚本打开它认为未使用的文件的句柄时,它就会修改现有的文件。
使用相同的方案来创建目录稍微安全一些,因为如果目标已经存在,mkdir将失败,但它仍然较差,因为它允许拒绝服务攻击。
因此,现代脚本应该使用 mktemp 命令来保证生成的名称是不可预测的,并且知道临时文件名意味着该文件是由当前脚本创建的,其他用户不能修改。
创建文件时,生成的文件对当前用户具有读写权限,但对组或其他用户没有权限;如果当前umask的限制更大,则这些权限会减少。
这里有一些例子(尽管如果你尝试它们,你很可能会得到不同的文件名):
•在当前目录下创建临时文件。
$ mktemp file.XXXX
file.H47c
•创建一个已知后缀的临时文件。
$ mktemp --suffix=.txt file-XXXX
file-H08W.txt
$ mktemp file-XXXX-XXXX.txt
file-XXXX-eI9L.txt
•创建一个安全fifo相对于用户选择的TMPDIR,但回落到当前目录,而不是/tmp。虽然mktemp不创建fifo,但它可以创建一个安全的目录,以便存放fifo。如果无法创建目录或fifo,则退出shell。
$ dir=$(mktemp -p "${TMPDIR:-.}" -d dir-XXXX) || exit 1
$ fifo=$dir/fifo
$ mkfifo "$fifo" || { rmdir "$dir"; exit 1; }
•如果可能,创建并使用临时文件,但忽略失败。该文件将驻留在由TMPDIR命名的目录中(如果指定的话),否则驻留在/tmp中。
$ file=$(mktemp -q) && {
> # Safe to use $file only within this block. Use quotes,
> # since $TMPDIR, and thus $file, may contain whitespace.
> echo ... > "$file"
> rm "$file"
> }
•作为一个半随机字符生成器(它不是完全随机的,因为它受到当前目录内容的影响)。为避免出现安全漏洞,请勿使用生成的名称创建文件。
$ mktemp -u XXX
Gb9
$ mktemp -u XXX
nzC
程序接受以下选项。请参见第2章[常用选项],第2页。
‘-d’
‘--directory’
创建目录而不是文件。
该目录将对当前用户具有读、写和搜索权限,但对组或其他用户没有权限;如果当前umask的限制更大,则这些权限会减少。
‘-q’
‘--quiet’
禁用创建文件或目录失败的诊断信息。退出状态仍将反映文件是否已创建。
‘-u’
‘--dry-run’
在不更改文件系统内容的情况下,生成一个不以现有文件命名的临时名称。
使用该命令的输出来创建新文件本质上是不安全的,因为在生成名称和使用该名称之间存在一段时间间隔,而另一个进程可以使用相同的名称创建对象。
‘-p dir’
‘--tmpdir[=dir]’
处理模板相对于目录dir。
如果没有指定dir(只能使用长选项 --tmpdir)或为空字符串,则使用可用的tmpdir值,否则使用' /tmp '。
如果指定了此值,则template不能是绝对值。但是,模板仍然可以包含斜杠,尽管中间目录必须已经存在。
‘--suffix=suffix’
向模板追加后缀。
后缀不能包含斜杠。
如果指定了 --suffix,模板必须以' X '结尾;如果未指定,则通过查找模板中的最后一个' X '推断出适当的后缀。此选项用于与默认模板一起使用,并用于创建以' X '开头的后缀。
‘-t’
如果TMPDIR值可用,则将模板视为单个文件,或者将模板视为-p指定的目录,否则将模板视为' /tmp '。
模板不能包含斜杠。此选项已弃用;使用-p而不使用-t可以提供更好的默认值(通过支持命令行而不是TMPDIR)和更大的灵活性(通过允许中间目录)。
退出状态:
0 如果文件已创建;
1,其他情况
【busybox】【mktemp】指令介绍
[root@localhost bin]# ./mktemp --help
BusyBox v1.36.1 (2024-04-16 11:16:28 EDT) multi-call binary.
Usage: mktemp [-dt] [-p DIR] [TEMPLATE]
Create a temporary file with name based on TEMPLATE and print its name.
TEMPLATE must end with XXXXXX (e.g. [/dir/]nameXXXXXX).
Without TEMPLATE, -t tmp.XXXXXX is assumed.
-d Make directory, not file
-q Fail silently on errors
-t Prepend base directory name to TEMPLATE
-p DIR Use DIR as a base directory (implies -t)
-u Do not create anything; print a name
Base directory is: -p DIR, else $TMPDIR, else /tmp
【linux】【mktemp】指令介绍
[root@localhost bin]# mktemp --help
用法:mktemp [选项]... [TEMPLATE]
Create a temporary file or directory, safely, and print its name.
TEMPLATE must contain at least 3 consecutive 'X's in last component.
If TEMPLATE is not specified, use tmp.XXXXXXXXXX, and --tmpdir is implied.
Files are created u+rw, and directories u+rwx, minus umask restrictions.
-d, --directory 创建一个目录而非文件
-u, --dry-run 不创建任何东西,仅打印出名字。(仅供测试)
-q, --quiet 不显示任何有关文件或目录创建错误信息
--suffix=SUFF append SUFF to TEMPLATE; SUFF must not contain a slash.
This option is implied if TEMPLATE does not end in X
-p DIR, --tmpdir[=DIR] interpret TEMPLATE relative to DIR; if DIR is not
specified, use $TMPDIR if set, else /tmp. With
this option, TEMPLATE must not be an absolute name;
unlike with -t, TEMPLATE may contain slashes, but
mktemp creates only the final component
-t interpret TEMPLATE as a single file name component,
relative to a directory: $TMPDIR, if set; else the
directory specified via -p; else /tmp [deprecated]
--help 显示此帮助信息并退出
--version 显示版本信息并退出
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告 mktemp 的翻译错误
完整文档请见:<https://www.gnu.org/software/coreutils/mktemp>
或者在本地使用:info '(coreutils) mktemp invocation'
使用示例:
NA
常用组合指令:
NA