文件是由其内容块、索引节点、两者还是文件名定义的?

文件是由其内容块、索引节点、两者还是文件名定义的?

文件是由其内容块、索引节点、两者、文件名还是其他内容定义的?从根本上来说,文件的定义是什么?

例如

两个硬链接可以共享相同的索引节点和内容块,但它们具有不同的文件名。它们被视为相同文件还是不同文件?

是否有一些文件具有不同的索引节点,但内容块相同?它们被视为同一个文件吗?

谢谢。

答案1

我假设我们正在讨论“常规”文件,而不是设备文件或 unix 域套接字或类似的不那么常规的文件。

我想说文件有名称、元数据和数据。

这直接对应于文件名、索引节点和块。

我相信您的两个硬链接文件名只是单个文件的两个名称。

我不相信在 Unix、Linux 或 *BSD 下,没有某种非常不寻常的干预,您无法让两个 inode 引用相同的数据块。suid 程序可能会打开磁盘的设备文件,并操纵两个 inode 指向相同的数据块,但我真心怀疑这种情况会自然发生。

答案2

文件名用于查找 inode。没有其他的。索引节点是引用文件的主要点。如果文件大小为零或者足够小以适合 inode 的块列表部分并且文件系统具有该优化,则文件可能根本没有任何数据块。如果有两个硬链接指向一个 inode,它仍然是一个文件,只是有多个名称。这允许您执行重命名和删除打开的文件等操作。这使得在正在运行的系统上升级软件变得更加容易,这与 Windows 不同,Windows 的主要标识符是文件名,并且每次升级后都必须重新启动才能替换正在使用的文件。

相关内容