文件系统如何知道文件位于哪个文件夹中?

文件系统如何知道文件位于哪个文件夹中?

索引节点包含元数据并指向实际数据的位置。但是系统如何知道文件或文件夹在目录树中的位置,以及如何将文件名转换为 i 节点?

如果您能从文件系统的角度解释一下我请求文件 /folder/directory/filename 时发生的过程,我将不胜感激。

答案1

从技术上讲,目录只是一个包含文件名、其 inode 编号和属性的文件。在 BSD 和 Plan9 中,您甚至可以像文件一样读取它。(尽管在现代文件系统上,磁盘上的格式是某种二叉树,而不是顺序列表。)

基本过程(对于类 Unix 路径)是:

  1. 将给定的路径拆分为以/
  2. /内核已经知道了的位置。
  3. 扫描目录/以查找名为“ ”的项目folder。获取关联的 inode 编号。
    • 如果/folder不是目录(或指向目录的符号链接),则返回 ENOTDIR。
  4. 扫描目录/folder以查找名为“ ”的项目directory。获取 inode 编号,读取 inode,查找数据。
  5. 扫描目录/folder/directory以查找名为“ ”的项目filename并获取关联的 inode 编号。
  6. 读取inode并获取文件的元数据,权限位,数据位置等。

注意://folder/folder/directory可以是完全独立的文件系统的挂载点。一种常见的配置是为 有一个分区,/为 有另一个分区/home。(这也适用于非 Unix 系统,例如 Windows NT。)上述过程应列出内核挂载表中的查找项。

相关内容