我试图理解索引节点的索引节点号的概念。
inode 编号是 inode 的 id 吗?
一个索引节点是否只有一个索引节点号?或者一个索引节点可以有零个或多个索引节点编号吗?
索引节点号何时分配给索引节点?
inode的inode号可以改变吗?改变inode的inode号有意义吗?
如果需要具体说明的话,我指的是 Linux 原生的文件系统。
答案1
索引节点号只是索引节点的唯一标识符。它类似于 UID 或 GID。因此,每个 inode 都只有一个标识符。
要查找文件的索引节点号,请使用ls -i
或stat
。
Unix 中的每个目录只是一个(filename, inode number)
对的列表。索引节点号充当查找索引节点结构本身的“指针”。索引节点依次记录实际文件内容的位置。
索引节点号在创建时分配给索引节点,即每当创建新文件时。
编辑以解决以下几点:
这实际上是一个棘手的问题。我强烈怀疑答案是否定的,但我并不能 100% 确定,所以我做了一些快速研究。我发现一些消息来源说,如果移动文件,索引节点号实际上会发生变化,尽管我无法在本地重现此行为,所以这似乎取决于一些外部因素。看这里例如。注意inode号肯定可以不是如果移动有多个硬链接,则从移动中进行更改,否则硬链接将损坏。
是的。否则操作系统可能会耗尽 inode 编号,这将是很坏。这与进程 ID 最终可以被操作系统重用的原因完全相同。
我在上面谈到了这一点。每个索引节点只有一个索引节点号。