Linux mktemp ( make temporary ) 命令用于安全的创建临时文件和目录。

mktemp 命令的定义解释

mktemp ( make temporary ) 命令用于安全的创建临时文件和目录,并输出其名称,这些文件和目录使用预定义的或可选的用户提供的“模板”命名。创建的临时文件用户具有读写权限;创建的临时目录用户具有读写执行权限,并且去除 umask 限制。

默认情况下,该命令安装在所有主要的 Linux 发行版上,通常作为 coretils 包的一部分,因此即使在最小的安装中也包含它。

本教程将基于 mktemp 命令的具体使用示例进行详细讲解,并给出 mktemp 命令的选项的详细解释说明。

mktemp 命令语法

mktemp 命令的基本语法形式如下:

mktemp [OPTION]... [TEMPLATE]
  • [OPTION]:用于设置临时文件或目录的选项,可选
  • [TEMPLATE]:创建临时文件或目录使用的模板,当提供时,最后一个组件(以斜杠 / 分割的每一部分为一个组件)必须包含至少3个连续的 X。如果没有指定 TEMPLATE,则使用 tmp.XXXXXXXXXX 和隐含的 --tmpdir 指定的模板目录。

mktemp 命令生成文件名的规则时: 把 TEMPLATE 中的每一个 X 替换为一个随机字符,其他字符保持不变

mktemp 命令使用示例

使用默认设置创建临时文件

不使用任何选项,运行 mktemp 命令会在 /temp 下创建一个临时文件:对比比较文件 file1.txtfile2.txt 是否存在差异:

mktemp
# 输出内容:
/tmp/tmp.JbIoLjROyx

/temp 目录下创建了一个临时文件

自定义文件名的模板 TEMPLATE

文件名的模板至少要包含 3 个 X 字符,X 字符是用来替换为随机字符的,其他字符保持不变。

1、定义的文件名称模板包含两个 X 字符:

mktemp mytemp-XX
# 输出内容:
mktemp: 模板 "mytemp-XX" 中的 X 太少

无法创建临时文件

2、定义的文件名称模板包含5个 X 字符:

mktemp mytemp-XXXXX
# 输出内容:
mytemp-5WERu

创建临时文件成功,文件为:mytemp-5WERu

指定根目录

存放创建的临时文件和目录的根目录默认为 /temp,可以使用 -p DIR (--tmpdir[=DIR]) 指定为其他目录,也可以使用环境变量 TMPDIR 指定根目录。

使用 -p 选项指定根目录

文件名的模板至少要包含 3 个 X 字符,X 字符是用来替换为随机字符的,其他字符保持不变。

1、模板 TEMPLATE 中只包含文件名:

mktemp -p /home/u1sz mytemp-XXXXX
# 输出内容:
/home/u1sz/mytemp-jIELe

2、模板 TEMPLATE 中可包含使用 / 分割的目录层次,最后一部分为文件名:

mktemp -p /home/u1sz subtemp/mytemp-XXXXX
# 输出内容:
/home/u1sz/subtemp/mytemp-i8JIES

使用 TMPDIR 环境变量指定根目录

在命令运行 export 命令设置 环境变量:

export TMPDIRddd="/home/u1sz/workspace"

重新加载 shell 的非登录用户配置文件 .bashrc 使添加环境变量生效:

source .bashrc

创建临时文件

mktemp mytemp-XXXXX
# 输出内容:
/home/u1sz/workspace/mytemp-9eFJI

mktemp 命令选项解释

如下给出了 Linux 和 FreeBSD 系统中 mktemp 命令的所有选项的解释说明:

选项 解释说明
-d, --directory 创建一个临时目录,而不是临时文件
-u, --dry-run 不创建任何东西;仅输出名称(不安全)
-q, --quiet 关闭 文件 / 目录 创建失败诊断
--suffix=SUFF SUFF 附加到 TEMPLATE;SUFF 不能包含斜杠。如果 TEMPLATE 不以 X 结尾,则隐含此选项
-p DIR, --tmpdir[=DIR] 将模板解释为基于 DIR ;如果没有指定 DIR,则使用 $TMPDIR 环境变量,否则使用 /tmp。使用此选项时,TEMPLATE 不能是绝对名称;与 -t 不同,指定 -p 选项时,TEMPLATE 可以包含斜杠,TEMPLATE 为一个目录层次,但 mktemp 只创建最后的组件(最后一个斜杠 / 后面的内容,即:目录层次中的文件名)
-t 将 TEMPLATE 解释为只有一个文件名组件(而不是以斜杠 / 分割的多个组件的目录结构),相对于目录:$TMPDIR,如果设置;否则通过 -p 指定的目录;再否则 /tmp[已弃用]
--help 显示帮助信息后退出
-v, --version 显示版本信息后退出

结语

在本教程中我们介绍了如何使用 mktemp ( mktemp ) 命令用于安全的创建临时文件和目录,并输出其名称,这些文件和目录使用预定义的或可选的用户提供的“模板”命名。创建的临时文件用户具有读写权限;创建的临时目录用户具有读写执行权限,并且去除 umask 限制。

该 mktemp 命令可以在 Linux 系统中使用,也可以在 FreeBSD 系统中使用。