rm如何工作?rm做什么?

Dil*_*rix 5 unix linux filesystems posix

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

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

Bra*_*ncy 7

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

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

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

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

这表明实际上没有任何东西被覆盖......

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

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

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

数据是否仍然像以前一样坐在一个连续的块中?

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


Jon*_*Jon 5

是的。rm简单地删除指针。如果您有多个指向文件的指针(硬链接),则删除其中一个指针rm会使其他指针完全保持不变并且数据仍然可用。

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

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

您可能会也可能无法在未来的任何时间恢复该数据,具体取决于是否发生了相关块的任何重用。

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

  • 使用索引节点。这一切都由文件系统处理。如果您创建一个文件 (`cat 'thing' > testfile`) 并使用 `ls -i testfile`,您将看到负责指向数据的 inode。如果您随后创建一个具有另一个名称的硬链接(`ln testfile anothertest`),您将看到它们共享相同的 inode(`ls -i anothertest`)。 (2认同)