当我们调用 rm filename.txt 时会发生什么?

当我们调用 rm filename.txt 时会发生什么?

灵感来自邮政,

当我们调用时我们会获得更多的磁盘空间rm insert_filename吗?

链接的 UNIX stackexchange 帖子说:“文件被取消链接。数据仍然位于磁盘上,但到它的链接已被删除。过去可以检索数据,但现在元数据已被清除,并且无法恢复。 ”

如果我浏览目录并调用rm大文件,这是否意味着我以后可以在系统上存储视频和更多大文件?rm当我填满我有权访问的所有磁盘空间时,“ed”文件是否会被覆盖? (我正在设想一些像Java中的垃圾收集这样的系统,它会不时地清除旧文件,比如当计算机关闭/打开或当用户离开计算机一段时间时)

系统信息:

我在翻新的 Lenovo ThinkPad T420 笔记本电脑上运行 Ubuntu 16.04 LTS。

答案1

只是一个简短的答案,因为链接的问题已经涵盖了问题的大部分方面。

如果我浏览目录并调用rm大文件,这是否意味着我以后可以在系统上存储视频和更多大文件?

是的,现在删除的文件原来占用的空间可以用于存储文件系统中的其他数据,包括大文件,前提是之后的链接计数rm为零(根据AB的评论)

详细地说,如果您尝试访问的文件rm被正在运行的进程引用为/proc/$PPID/fd/$fd,其中$PPID$fd分别是进程 ID 和文件句柄号,那么文件 ed 的空间rm将无法使用,直到进程结束并且链接计数达到零。 (感谢AB指出)

另一种情况是,您在磁盘的其他位置有一个指向已删除文件的硬链接。rm会导致链接计数减少 1,但不会释放任何额外空间。

简而言之,被rm删除的文件所占用的空间只有在删除后链接计数为零的情况下才能被重新使用。该信息可以通过命令Links输出中的字段来获取stat。只有当该字段显示1beforerm被执行时,被删除文件占用的空间才会立即变得可用。

rm当我填满我有权访问的所有磁盘空间时,“ed”文件是否会被覆盖?

它们何时被覆盖取决于它们在磁盘上的位置以及文件系统的组织方式,但通常“文件”在所有磁盘空间用完之前就会被覆盖。

答案2

我不知道“有磁盘空间”是什么意思

这是一个富有洞察力的元问题,因为它是您的主题问题的基础。

要理解“取消链接”文件的含义,有助于理解“链接”文件的含义以及什么是“文件”。不管你信不信,“一份文件”就像三个盲人和一头大象一样,对于不同的人来说是不同的东西。

答案取决于文件系统。在 Windows 上,您可能使用 NTFS;在 Linux 上您可能使用 ext3。我将把我的答案限制在 Linux 方面,并进一步限制使用的文件系统(如 ext3)索引节点描述文件,大多数本机都会这样做。

这些文件系统以块的形式组织原始磁盘空间。分散在块中的是一些包含索引节点的块。每个索引节点都保存有关一个文件的信息:所有权、权限以及它所使用的数据的位置和大小。

文件系统充满了等待使用的索引节点。在过去,索引节点的数量在创建文件系统时是固定的,如果你用完了索引节点,那么你就会“空间不足”,因为你无法创建新文件。如今,这通常是动态处理的。

文件系统跟踪所有索引节点的位置、哪些索引节点正在使用以及哪些块尚未分配。 “拥有磁盘空间”是指拥有未分配给任何 inode 的块。

当你创建一个新文件时,你实际上做了两件事:

  1. 从未使用的索引节点中获取一个索引节点
  2. 给它指定一个名字

第一步不能单独完成。您不能直接操作 inode。操作系统没有执行此操作的功能。我们按名称创建和打开文件; inode 的详细信息保留在内核中。

可以重复第二步(1):您可以为一个 inode 分配任意多个名称。我们将该步骤称为“链接”,因为您将名称链接到文件。您可以通过删除链接来反转该过程R M(1).它甚至还有另一个名字:取消链接(1).现在您知道为什么它被称为“rm”而不是“del”:我们正在删除链接,而不是删除文件。

那么什么时候删除文件呢?创建文件的反面是什么?

  • 删除索引节点与其名称的链接
  • 放弃索引节点

首先执行删除链接。不过,在将索引节点放入未使用的堆之前,必须满足两个限制:

  • 因为一个索引节点有多个名称,所以它会一直使用,直到没有名称链接到它为止。就是这个意思当链接降为零时在某些文档中您可能会遇到。
  • 因为索引节点可能是打开的(程序正在使用它),所以操作系统不会将索引节点放入未使用的堆中,直到没有文件描述符引用它(当没有程序打开该文件时)。

一旦索引节点没有与其关联的名称,它被放弃只是时间问题。由于索引节点只能通过链接到它的名称来引用,因此无法创建新链接或打开没有名称的文件。任何打开同名文件的尝试都只会产生一个新文件:分配一个不同的inode,并将名称链接到它。

许多人在第一次遇到这种行为时感到困惑,并且当他们无法通过“删除正在运行的进程正在使用的大文件”来释放磁盘空间时感到沮丧。如果您尝试想象如果程序正在使用的文件突然消失会发生什么情况,那就更有意义了。或者,如果您曾经遇到过难以理解的 Windows 错误,“无法删除该文件,因为它已在另一个程序中打开”。使用索引节点,您永远不会收到该消息,因为在另一个程序中打开文件时不会删除该文件。

相关内容