“多个文件节点”如何与单个 inode 关联?

“多个文件节点”如何与单个 inode 关联?

我正在尝试了解 iNode 和文件权限。我认为有一个索引节点保存单个文件的权限。操作系统将单个索引节点拉入内存以检查单个文件的权限。这本书的幻灯片对于我的计算机安全课来说,这确实是它的工作原理。但他们也表示“多个文件节点可能与单个索引节点相关联”。这似乎是矛盾的。书上有错吗?我错过了什么?这是怎么回事?

答案1

(顺便说一句,它通常称为 inode,而不是 iNode。)

书上大概意思是这样的:几个文件名字可能与单个 inode 相关联。也就是说,同一个 inode 可以通过几个不同的名称来访问。换句话说,一个文件可以有多个硬链接。

答案2

取决于“文件节点”和“inode”的含义。我没有那本书,但我会尝试回答你的问题。

传统上,术语“inode”指的是有关文件的磁盘元数据。这包括所有者的 ID、权限、文件大小(以字节为单位)以及对包含文件实际数据的磁盘块的引用。哦,还有引用计数。

传统上,目录只是一个文件,具有特殊格式的数据,并在其索引节点上有一个标记,表示“此文件构成一个目录”。特殊格式数据的每个条目都包含一个名称(以空终止字节数组的形式,C 语言字符串)和一个索引节点号。根据索引节点号,内核可以查找在哪里可以找到索引节点(磁盘上的元数据)。对于每个目录条目,内核的文件系统代码应该增加 inode 的引用计数。在大多数 linx 下,您可以使用该stat命令以任何方式查看此链接计数。

术语“文件节点”可以指目录条目,本质上是文件的名称。许多文件名可以引用同一个 inode,每个附加文件名都会使链接计数增加 1。

您可以向自己演示很多内容:

touch somefilename
ln somefilename anothername
ls -li somefilename anothername

您应该看到相同的数字(索引节点号)作为ls -li两个文件的输出的第一个字段。您可以使用stat somefilenamestat anothername来确认 inode 编号和链接计数。删除其中一个文件,然后stat对剩余文件执行一次操作,查看链接计数是否已减少。

相关内容