在非常大的文件夹上执行 rm -Rf 期间的实际步骤顺序是什么?

在非常大的文件夹上执行 rm -Rf 期间的实际步骤顺序是什么?

假设我rm -Rf在一个非常大的文件夹上运行,其中包含许多不同大小、用户权限等的文件和文件夹。

我想知道,该rm命令是否首先累积要删除的文件列表,只有在扫描整个文件夹中的这些文件后才开始删除?或者它实际上会在命令持续时间内击中每个文件后立即删除它吗?

例如,假设您运行该rm -Rf /命令,5 秒后终止它,同时它会删除任何内容吗?

该特定安装文件夹上的 fs 是ext4.

答案1

如果运行rm -Rf /rm将输出错误消息并停止,如下所示由 POSIX 指定:

如果操作数解析为根目录,R M应将诊断消息写入标准错误并且不对此类操作数执行任何操作。

在其他情况下,或者如果你强制rm处理/(假设你的版本可以被强制,例如GNUrm带有--no-preserve-root选项),rm尽快删除文件和目录。它以深度优先的顺序处理目录,以便在目录清空时可以将其删除。所以在你的五秒钟内,很可能会删除文件和目录。

这是由 POSIX 指定的(请参阅上面的链接):

对于每个文件应采取以下步骤:

  1. 如果文件不存在:

    A。如果-F未指定选项,R M应将诊断消息写入标准错误。

    b.继续任何剩余的文件

  2. 如果文件如果是目录类型,则需要执行以下步骤:

    A。如果两者都不是-R选项也不-r指定了选项,R M应将诊断消息写入标准错误,不执行任何其他操作文件,然后继续处理任何剩余的文件。

    b.如果文件是一个空目录,R M可以跳到步骤 2d。如果-F未指定选项,并且权限文件不允许写入并且标准输入是终端或-我指定了选项,R M应向标准错误写入提示并从标准输入读取一行。如果答案是否定的,R M不应对当前文件执行任何操作,并继续处理任何剩余文件。

    C。对于包含在文件,除了点或点-点之外,此处列出的四个步骤(1 到 4)应与条目一起执行,就好像它是一个文件操作数。这R M实用程序不得通过跟随符号链接进入层次结构的其他部分来遍历目录,但应删除链接本身。

    d.如果-我指定了选项,R M应向标准错误写入提示并从标准输入读取一行。如果答案是否定的,R M不对当前文件执行任何操作,并继续处理任何剩余文件。

  3. 如果文件不是目录类型,-F未指定选项,并且文件的权限不允许写入并且标准输入是终端或-我指定了选项,R M应向标准错误写入提示并从标准输入读取一行。如果答案是否定的,R M不应对当前文件执行任何操作,并继续处理任何剩余文件。

  4. 如果当前文件是一个目录,R M应执行相当于rmdir()POSIX.1-2017 系统接口卷中定义的函数,使用当前文件的路径名调用小路争论。如果当前文件不是目录,R M应执行相当于取消链接()POSIX.1-2017 系统接口卷中定义的函数,使用当前文件的路径名调用小路争论。

    如果由于任何原因失败,R M应将诊断消息写入标准错误,对当前文件不执行任何操作,并继续处理任何剩余文件。

R M实用程序应能够下降到文件层次结构中的任意深度,并且不会由于路径长度限制而失败(除非用户指定的操作数超出系统限制)。

相关内容