创建硬 link 会创建一个新的 inode 吗?
Does creating a hard link create a new inode?
从 this Whosebug 线程,我了解到符号 link 有自己的 inode,这与它们的目标不同。这可以用 ls -i
来验证。该命令将显示符号 link 及其目标具有不同的 inode 编号。但是 hard links 的情况如何?创建硬 link 是创建一个新的 inode,还是只是在包含目录的数据中添加一个条目而不创建任何新的 inode?换句话说,创建硬 link 是否会创建一个 真实 文件?创建一个符号 link 当然可以。
同样的方法用于显示 ln -s
创建一个新的 inode 可以用来验证 ln
单独没有。创建硬 link 会创建一个指向相同 inode 的目录条目(此处编号为 26477281)。
$ touch foo
$ ls -li foo
26477281 -rw-r--r-- 1 jlliagre jlliagre 0 Nov 10 21:39 foo
$ ln foo bar
$ ls -li foo bar
26477281 -rw-r--r-- 2 jlliagre jlliagre 0 Nov 10 21:39 bar
26477281 -rw-r--r-- 2 jlliagre jlliagre 0 Nov 10 21:39 foo
请注意,link 计数在硬 link 创建后从 1 更改为 2。
从 this Whosebug 线程,我了解到符号 link 有自己的 inode,这与它们的目标不同。这可以用 ls -i
来验证。该命令将显示符号 link 及其目标具有不同的 inode 编号。但是 hard links 的情况如何?创建硬 link 是创建一个新的 inode,还是只是在包含目录的数据中添加一个条目而不创建任何新的 inode?换句话说,创建硬 link 是否会创建一个 真实 文件?创建一个符号 link 当然可以。
同样的方法用于显示 ln -s
创建一个新的 inode 可以用来验证 ln
单独没有。创建硬 link 会创建一个指向相同 inode 的目录条目(此处编号为 26477281)。
$ touch foo
$ ls -li foo
26477281 -rw-r--r-- 1 jlliagre jlliagre 0 Nov 10 21:39 foo
$ ln foo bar
$ ls -li foo bar
26477281 -rw-r--r-- 2 jlliagre jlliagre 0 Nov 10 21:39 bar
26477281 -rw-r--r-- 2 jlliagre jlliagre 0 Nov 10 21:39 foo
请注意,link 计数在硬 link 创建后从 1 更改为 2。