Linux 中的 dentry 对象:目录项缓存与文件路径解析
在 Linux 虚拟文件系统(VFS)中,dentry(目录项)是连接文件名与 inode 的关键内存对象,负责高效解析文件路径并缓存目录结构信息。它与 inode 共同构成了文件系统的逻辑视图,理解 dentry 的工作机制有助于深入掌握 Linux 文件查找的底层流程。
dentry 的本质与核心作用
什么是 dentry?
dentry 是 “directory entry” 的缩写,即目录项,是 VFS 为解析文件路径而在内存中创建的临时数据结构。它不对应磁盘上的实际数据(与 inode 不同),而是动态生成并缓存,用于加速文件路径的查找。
核心功能:
- 建立文件名与 inode 的映射关系(通过
d_inode指针关联 inode); - 组织成目录树结构,反映文件系统的层级关系(如
/home/user/file.txt由多个 dentry 节点串联而成); - 缓存常用路径信息,避免重复解析磁盘目录,提升文件访问效率。
dentry 与 inode 的关系
dentry 与 inode 是 VFS 中的一对核心组合,二者的关系可概括为:
- inode:对应磁盘上的文件元数据(权限、大小、数据块指针等),是文件的 “物理标识”;
- dentry:对应文件的 “逻辑名称”(文件名或目录名),是 inode 在内存中的 “逻辑映射”。
关联方式:
- 每个有效 dentry 都通过
d_inode指针指向一个 inode(一个文件 / 目录必须有 inode); - 一个 inode 可被多个 dentry 指向(如硬链接场景,多个文件名对应同一 inode);
- inode 中通过
i_dentry队列记录所有指向它的 dentry,形成 “一对多” 的反向关联。
dentry 与文件路径的解析
文件路径(如 /usr/local/bin)的解析依赖 dentry 形成的层级结构:
