inode 与文件的关联是什么?

inode 与文件的关联是什么?

我从一些来源了解到(例如:),以下内容:

  • 索引节点是一种存储文件相关信息的数据结构。
  • 索引节点号指向一个索引节点。
  • 有一个单独的索引节点表,它维护索引节点号与相应索引节点的映射信息。
  • 创建文件时,会将索引节点号和文件名分配给文件。
  • 当使用文件名访问文件时,在内部,该名称首先与其 inode 号进行映射,然后相应的索引节点被访问。

我不明白的主要是最后一行。 inode访问inode,但是inode是独立于文件之外的一个实体。并且给出的描述并没有说索引节点以任何方式与文件相关联,只是说索引节点是包含与文件相关的元数据的数据结构。那么文件是如何访问的呢? inode 是否调用该文件?

答案1

索引节点被识别的文件独自通过其索引节点号。文件名只是文件系统中的元数据指的是到一个文件。单个文件/索引节点可以有多个文件名引用它:

$ touch foo
$ ln foo bar
$ ls -li foo bar
28098391 -rw-r--r--  2 xxxxxxx  xxxxx  0 Jul  6 22:15 bar
28098391 -rw-r--r--  2 xxxxxxx  xxxxx  0 Jul  6 22:15 foo

第一列是索引节点号;请注意,这两个文件是相同的。权限后面的第一个数字是链接计数;两者的链接foo计数bar均为 2,因为这两个名称均引用同一个文件。

$ rm foo
$ ls -li bar
28098391 -rw-r--r--  1 xxxxxxx  xxxxx  0 Jul  6 22:15 bar

rm foo仅删除指向底层文件的特定链接;bar仍然引用它(注意 inode 号没有改变,但是链接计数现在是 1 而不是 2)。另请注意,既不是文件的“真实”名称foo,也不bar是文件的“真实”名称;首先被创建的事实foo并没有使它有任何特别之处。文件实际上不会被删除,直到全部链接被删除(即,直到链接计数减少到 0)。即使如此,该文件实际上并没有被删除;而是被删除了。分配给该索引节点的块被简单地标记为可供文件系统重用。

答案2

这是常规文件的简化说明...

人类使用文件名来引用文件。内核使用称为索引节点号的数字来引用文件。目录是文件名和索引节点号之间的映射。索引节点包含与文件关联的元数据以及指向文件第一个数据块的指针。第一个数据块包含指向第二个数据块的指针,依此类推,直到读取最后一个数据块。

相关内容