什么是 inode?
在 Linux 和 Unix 类操作系统中,inode(索引节点)是文件系统用来存储文件元数据的数据结构。 每个文件(包括目录)都有一个唯一的 inode 编号,它记录了文件的权限、所有者、大小、时间戳、数据块位置等信息, 但不包含文件名和实际内容。
inode 包含哪些信息?
- 文件类型(普通文件、目录、设备等)
- 文件权限(读、写、执行)
- 文件所有者(用户 ID 和组 ID)
- 文件大小(以字节为单位)
- 时间戳(创建时间、修改时间、访问时间)
- 指向文件数据块的指针
- 硬链接计数
如何查看 inode 编号?
使用 ls -i 命令可以显示文件的 inode 编号:
$ ls -i example.txt
123456 example.txt
其中 123456 就是该文件的 inode 号。
inode 与文件名的关系
文件名只是目录项(directory entry)中的一个字符串,它指向对应的 inode。 这就是为什么可以有多个文件名(硬链接)指向同一个 inode —— 它们共享相同的元数据和内容。
删除一个文件名并不会立即删除文件内容,只有当 inode 的硬链接计数降为 0 且无进程打开该文件时, 文件系统才会回收其数据块。
常见问题
Q:磁盘空间未满,但无法创建新文件?
A:可能是 inode 耗尽了。可用 df -i 查看 inode 使用情况。
Q:硬链接和软链接有什么区别?
A:硬链接指向 inode,不能跨文件系统;软链接(符号链接)是独立文件,存储目标路径,可跨文件系统。