删除文件时到底发生了什么
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 就没有了。
假设我创建了一个文件。一个新的 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 就没有了。