我的问题与 Linux 文件系统中符号链接的实现方式有关。
- 它们是存储的常规文件(使用索引节点)还是只是目录中的特殊条目?
- 如果它们存储在文件系统中,它们如何与二进制文件区分开来?符号链接是否分配了特殊的幻数?
答案1
“这取决于”。
这取决于文件系统的实现以及链接的长度。
例如,在 ext4 上,如果符号链接的目标足够小(60 字节或类似的值),那么它将存储在 inode 本身中并且不使用数据块。然而,如果目标更大,则分配数据块并将内容存储在那里。
其他文件系统可能没有这个“存储在 inode 中”选项。
传统上,符号链接由 inode 的“mode”( ) 字段中的位确定st_mode
,与“目录”、“字符设备”、“块设备”、“FIFO”、“Socket”的方式相同。通常,应用程序可以stat()
对文件名(或类似的)执行 a 操作,然后S_ISLNK()
对结果st_mode
字段进行测试。