我不理解mktemp
的功能以及临时文件的含义。
说touch xyz
和mktemp xyz
之间的区别是什么(除了mktemp
会创建一些附加了xxx的文件且将拥有600个权限的事实?)
请澄清。
答案 0 :(得分:51)
mktemp
随机化名称。
从安全的角度来看,这是非常重要的。
想象你做了类似的事情:
echo something > /tmp/temporary-file
在你的root运行脚本中。
有人(已经阅读过您的剧本)
ln -s /etc/passwd /tmp/temporary-file
之前。
在这种情况下,mktemp
命令可以帮助您:
TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}
现在这种ln /etc/passwd
攻击不起作用。
答案 1 :(得分:20)
您经常需要“暂存文件”(或目录)。此外,您可能需要同时使用多个此类文件,并且您不想打算如何命名它们以便没有冲突。
“mktemp”适合账单:)
答案 2 :(得分:9)
你自己回答:mktemp()
保证一个独特的名字。
http://linux.die.net/man/3/mktemp
mktemp()函数从中生成唯一的临时文件名 模板。模板的最后六个字符必须是XXXXXX和这些 被替换为使文件名唯一的字符串。
但是,正如@ MarcB的评论(和手册页)所指出的那样,你不应该使用它:你应该使用mkstemp()代替。
答案 3 :(得分:6)
好的,实际上它是在手册页中清楚写明的。
mktemp - 创建一个临时文件或目录。
安全地创建临时文件或目录,并打印其名称。
它安全地创建文件或目录意味着没有其他用户可以访问它,这就是为什么它的权限是600
触摸 - 更改文件时间戳
如果已经创建了文件,它只是更改文件的时间戳,如果不存在则创建文件。但默认情况下,文件权限仍为644.
有关详细信息,请查看以下手册页:
答案 4 :(得分:2)
还有一个额外原因:并非所有系统都使用/tmp
作为临时目录。
例如https://termux.com/由于技术原因(它在Android内部作为进程运行),因为它的tmp目录有不同的长路径。
使用mktemp
创建临时文件或目录的脚本将是可移植的,并且也可以在这种特殊环境中工作。
答案 5 :(得分:0)
至少在bash shell中你可以做类似的事情:
dirpath="/tmp/dir1-$$/dir2-$$"
mkdir -p $dirpath
chmod -R 0700 /tmp/dir1-$$
例如。