
mktemp 命令基本介绍mktemp用于安全地创建临时文件或目录。它会生成一个名称唯一的文件或目录并设置适当的权限避免因名称可预测而导致的安全问题如符号链接攻击、竞态条件等。资料合集https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a语法mktemp[选项][模板]不指定模板时在系统临时目录通常为/tmp中创建一个临时文件文件名随机生成。模板中可包含连续的Xmktemp会将其替换为随机字符例如mytemp.XXXXXX。常用选项-d创建临时目录而非文件。-u仅生成名称但不实际创建不安全不推荐用于需要保证唯一性的场景。-q静默模式出错时不输出错误信息。-t在系统临时目录$TMPDIR或/tmp中创建。-p 目录在指定目录中创建临时文件或目录。--suffix后缀为临时名称添加后缀GNU 扩展。--tmpdir[目录]在指定目录或系统临时目录中创建等价于-t或-p的组合。--help显示帮助信息。--version显示版本信息。模板规则模板末尾至少包含 3 个连续的Xmktemp用随机字符替换它们。X的数量越多名称的随机性越高碰撞概率越低。X必须出现在模板末尾GNU 版本也支持--suffix在X后添加后缀。myfile.XXXXXX tmp.XXXXXXXXXX使用示例1. 创建临时文件tmpfile$(mktemp)echo临时文件:$tmpfileechohello$tmpfilecat$tmpfilerm$tmpfile输出示例临时文件: /tmp/tmp.AbCdEfGhIj hello2. 创建临时目录tmpdir$(mktemp-d)echo临时目录:$tmpdircd$tmpdir# 在临时目录中工作cd-rm-r$tmpdir3. 使用自定义模板tmpfile$(mktemp myapp.XXXXXX)echo$tmpfile输出示例myapp.a1b2c3文件默认创建在当前目录下。4. 在指定目录中创建tmpfile$(mktemp-p/var/tmp)echo$tmpfile5. 创建带后缀的临时文件tmpfile$(mktemp--suffix.log logfile.XXXXXX)echo$tmpfile输出示例logfile.a1b2c3.log6. 在系统临时目录中创建tmpfile$(mktemp-tmyapp.XXXXXX)echo$tmpfile-t会使mktemp在$TMPDIR若设置或/tmp中创建文件。7. 在脚本中安全使用临时文件#!/bin/bashset-euopipefailtmpfile$(mktemp)traprm -f $tmpfileEXITecho处理数据...$tmpfile# 使用临时文件进行操作cat$tmpfile使用trap ... EXIT确保脚本退出时自动清理临时文件即使发生错误或被中断。8. 在脚本中安全使用临时目录#!/bin/bashset-euopipefailtmpdir$(mktemp-d)traprm -rf $tmpdirEXITcd$tmpdirechoworkdata.txtcatdata.txt9. 批量创建临时文件foriin$(seq13);domktemp-p/tmpbatch_XXXXXXdone10. 仅生成名称不推荐name$(mktemp-u)echo$name-u不会实际创建文件存在竞态条件风险仅在测试或特殊场景下使用。权限说明mktemp创建的临时文件默认权限为600仅所有者可读写。mktemp -d创建的临时目录默认权限为700仅所有者可访问。这种权限设置可防止其他用户读取或篡改临时文件内容。在脚本中的最佳实践使用 trap 自动清理tmpfile$(mktemp)traprm -f $tmpfileEXIT INTTERM确保脚本正常退出、被中断CtrlC或被终止时都清理临时资源。使用 mktemp 而非手动命名避免以下不安全做法# 不安全名称可预测存在竞态风险tmpfile/tmp/myapp.$$echodata$tmpfile应改为# 安全名称随机且原子创建tmpfile$(mktemp)echodata$tmpfile设置 TMPDIRexportTMPDIR/var/tmptmpfile$(mktemp)通过TMPDIR环境变量统一指定临时目录便于在不同环境如磁盘空间有限的系统中灵活调整。退出状态成功创建时退出状态为0并输出文件或目录路径。创建失败时如目录不存在、权限不足、模板非法退出状态为非零值并输出错误信息。注意事项mktemp创建的文件和目录不会自动删除需要手动清理或在脚本中使用trap确保清理。-u选项仅生成名称而不创建文件存在安全风险不应在需要保证唯一性的场景中使用。不同系统的mktemp实现可能略有差异如 BSD 版本与 GNU 版本的选项不完全相同编写跨平台脚本时需注意兼容性。临时文件中可能包含敏感数据应确保及时删除避免信息泄露。系统重启后/tmp中的内容通常会被清除但不应依赖此行为仍应主动清理。可通过man mktemp查看当前系统的完整文档。相关命令rm删除文件或目录用于清理临时资源。mkdir创建目录但不保证名称唯一性。trap在 Shell 脚本中捕获信号并执行清理操作。tmpwatch/systemd-tmpfiles按时间自动清理临时目录中的旧文件。mkfifo创建命名管道FIFO用于进程间通信。总结mktemp是安全创建临时文件和目录的标准工具。它通过随机命名和原子创建避免了竞态条件和符号链接攻击。在 Shell 脚本中应始终使用mktemp而非手动构造临时文件名并配合trap ... EXIT确保临时资源在脚本退出时被自动清理。