rm如何工作? rm做什么?

时间:2014-02-02 23:19:03

标签: linux unix filesystems posix

我的理解是'文件'实际上只是指向与文件内容对应的内存位置的指针。如果你'是'一个文件,你当然必须删除该指针。如果rm实际上“删除”了数据,我猜每个位都被写入(设置为0或其他)。但我知道有一些特殊的程序/程序(即srm)来确保数据不是“可恢复的” - 这表明实际上没有任何内容被覆盖......

那么,删除指向内存地址的指针是唯一的rm吗?数据是否仍然像以前那样坐在一个连续的块中?

2 个答案:

答案 0 :(得分:7)

  

我的理解是'文件'实际上只是指向与文件内容对应的内存位置的指针。

小心你的术语。文件(和指针)在磁盘上,而不在内存(RAM)中。

  

如果你是'文件',你当然必须删除该指针。

是。发生的事情是严重依赖文件系统的。有些具有哪个块空闲/忙碌的位图。因此,必须为每个释放的块翻转位。其他文件系统使用更复杂的跟踪可用空间的方法。

  

这表明实际上什么都没有被覆盖......

正确。您可以找到各种“取消删除”实用程序。但是根据文件系统的不同,它会变得相当复杂。但是你多年前保存的东西仍然可以坐在那里 - 或者它可能会被覆盖。这完全取决于细节。例如,请参阅e2fsprogs

  

那么,删除指向内存地址的指针是rm唯一能做的吗?

好吧,它还必须删除提供有关该文件元数据的“目录条目”。 (有时它只会清除文件名的第一个字节)。

  

数据是否仍然像以前那样位于一个连续的块中?

是的,数据仍然存在。但不要认为它是一个连续的块。文件可以在整个磁盘上进行游标化,有很多指针可以告诉它如何重新组装。如果你使用的是RAID,事情会变得非常复杂。

答案 1 :(得分:3)

是。 rm只是删除指针。如果你有多个指向文件的指针(硬链接),那么用rm删除其中一个指针会使其他指针完全不受影响,数据仍然可用。

删除所有这些链接仍然不会触及数据,但操作系统现在可以自由地重复使用以前保留用于存储该数据的块。

值得注意的是,任何打开文件的进程都会为其创建文件句柄。这会增加对文件的引用的总计数。如果删除文件系统中的所有指针,但操作系统仍然有一个运行时文件的打开文件句柄,那么指针计数将不为零,文件实际上不会被删除。只有当最终指针关闭时,文件系统才会将磁盘空间注册为已释放,并且只有在那时,操作系统才能自由覆盖先前为存储该数据而保留的块。

您可能会或可能无法在将来的任何时候恢复该数据,具体取决于是否重新使用了相关的块。

顺便说一句,您无法保证您的数据首先位于连续的区块中。