在Linux或类Unix文件系统中,inode(索引节点)是一个非常重要的数据结构,它用来存储文件或目录的元数据。inode并不包含文件名,而是记录了与文件或目录实体相关的一切重要信息,这些信息包括但不限于:
- 文件大小(Size):指出文件占用的数据块总数。
- 文件权限(Permissions):包括文件所有者、所属组以及其他用户的读、写、执行权限。
- 文件所有者(User ID, UID)和所属组(Group ID, GID):标识文件的所有者用户和所属用户组。
- 时间戳(Timestamps):包括最后一次访问时间(atime)、最后一次修改内容时间(mtime)和最后一次更改inode信息的时间(ctime)。
- 链接数(Link Count):记录有多少个文件名指向这个inode,支持硬链接的文件系统中,多个文件名可以共享同一个inode。
- 数据块指针(Block Pointers):inode包含一个或多个指针,指向文件内容所在的磁盘块地址。这些指针可以直接或间接指向文件数据块,根据文件大小的不同,可能有一部分指针是间接指针,用于存储大型文件的数据块地址。
综上所述,在文件系统初始化时,会预先分配一定数量的inode,每个inode都有一个独一无二的inode编号(inode number)。当创建新文件或目录时,文件系统会分配一个新的inode,并在其上填充上述元数据信息。虽然用户通常通过文件名来访问文件,但实际上系统内部是通过inode号码来定位和访问文件内容的。使用ls -i
命令可以查看文件或目录的inode编号,这对于追踪文件系统中的文件实体非常有用,尤其是在处理文件链接或找回已删除但未被覆盖的文件时。