星闌

返回

在Unix风格的文件系统中,文件名主要是供人识别和查找的。系统管理文件时,还会用到一个重要的数据结构:inode,也叫索引节点。

文件名与文件内容的关系

1. 从文件名找到文件内容

打开一个文件时,可以把查找过程简化成下面这条链路:

文件名 → inode编号 → inode → 文件数据

目录里保存着目录项,其中包含文件名与inode编号的对应关系。系统通过目录项找到inode编号,再根据编号找到对应的inode,进而定位文件内容。

这是一种便于理解的概括:实际文件系统的数据定位方式可能不同,不一定都是直接指向数据块。

2. inode里保存什么

inode保存的是文件的元数据,例如文件类型、权限、所有者、大小、时间信息,以及定位文件数据所需的信息。文件名通常保存在目录项中,不保存在inode里。

因此,文件名和文件本身可以分开理解:文件名是目录中的一个入口,inode描述入口所指向的文件。

3. 硬链接:多个名字指向同一个文件

创建硬链接后,会新增一个目录项,让另一个文件名也指向同一个inode。

例如,a.txt和b.txt是同一个文件的两个硬链接。通过任意一个名字修改内容,从另一个名字打开时也能看到修改,因为它们对应同一份文件数据。

删除a.txt时,系统删除的是这个名字对应的目录项,b.txt仍然可用。只有当该文件的硬链接数降为零,并且没有进程继续打开它时,系统才会回收文件占用的空间。

4. 软链接:保存目标路径的文件

软链接本身是一个独立文件,保存着指向目标的路径。访问软链接时,系统会根据其中的路径继续查找目标。

因此,软链接和硬链接的区别在于:硬链接直接关联同一个inode,软链接依赖目标路径。如果目标被移动或删除,原路径无法再找到目标,软链接就会失效。