为什么我们需要mktemp?

我不明白mktemp的function和临时文件的含义。

touch xyzmktemp 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。

有关详细信息,请查看以下手册页:

http://linux.die.net/man/1/mktemp

http://linux.die.net/man/1/touch

还有一个额外的原因:并不是所有的系统都使用/tmp作为临时目录。 例如https://termux.com/由于技术原因(它在Android中作为进程运行),因为它是tmp目录,所以具有不同的长path。;

使用mktemp创build临时文件或目录的脚本将是可移植的,并且也可以在这种特殊的环境中工作。

至less在bash shell中你可以这样做:

 dirpath="/tmp/dir1-$$/dir2-$$" mkdir -p $dirpath chmod -R 0700 /tmp/dir1-$$ 

例如。