符号链接与硬链接在文件系统中如何表示?

符号链接与硬链接在文件系统中如何表示?

我想确保我对此的理解是正确的:

  • 建立硬链接会创建另一个指向相同 inode 的 dentry
  • 创建符号链接是创建一个全新的文件对象/索引节点,它指向另一个索引节点的目录项。文件系统以特殊方式处理该文件(将某些操作重定向到另一个 inode 的 dentry)

答案1

对于硬链接正确,但对于符号链接不正确。符号链接的内容只是一个字符串。例如,这允许符号链接指向当前未安装的文件系统。符号链接只是文本;当内核遇到一个时,它本质上会将符号链接插入到它正在查找的路径中,将其分解为斜杠分隔的片段并.根据..需要进行查找。符号链接不提供额外的权限:来自符号链接的路径元素引起的遍历遵循相同的权限约束,就像应用程序已指定这些路径元素一样。符号链接有自己的索引节点(或者至少看起来是这样的 - 在幕后,某些文件系统不允许符号链接具有多个硬链接并将符号链接直接存储在包含它们的目录中,但它仍然报告索引节点函数的编号lstat)。

在系统级别,如何处理符号链接取决于操作类型。作用于目录条目的操作(例如重命名、删除)将符号链接视为任何其他文件。作用于文件内容的操作(例如openchdir)遵循符号链接并作用于目标(如果符号链接链以损坏的链接结尾,则报告错误)。对于作用于文件元数据(即索引节点)的操作,这取决于:对于某些操作,有一对函数(例如stat/ lstat),对于其他操作,则遵循符号链接(例如chmodutimes在 Linux 上没有符号链接变体)。

相关内容