我正在为我的大学课程做一项作业,其中一个问题要求提供用于创建从一个文件到另一个文件的硬链接的命令,以便它们指向相同的 inode。我们链接了一个 .pdf 文件供参考,但它没有解释所述过程。它与创建标准硬链接有什么不同吗?
答案1
硬链接不是在文件“之间”,而是有一个索引节点,各个目录中的 >1 个条目全部指向该一个 inode。ls -i
应该显示索引节点,然后尝试ln
(硬链接)和ln -s
(软链接或符号链接):
$ touch afile
$ ln -s afile symbolic
$ ln afile bfile
$ ls -1 -i afile symbolic bfile
7602191 afile
7602191 bfile
7602204 symbolic
$ readlink symbolic
afile
$
答案2
没有什么东西inode
是理所当然存在的。
人们通常认为 aninode
是什么,是在 UFS 中重新实现的 UNIXv6/UNIXv7 文件系统的实现细节。请注意,您不能依赖实现细节。
根本不存在存在的情况inode structure
,被允许存在的只是inode number
可用于标识特定文件的情况。
当您“硬链接”一个文件时,系统所做的就是以一种允许您在对所有链接文件发出 stat() 系统调用时获得相同 inode 编号的方式排列目录条目。
在仍然使用 inode 结构的文件系统上,这是通过让目录条目指向相同的 inode 结构来完成的。
在使用写时复制(因此源自我 1991 年的 WOFS 论文)的现代文件系统上(ZFS 就是这样的文件系统),没有 inode 结构。
我的 WOFS 使用gnodes
gnode 编号,每次对文件进行写入操作时,该编号都会替换为新编号(因为在这种情况下,会有一个新的 gnode 写入不同的位置)。然而,还有一个额外的索引节点号随着时间的推移保持稳定。在 WOFS 上,“硬链接”被实现为与 inode 相关的符号链接,而 WOFS 上的“符号链接”是与名称相关的符号链接。请注意,对于具有 5 个名称指向同一文件的硬链接文件,存在 5 个 gnode 结构。
ZFS 使用 inode 和 gnode 概念的混合。然而,ZFS 作为一种现代文件系统,并不像 20 世纪 70 年代那样工作。