文件的文件名和inode之间的关系

文件的文件名和inode之间的关系

对于文件来说,据说它的“文件名”指向它的索引节点。这是否意味着它的“文件名”是一个具有或指向其索引节点的指针的数据结构?

也有人说它的“文件名”是一个字符串。该字符串是否存储在某处(也许也在文件中)?

这两种说法是不是矛盾呢?

硬链接无法链接到不同文件系统上的文件,而软链接可以。是不是因为文件名指针不能指向不同文件系统上的inode,而inode中存储的指针可以指向不同文件系统上的文件内容?

答案1

文件名是目录中的一个条目。本质上,目录是两列表,其中第一列是文件名,第二列是索引节点号。 (好吧,对于现代文件系统来说,情况更复杂,但为了解释就可以了。) inode 号指向 inode 表;该表对用户态进程不可见,但您可以通过调用stat()lstat()系统调用来查询索引节点。索引节点包含文件的元数据,例如所有权、访问权限、访问、修改和更改时间等。最重要的是,索引节点包含或指向在磁盘上何处查找文件的信息。

另一个重要的条目是链接计数,因为可以从许多地方指向 inode - 这些称为硬链接。如果使用rm(即使用系统调用)删除文件unlink(),则仅删除目录中的条目,并且 inode 的链接计数会减少。仅当它达到 0 时,与 inode 关联的磁盘空间和 inode 本身才会被释放以供进一步重用。

所以:文件名是一个字符串,并且指向是通过目录的数据结构发生的。

硬链接无法链接到不同文件系统上的文件,而软链接可以。是不是因为文件名指针不能指向不同文件系统上的inode,而inode中存储的指针可以指向不同文件系统上的文件内容?

每个文件系统都有自己的索引节点表。 inode 表中的条目只能严格引用“它们自己的”文件系统。因此,硬链接不能跨越文件系统边界。

软链接是一个非常不同的东西。本质上它是一个包含文件名的小文件。如果进程打开符号链接,系统就会跟随它并打开该文件名引用的文件。由于软链接仅基于路径名,因此它们不受文件系统边界的限制。

相关内容