module FileUtils

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

这里有什么

首先,其他地方有什么。 Module FileUtils

在此,module FileUtils 提供了有用的方法,用于

创建

删除

查询

设置

比较

复制

移动

Options

路径参数

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 漏洞

对于某些递归删除条目的方法,存在一个潜在的漏洞,称为检查时间到使用时间(Time-of-check to time-of-use),或 TOCTTOU,当以下情况存在时:

为了避免该漏洞,您可以使用此方法删除条目:

还有以下方法可用,每种方法都会调用 FileUtils.remove_entry_secure:

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

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

警告:您必须确保所有父目录都不能被其他不受信任的用户移动。例如,父目录不应由不受信任的用户拥有,并且除非设置了 sticky bit,否则不应被所有人写入。

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