在bash中创建临时文件

特拉帕科夫斯基:

有客观的更好的方法在bash脚本中创建临时文件吗?

我通常只要给他们起名就可以使用它们,例如tempfile-123,因为脚本结束后它将被删除。除了覆盖当前文件夹中可能的tempfile-123之外,这样做是否有其他缺点?还是以更谨慎的方式创建临时文件有什么好处?

小次郎:

mktemp(1)手册页解释了它相当好:

传统上,许多shell脚本使用pid作为后缀来命名程序名称,并将其用作临时文件名。这种命名方案是可预测的,并且它创建的竞赛条件很容易使攻击者获胜。一种更安全(尽管仍然较差)的方法是使用相同的命名方案创建一个临时目录。虽然这样做确实可以保证不会破坏临时文件,但它仍然允许进行简单的拒绝服务攻击。由于这些原因,建议使用mktemp代替。

在脚本中,我调用mktemp之类的

mydir=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")

这会创建一个我可以使用的临时目录,并可以在其中安全地命名实际文件,使之可读易懂。

mktemp虽然不是标准的,但是它确实存在于许多平台上。“ X”通常会转换为某种随机性,更多的可能更随机。但是,某些系统(例如busybox灰)对该随机性的限制比其他系统更大


顺便说一句,临时文件的安全创建不仅对shell脚本而言重要。这就是为什么python具有tempfile,perl具有File :: Temp,ruby具有Tempfile等的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章