mktemp 是一个在 Unix 和类 Unix 系统中用于创建临时文件或目录的命令行工具。它属于 GNU coreutils 套件的一部分。mktemp 的主要优点是它能够生成一个唯一的文件名,这有助于避免文件名冲突,并且可以安全地创建临时文件,因为这些文件通常只有创建它们的用户可以访问。

以下是 mktemp 命令介绍:

$ mktemp --help
Usage: mktemp [OPTION]... [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     create a directory, not a file
  -u, --dry-run       do not create anything; merely print a name (unsafe)
  -q, --quiet         suppress diagnostics about file/dir-creation failure
      --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     display this help and exit
      --version  output version information and exit

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation at: <https://www.gnu.org/software/coreutils/mktemp>
or available locally via: info '(coreutils) mktemp invocation'

busybox:

# mktemp --help
BusyBox v1.35.0 (2023-01-03 00:24:21 UTC) 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

基本用法

1、创建临时文件:

mktemp [选项] [模板]

这里的模板通常是一个以 XXXXXX 结尾的字符串,mktemp 会用随机字符替换这些 X。

2、创建临时目录:

mktemp -d [选项] [模板]

使用 -d 选项可以创建一个临时目录。

常用选项

  • -q:在执行时若发生错误,不会显示任何信息。
  • -u:在 mktemp 结束前先行删除暂存文件。这个选项通常与 trap 命令结合使用,以确保在脚本退出时删除临时文件。
  • -p:指定临时文件或目录的父目录。默认情况下,mktemp 会在 $TMPDIR 环境变量指定的目录下创建文件,如果 $TMPDIR 未设置,则默认为 /tmp。
  • -t:允许你指定一个自定义的文件名模板。模板的末尾必须至少包含三个连续的 X 字符,表示随机字符。

示例

1、创建一个临时文件:

mktemp tmp.XXXXXX

这将在当前工作目录下创建一个名为 tmp.XXXXXX 的临时文件,其中 XXXXXX 会被随机字符替换。

2、创建一个临时目录:

mktemp -d tmp.XXXXXX

这将在当前工作目录下创建一个名为 tmp.XXXXXX 的临时目录。

3、使用 -p 选项指定目录:

mktemp -p /path/to/directory tmp.XXXXXX

这将在指定的目录下创建临时文件。

4、使用 -u 选项确保文件在脚本结束时被删除:

#!/bin/bash

TMPFILE=$(mktemp -u)

# ...

这个脚本片段会在脚本退出时删除 $TMPFILE 变量指向的临时文件。


请注意,mktemp 创建的临时文件默认权限是 0600(只有文件所有者有读写权限),而临时目录的默认权限是 0700(只有目录所有者有读、写和执行权限)。这些权限设置有助于保护临时文件不被其他用户访问。

02-08 02:50