当前位置: 首页 > 面试题库 >

在bash中创建临时文件

年文柏
2023-03-14
问题内容

有客观的更好的方法在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等的原因。



 类似资料:
  • 问题 你需要在程序执行时创建一个临时文件或目录,并希望使用完之后可以自动销毁掉。 解决方案 tempfile 模块中有很多的函数可以完成这任务。 为了创建一个匿名的临时文件,可以使用 tempfile.TemporaryFile : from tempfile import TemporaryFile with TemporaryFile('w+t') as f: # Read/writ

  • 问题内容: 无论如何,我可以写到tempfile并将其包含在命令中,然后关闭/删除它。我想执行命令,例如:some_command / tmp / some-temp-file。 提前谢谢了。 问题答案: 如果需要带有名称的临时文件,则必须使用该功能。然后就可以使用了。有关详细信息,请阅读 http://docs.python.org/library/tempfile.html。

  • 问题内容: 我正在寻找编写一个小的bash脚本,以便在启动时监视任何新创建文件的目录。如果出现新文件,我希望它的存在触发第二个脚本运行。 我看到它被用来触发压缩最近数字化的视频,并将其添加到摄取素材的日志中。 目前,我的代码如下所示: 有没有更简单/更清洁/更少内存的方式来做到这一点? 编辑 我将在每个捕获会话中更改提取目录。我已经相应地调整了代码 问题答案: Incron 怎么样?它在文件/目录

  • 问题内容: 我目前正在为一家餐馆开发门户应用程序。使用的后端数据库是Mysql,而我正在使用Spring JDBC支持来编写数据访问逻辑。 我的某些DAO充满了多个查询,并且正获得多达数千行的代码。我认为我可以通过将一些逻辑移到SQL- PSM过程中来减少大小和复杂性(因为Java中的数据绑定和粘合代码是令人讨厌的事情)。 但是,我对Db没有DDL权限,因此无法创建该过程。 我想知道是否有一种方法

  • 创建并且编辑快速蒙版 要使用“快速蒙版”模式快速地创建并编辑选区,请从某个选区开始,然后从中添加或删减选区,以形成蒙版。也可以完全在“快速蒙版”模式下创建蒙版。受保护区域和未受保护区域以不同颜色进行区分。当离开“快速蒙版”模式时,未受保护区域成为选区。 注意:当在“快速蒙版”模式中工作时,“通道”面板中出现一个临时快速蒙版通道。但是,所有的蒙版编辑是在图像窗口中完成。 使用任一选区工具,选择要更改

  • 问题内容: 是否存在在Java应用程序中创建临时目录的标准可靠方法?Java的问题数据库中有一个条目,注释中包含一些代码,但是我想知道在一个常用的库(Apache Commons等)中是否可以找到一种标准的解决方案? 问题答案: 如果你使用的是JDK 7,请使用新的Files.createTempDirectory类创建临时目录。 在JDK 7之前,应该这样做: 如果需要,可以提出更好的异常(IO