用 mktemp 安全创建临时文件

告别可预测的 /tmp 文件名,脚本里安全又防冲突地建临时文件和目录。

LinuxBash 脚本文件脚本临时文件低风险
用 tmpfile=$(mktemp) 创建临时文件,用 tmpdir=$(mktemp -d /tmp/backup-XXXXXX) 创建临时目录,退出时记得 trap 'rm -rf "$tmpdir"' EXIT 清理。

01命令

命令
$ tmpdir=$(mktemp -d /tmp/backup-XXXXXX) && echo "$tmpdir"

02作用说明

手写的 /tmp/$$.log 这类文件名可预测、易被抢占:攻击者可以提前创建同名路径劫持你的写入。mktemp 原子化地创建 0600 权限的文件并输出唯一名字,只有你的脚本能碰它。模板末尾的 XXXXX 会变成随机后缀,mktemp -d 则创建整个临时目录。

03风险

风险低风险
使用条件mktemp is part of GNU coreutils; available on every Linux distro.
!注意: mktemp 只负责创建,删除要靠自己,一般用 trap 在 EXIT 时清理。注意 mktemp -d 创建的目录是 0700,但你在里面新建的文件仍受 umask 影响,涉及机密内容请手动 chmod 600。

04撤销

✓无需撤销——该命令不会改变持久状态。

05来源

  • mktemp(1) - Linux manual page
    man7.org · community · 2026-09-17
    依据: mktemp [OPTION]... [TEMPLATE] creates a temporary file or directory; TEMPLATE must contain at least 3 consecutive Xs and -d/--directory is documented.
  • mktemp(1) — Debian bookworm
    Debian Manpages · community · 2026-09-17
    依据: Documents the TEMPLATE requirement (at least 3 X's in the last component), --suffix and the safe creation mode 0600.

最后验证: 2026-09-19 · 分类: 文件与文件夹

06相关方案