inode 基础
在 Linux 和其他类 Unix 文件系统中,inode(索引节点,Index Node)是一个核心数据结构,用于存储文件或目录的元数据(metadata)。你可以将 inode 理解为文件的“身份证”,它记录了文件的基础信息和存储位置,但不包含文件名和文件内容本身。
inode 的作用
-
存储元数据
每个 inode 包含以下信息:- 文件类型(普通文件、目录、符号链接、设备文件等)
- 权限(读、写、执行权限)
- 所有者(User ID)和所属组(Group ID)
- 文件大小
- 时间戳(创建时间、最后访问时间、最后修改时间等)
- 指向文件数据块的指针(即文件内容在磁盘上的位置)
- 硬链接数量(即有多少个文件名指向此 inode)
-
唯一标识文件
每个 inode 有一个唯一的编号(inode number),系统通过这个编号而非文件名来识别文件。
关键特性
-
文件名与 inode 分离
文件名存储在目录条目中,目录本质上是「文件名 → inode 编号」的映射表。因此:- 多个文件名(硬链接)可以指向同一个 inode。
- 删除文件时,只有当硬链接数为 0 且没有进程占用时,inode 和数据块才会被释放。
-
inode 数量固定
文件系统创建时,inode 的总数就确定了。如果 inode 耗尽(即使磁盘空间充足),也无法创建新文件。可通过df -i
查看 inode 使用情况。
常见操作
-
查看 inode 编号
1ls -i 文件名 # 查看文件的 inode 编号 2stat 文件名 # 查看详细的 inode 信息
-
查找文件占用的 inode
1find /路径 -type f -inum <inode编号>
-
检查 inode 使用情况
1df -i # 显示文件系统的 inode 使用情况
示例:硬链接与 inode
- 创建硬链接:
此时,两个文件名指向同一个 inode,硬链接数变为 2。删除任一文件名,inode 和数据依然存在,直到所有链接被删除。
1ln 源文件 硬链接文件
总结
- inode 是文件系统的基石,管理文件的元数据和存储位置。
- 理解 inode 有助于解决“磁盘空间充足但无法创建文件”(inode 耗尽)等问题。
- 文件名只是 inode 的别名,真正操作文件时,系统通过 inode 编号找到文件数据。