符号链接是存储为文件还是目录中的条目?

符号链接是存储为文件还是目录中的条目?

我的问题与 Linux 文件系统中符号链接的实现方式有关。

  1. 它们是存储的常规文件(使用索引节点)还是只是目录中的特殊条目?
  2. 如果它们存储在文件系统中,它们如何与二进制文件区分开来?符号链接是否分配了特殊的幻数?

答案1

“这取决于”。

这取决于文件系统的实现以及链接的长度。

例如,在 ext4 上,如果符号链接的目标足够小(60 字节或类似的值),那么它将存储在 inode 本身中并且不使用数据块。然而,如果目标更大,则分配数据块并将内容存储在那里。

其他文件系统可能没有这个“存储在 inode 中”选项。

传统上,符号链接由 inode 的“mode”( ) 字段中的位确定st_mode,与“目录”、“字符设备”、“块设备”、“FIFO”、“Socket”的方式相同。通常,应用程序可以stat()对文件名(或类似的)执行 a 操作,然后S_ISLNK()对结果st_mode字段进行测试。

相关内容