为什么我们需要mktemp?
我不明白mktemp
的function和临时文件的含义。
说touch xyz
和mktemp xyz
之间的区别是什么(除了mktemp
会创build一个xxx附加到它的文件,将有600个权限?)
请澄清。
mktemp
随机化名称。 从安全的angular度来看,这是非常重要的。
试想一下你做了这样的事情:
echo something > /tmp/temporary-file
在你的根运行脚本。
有人(谁读过你的脚本)呢
ln -s /etc/passwd /tmp/temporary-file
之前。
在这种情况下, mktemp
命令可以帮助你:
TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX) echo something > ${TEMP}
现在这个ln /etc/passwd
攻击将不起作用。
你经常想要一个“暂存文件”(或目录)。 而且,你可能同时需要几个这样的文件,而且你不想费心去弄清楚如何命名它们,所以没有冲突。
“mktemp”符合法案:)
你自己回答: mktemp()
保证一个唯一的名字。
http://linux.die.net/man/3/mktemp
mktemp()函数根据模板生成一个唯一的临时文件名。 模板的最后六个字符必须是XXXXXX,这些字符将replace为使文件名唯一的string。
但是,@ MarcB的评论(和手册页)指出,你不应该使用它:你应该使用mkstemp()来代替。
其实它确实是写在手册页上。
mktemp – 创build一个临时文件或目录。
创build一个临时文件或目录,安全地,并打印其名称。
它创build一个文件或目录安全意味着没有其他用户可以访问它,这就是为什么它的权限是600
触摸 – 更改文件时间戳
它只是改变文件的时间戳,如果已经创build,并创build一个文件,如果不存在。 但文件权限默认仍然是644。
有关详细信息,请查看以下手册页:
还有一个额外的原因:并不是所有的系统都使用/tmp
作为临时目录。 例如https://termux.com/由于技术原因(它在Android中作为进程运行),因为它是tmp目录,所以具有不同的长path。;
使用mktemp
创build临时文件或目录的脚本将是可移植的,并且也可以在这种特殊的环境中工作。
至less在bash shell中你可以这样做:
dirpath="/tmp/dir1-$$/dir2-$$" mkdir -p $dirpath chmod -R 0700 /tmp/dir1-$$
例如。