当前位置:首页>Linux>Linux文件系统:浅谈Inode和目录项

Linux文件系统:浅谈Inode和目录项

  • 2026-09-02 17:05:53
Linux文件系统:浅谈Inode和目录项

 虚拟文件系统是内核中的软件层,它为用户态程序提供了文件系统接口。虚拟文件系统的存在使得不同类型的文件系统可以在Linux中共存。索引节点(Inode)和目录项是2个重要的对象。这篇文章将浅浅的了解一下Inode和目录项。

Inode 文件的身份证

 在Linux系统中,每个文件都有一个索引节点(Inode), 在单个文件系统中索引节点是唯一的。不同的文件系统中可以使用相同的索引节点(硬链接无法跨文件系统创建的原因)。 索引节点中记录了文件的元数据信息,主要包含如下内容:

  • • 文件类型和权限信息
  • • 文件的所有者和所属组ID
  • • 文件大小
  • • 文件的访问时间、创建时间以及修改时间
  • • 引用计数(有多少个目录项指向该Inode)

可以使用stat来获取文件的索引节点信息

[root@localhost ~]# stat anaconda-ks.cfg
  文件:anaconda-ks.cfg
  大小:757             块:8          IO 块大小:4096   普通文件
设备:253,0     Inode: 9794337     硬链接:1
权限:(0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
上下文:system_u:object_r:admin_home_t:s0
访问时间:2026-02-03 23:27:00.181727845 +0800
修改时间:2026-02-03 23:27:01.092732417 +0800
变更时间:2026-02-03 23:27:01.092732417 +0800
创建时间:2026-02-03 23:27:00.181727845 +0800

目录项

 目录项中存储了文件名和Inode的映射关系, 在一个文件系统中可以存在多个目录项指向同一个索引节点,这些目录项被称为硬链接。目录项的结构如下

struct linux_dirent64 {
       ino64_t        d_ino;    /* 64位的文件Inode编号*/
       off64_t        d_off;    /* 64-bit offset to next structure */
       unsigned short d_reclen; /* Size of this dirent */
       unsigned char  d_type;   /* File type */
       char           d_name[]; /* 文件名 */
   }

Linux系统中访问文件的过程

 在Linux系统中,要访问一个文件要查找与文件关联的信息,必须遍历目录文件以找到该文件对应的目录项,随后加载索引节点, 最后根据索引节点来找到磁盘上的文件内容来获取该文件的元数据。

例如:
假设在Linux系统中存在/home/test/test.log,Linux访问test.log文件的流程如下:
 (1) Linux内核从根目录开始,遍历内部所有目录项,找到名为home的条目,获取到对应的索引节点编号(inode1)。 通过inode1从磁盘获取到inode元数据信息,通过元数据信息找到/home在磁盘中的存储位置
 (2) 接着读取/home这个目录文件,继续遍历/home内部目录项,找到test,再获取它的索引节点编号(inode2)。  通过inode2从磁盘获取到inode元数据信息,通过元数据信息找到/home/test在磁盘中的存储位置
 (3) 最后读取/home/test目录文件, 遍历目录项,匹配到目标文件名test.log,同时拿到该文件的索引节点编号(inode3)。   通过inode3从磁盘获取到inode元数据信息,通过元数据信息找到/home/test/test.log在磁盘中的存储位置。

最新文章

随机文章