Linux文件系统为每个文件分配了两个主要数据结构:索引节点(inode)和目录项(dentry),这两者共同构成了Linux文件系统的基础
索引节点(inode) 索引节点,也被称为i-节点,是Linux文件系统中用于记录文件元信息的核心数据结构
这些元信息包括文件的大小、访问权限、创建时间、修改时间、所有者以及文件内容在磁盘上的存储位置等
索引节点占用磁盘空间,并唯一标识一个文件
在Linux正统的文件系统(如ext2、ext3等)中,文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应
系统为每个索引节点分配了一个号码,即该节点在数组中的索引号,也称为索引节点号
通过索引节点号,系统可以快速找到文件的元信息和内容存储位置
当创建一个新文件时,内核会先找到一个空的索引节点,将文件的元信息写入其中
然后,内核会为文件的内容找到适当的数据块,并记录这些数据块的分配情况在索引节点中的磁盘序号列表中
这样,当需要访问文件时,系统可以通过索引节点快速找到文件的内容和数据块位置
索引节点的另一个重要作用是支持硬链接
在Linux文件系统中,硬链接是通过多个目录项中的索引节点指向同一个文件来实现的
因此,一个文件可以有多个别名,这些别名实际上是指向同一个索引节点的不同目录项
目录项(dentry) 目录项是Linux内核中的一个数据结构,用于记录文件名、索引节点指针以及与其他目录项的关联关系
目录项缓存在内存中,以提高文件访问的效率
与索引节点不同,目录项不持久化存储在磁盘上,而是动态地在内存中维护
每个目录项都包含文件名和对应的索引节点指针,这使得系统可以通过文件名快速找到相应的索引节点,从而访问文件的元信息和内容
目录项与索引节点的关系是多对一的,即多个目录项可以指向同一个索引节点,这正是硬链接的实现机制
目录本身也是文件的一种,用索引节点唯一标识
与普通文件不同,目录文件在磁盘上保存的是子目录或文件的列表
这些列表实际上是一组目录项,记录了子目录或文件的文件名和索引节点指针
Linux文件系统的目录结构是树状的,即只有一个根目录,其中含有下级子目录或文件的信息
子目录中又可以包含更多的子目录或文件,这样一层一层地延伸下去,构成一棵倒置的树
目录项在这个树状结构中起到了连接文件名和索引节点的作用,使得系统能够通过文件名快速找到文件的位置和内容
文件结构体(struct file) 除了索引节点和目录项外,Linux内核中还有一个重要的数据结构用于表示打开的文件,即文件结构体(struct file)
系统中的每个打开的文件在内核空间都有一个关联的struct file
这个数据结构由内核在打开文件时创建,并传递给在文件上进行操作的任何函数
文件结构体包含了丰富的信息,包括指向文件操作表的指针(f_op)、文件的引用计数(f_count)、当前的文件指针位置(f_pos)、文件的读写模式(f_mode)等
其中,f_op指向的是一个函数表,包含了针对该文件进行的各种操作,如读取、写入、目录读取等
当用户对文件进行操作时,系统会根据f_op中的函数指针调用相应的函数
文件结构体还包含了与文件路径相关的信息,如f_path,它包含了指向文件系统的挂载点(mnt)和与文件相关的目录项对象(dentry)的指针
这使得系统能够通过文件路径快速找到对应的文件结构体,进而对文件进行操作
文件系统的创建与管理 Linux文件系统的创建和管理涉及多个步骤和复杂的数据结构
以创建一个新文件为例,整个过程大致如下: 1.存储属性:内核首先找到一个空的索引节点,将文件的元信息(如文件名、大小、权限等)写入其中
2.存储数据:内核为
Hyper Graphics:重塑视觉传播新纪元
揭秘Linux文件系统核心数据结构
Linux系统下查看NAT配置技巧
hyper on:激发潜能,开启高效模式
Hyper图像化直通:视觉盛宴新体验
Linux系统下如何安装与使用微软字体,打造专业文档排版
Linux信号详解:告别不懂信号的困惑
Linux系统下查看NAT配置技巧
Linux系统下如何安装与使用微软字体,打造专业文档排版
Linux信号详解:告别不懂信号的困惑
Python在Linux下乱码解决方案
Linux系统禁用UDP协议教程
Linux系统下JDK1.6的安装指南:步骤详解
Linux网线口配置教程:轻松联网不求人
如何在Linux系统上高效安装与使用POI插件
Linux系统重置:必备命令指南
Linux技巧:ls命令轻松排序文件列表
eliuliang:Linux高效使用指南
Linux系统启动应用全攻略