删除文件时到底发生了什么

What really happens when deleting file

假设我创建了一个文件。一个新的 inode 已经创建。 然后我为该文件创建了一个软link,并删除了硬link。

inode还存在吗?它是否指向内存中的相同位置? 是softlink连接到连接内存的inode,导致找不到文件,还是softlink失去了与inode的连接?

谢谢。

inode 将消失。只要你有至少一个硬盘 link,inode 就会继续存在。软 link 不会有任何效果。软 link 实际上是一个单独的文件。 hard link 是指向同一文件的另一个指针。一旦硬 link 计数变为零,inode 将被删除。

只要内存不被覆盖,它就会一直存在(这样磁盘恢复工具就可以得到它),但就操作系统而言,内存是可用的重复使用。

这是题外话,不止一个问题,但是:

Linux 中的软link 未连接到 inode。它只有文件名(看softlink的大小?它的名字长度是links到!)。即使重命名原始文件也会破坏 link.

[bart@localhost link]$ touch foo
[bart@localhost link]$ ln -s foo bar
[bart@localhost link]$ ls -la
lrwxrwxrwx   1 bart bart    3 Dec 13 21:09 bar -> foo
-rw-rw-r--   1 bart bart    0 Dec 13 21:09 foo
[bart@localhost link]$ mv foo foo2
[bart@localhost link]$ ls -la
lrwxrwxrwx   1 bart bart    3 Dec 13 21:09 bar -> foo
-rw-rw-r--   1 bart bart    0 Dec 13 21:09 foo2
[bart@localhost link]$ cat bar
cat: bar: No such file or directory

如果你删除一个文件,一个 inode 就没有了。