模块 FileUtils

用于复制、移动、删除等文件实用方法的命名空间。

这里有什么

首先,看看其他地方。模块 FileUtils

在此,模块 FileUtils 提供了对以下操作有用的方法

创建

删除

查询

设置

比较

复制

移动

选项

路径参数

FileUtils 中的某些方法接受路径参数,这些参数被解释为文件系统条目的路径

关于示例

此处的一些示例涉及文件条目树。对于这些,我们有时会使用 tree 命令行实用程序显示树,这是一个递归目录列表实用程序,它生成文件和目录的深度缩进列表。

我们使用辅助方法来启动命令并控制格式

def tree(dirpath = '.')
  command = "tree --noreport --charset=ascii #{dirpath}"
  system(command)
end

为了说明

tree('src0')
# => src0
#    |-- sub0
#    |   |-- src0.txt
#    |   `-- src1.txt
#    `-- sub1
#        |-- src2.txt
#        `-- src3.txt

避免 TOCTTOU 漏洞

对于某些递归删除条目的方法,当以下情况存在时,可能会存在一个称为 检查时间到使用时间 (TOCTTOU) 的潜在漏洞

要避免该漏洞,可以使用此方法删除条目

以下方法也可用,每个方法都会调用 FileUtils.remove_entry_secure

最后,这个移动条目的方法在源和目标位于不同的文件系统上时(这意味着“移动”实际上是复制和删除),会调用 FileUtils.remove_entry_secure

方法 FileUtils.remove_entry_secure 通过应用特殊的预处理来安全删除

警告:您必须确保所有父目录都不能被其他不受信任的用户移动。例如,父目录不应由不受信任的用户拥有,并且不应全局可写,除非设置了粘滞位。

有关此安全漏洞的详细信息,请参阅 Perl 案例