在阅读有关 Linux 的文章时,我得到了以下信息:
假设 file1 已经存在。使用以下命令创建名为 file2 的硬链接:
$ ln 文件1 文件2
请注意,现在似乎有两个文件存在。然而,仔细检查文件列表会发现事实并非如此。
$ ls -li 文件1 文件2
ls 的 -i 选项在第一列中打印出 inode 编号,这是每个文件对象的唯一数量。这两个文件的此字段相同;实际上,它只是一个文件,但有多个与之关联的名称,正如 ls 输出中出现的 3 所示。因此,在执行命令之前,已经有另一个对象链接到 file1。
硬链接非常有用,可以节省空间,但使用时必须小心谨慎,有时需要小心谨慎。首先,如果您删除上一屏示例中的 file1 或 file2,inode 对象(以及剩余的文件名)将保留,这可能是不理想的,因为如果您稍后重新创建同名文件,可能会导致细微错误。
我没有理解上面提到的文件对象的概念,因为 UNIX 纯粹是用 C 语言编写的(如果我错了请纠正我)。它是否有点类似于 Java 中的可变和不可变类?
答案1
不是,但硬链接的工作方式与 Java 中的对象引用完全相同。您可以将引用复制到任意数量的变量,而不会复制对象。您可以清除这些变量或删除它们,但只有清除最后一个引用(而不是最后创建的引用)时才会清除对象。
硬链接也一样:它们引用的是真实文件对象,或者换句话说是目录条目。创建硬链接就是在另一个目录中创建对文件对象的另一个引用。当您rm
在某个地方创建文件时,如果在其他地方存在对该文件的另一个引用(inode),则不会破坏该文件对象。
它们与软链接(快捷方式)不同,因为删除快捷方式永远不会删除文件。