11# mktemp 命令
22
3- 有时,Bash 脚本需要创建临时文件或临时目录,使用` mktemp ` 命令是最安全的做法。
3+ 有时,Bash 脚本需要创建临时文件或临时目录。常见的做法是,自己在 ` /tmp ` 目录里面生成一个文件,这样做有很多弊端 ,使用` mktemp ` 命令是最安全的做法。
44
55## 临时文件的安全问题
66
7- 直接创建临时文件,尤其是在 ` /tmp ` 目录里面,往往会导致安全问题。
7+ 直接创建临时文件,尤其在 ` /tmp ` 目录里面,往往会导致安全问题。
88
9- 首先,` /tmp ` 目录是所有人可写的,任何用户都可以该目录里面的文件 。
9+ 首先,` /tmp ` 目录是所有人可读写的,任何用户都可以往该目录里面写文件。创建的临时文件也是所有人可读的 。
1010
1111``` bash
1212$ touch /tmp/info.txt
1313$ ls -l /tmp/info.txt
1414-rw-r--r-- 1 ruanyf ruanyf 0 12月 28 17:12 /tmp/info.txt
1515```
1616
17- 上面代码中,在 ` /tmp ` 目录里面直接创建文件 ,该文件默认是所有人可读的。
17+ 上面命令在 ` /tmp ` 目录直接创建文件 ,该文件默认是所有人可读的。
1818
19- 其次,如果攻击者知道临时文件的文件名,他可以创建符号链接,链接到临时文件,可能导致系统运行异常,也可能向脚本提供一些恶意数据。 因此,理想的做法是,临时文件要使用不可预测的文件名 。
19+ 其次,如果攻击者知道临时文件的文件名,他可以创建符号链接,链接到临时文件,可能导致系统运行异常。攻击者也可能向脚本提供一些恶意数据。 因此,临时文件最好使用不可预测、每次都不一样的文件名 。
2020
21- 最后,临时文件使用完毕,应该删除。但是,脚本意外退出的时候,可能会忽略了清理临时文件 。
21+ 最后,临时文件使用完毕,应该删除。但是,脚本意外退出时,往往会忽略清理临时文件 。
2222
2323## 临时文件的最佳实践
2424
25- 临时文件的创建,应该遵循下面的最佳做法 。
25+ 脚本生成临时文件,应该遵循下面的规则 。
2626
27- - 创建前检查文件是否已经存在。
28- - 确保临时文件已成功创建。
29- - 临时文件必须有权限的限制。
30- - 临时文件要使用不可预测的文件名。
31- - 脚本退出时,要删除临时文件(使用` trap ` 命令)。
27+ > - 创建前检查文件是否已经存在。
28+ > - 确保临时文件已成功创建。
29+ > - 临时文件必须有权限的限制。
30+ > - 临时文件要使用不可预测的文件名。
31+ > - 脚本退出时,要删除临时文件(使用` trap ` 命令)。
3232
33- ## mktemp 的用法
33+ ## mktemp 命令的用法
3434
35- ` mktemp ` 命令就是为安全创建临时文件而设计的。它在创建临时文件之前,不会检查临时文件是否存在,但是它有唯一文件名的生成机制和有效的清除机制,因此足以减轻安全攻击的风险 。
35+ ` mktemp ` 命令就是为安全创建临时文件而设计的。虽然在创建临时文件之前,它不会检查临时文件是否存在,但是它支持唯一文件名和清除机制,因此可以减轻安全攻击的风险 。
3636
37- 直接运行` mktemp ` 命令,就能创建一个临时文件 。
37+ 直接运行` mktemp ` 命令,就能生成一个临时文件 。
3838
3939``` bash
4040$ mktemp
@@ -44,7 +44,7 @@ $ ls -l /tmp/tmp.4GcsWSG4vj
4444-rw------- 1 ruanyf ruanyf 0 12月 28 12:49 /tmp/tmp.4GcsWSG4vj
4545```
4646
47- 上面代码中 ,` mktemp ` 命令创建的临时文件名是随机的 ,而且权限是只有用户本人可读写。
47+ 上面命令中 ,` mktemp ` 命令生成的临时文件名是随机的 ,而且权限是只有用户本人可读写。
4848
4949Bash 脚本使用` mktemp ` 命令的用法如下。
5050
@@ -55,7 +55,7 @@ TMPFILE=$(mktemp)
5555echo " Our temp file is $TMPFILE "
5656```
5757
58- 为了确保临时文件创建成功,` mktemp ` 命令后面最好使用 OR 运算符(` || ` ),指定运行失败时的退出命令 。
58+ 为了确保临时文件创建成功,` mktemp ` 命令后面最好使用 OR 运算符(` || ` ),指定创建失败时退出脚本 。
5959
6060``` bash
6161#! /bin/bash
@@ -75,7 +75,7 @@ TMPFILE=$(mktemp) || exit 1
7575echo " Our temp file is $TMPFILE "
7676```
7777
78- ## mktemp 的参数
78+ ## 四、 mktemp 命令的参数
7979
8080` -d ` 参数可以创建一个临时目录。
8181
@@ -84,14 +84,14 @@ $ mktemp -d
8484/tmp/tmp.Wcau5UjmN6
8585```
8686
87- ` -p ` 参数可以指定临时文件所在的目录。默认是使用` $TMPDIR ` 环境变量指定的目录,如果这个变量不存在 ,那么使用` /tmp ` 目录。
87+ ` -p ` 参数可以指定临时文件所在的目录。默认是使用` $TMPDIR ` 环境变量指定的目录,如果这个变量没设置 ,那么使用` /tmp ` 目录。
8888
8989``` bash
9090$ mktemp -p /home/ruanyf/
9191/home/ruanyf/tmp.FOKEtvs2H3
9292```
9393
94- ` -t ` 参数可以指定临时文件的文件名模板,模板的末尾必须至少包含三个连续的` X ` 字符,表示随机字符,建议至少使用六个` X ` 。默认的文件名格式是 ` tmp. ` 后接十个随机字符。
94+ ` -t ` 参数可以指定临时文件的文件名模板,模板的末尾必须至少包含三个连续的` X ` 字符,表示随机字符,建议至少使用六个` X ` 。默认的文件名模板是 ` tmp. ` 后接十个随机字符。
9595
9696``` bash
9797$ mktemp -t mytemp.XXXXXXX
0 commit comments