答案1
当然,如果您创建指向文件的硬链接,则原始文件和硬链接都指向同一个 inode。事实上,两者是等价的 - 对于系统来说,没有“原始”和“链接”之类的东西。它们只是指向同一个 inode 的两个访问点。因此,它们加在一起占用的空间不会比只有一个访问点时多(除了文件系统中最微小的信息,其中存储了两个指向某个 inode 的指针,而不是只有一个)。
当您使用低级文件系统实用程序(例如)时,您可以轻松确认这一点du
。例如,这里我有一个包含一首歌曲的目录(FOSS 耶!,由 Ben Kerensa 演唱的一首关于 Ubuntu 的精彩歌曲)约 2.1 MB:
$ ls -li
total 2124
6424897 -rw-rw-r-- 1 malte malte 2162937 Aug 7 12:53 FOSS Yeaaaah!.mp3
$ du -ch * # display size of all files, and total size
2.1M FOSS Yeaaaah!.mp3
2.1M total
$ du -h . # display size of current directory
2.1M .
当我创建一个硬链接时,比如说Link.mp3
,到文件,du
实际上识别出两个文件名都指向同一个文件,并且只显示其中一个:
$ ln FOSS\ Yeaaaah\!.mp3 Link.mp3
$ ls -li
total 4248
6424897 -rw-rw-r-- 2 malte malte 2162937 Aug 7 12:53 FOSS Yeaaaah!.mp3
6424897 -rw-rw-r-- 2 malte malte 2162937 Aug 7 12:53 Link.mp3
$ du -ch *
2.1M FOSS Yeaaaah!.mp3
2.1M total
$ du -h .
2.1M .
(它只显示按字母顺序排列的第一个 - 如果我命名了硬链接A.mp3
,那么du
就会显示那个)。
您遇到的行为很可能是您用来显示文件大小的软件中的错误或不准确之处。如果是 Nautilus(典型 Ubuntu 安装中的标准文件浏览器),那么我可以确认该行为。请参阅此错误报告:
https://bugs.launchpad.net/ubuntu/+source/nautilus/+bug/644403
它可能只是“一个功能,而不是一个错误”——因为 Nautilus 试图让普通用户的操作变得简单,所以它只是忽略了硬链接。这可能并不总是最好的主意。引用错误报告:
Nautilus 试图让事情变得简单。这就是为什么它不提供创建硬链接的方法。但如果事情已经很复杂——如果硬链接已经存在——那么忽略它们本身也会导致问题。
总之,如果您使用硬链接,最好依靠终端而不是某些文件浏览应用程序。