最近在看unix/Linux编程实践教程中目录相关部分时,感觉它说的有点啰嗦(超小声),看得有些懵,所以在这里整理一下
i节点表
首先我们要知道i-节点是做什么的:
文件/文件夹的信息分为两部分:内容和属性
- 内容很好理解,比如一个exel文件中的数据,一个文件夹中的文件/子文件夹等等
- 属性是指文件的大小、文件所有者等等,i-节点就是一个用来存放文件属性的东西,类似于一个struct,而i节点表就是将所有文件的i-节点的集合
在磁盘中它们并不是放在一起存放的,内容存放在“数据区”,所有的属性放在“i-节点表中”
在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。
目录的结构:
其实目录就是个文件夹,我们要理解的就是目录在系统中的存储方式
文件系统内部,存的就是文件名和i-节点号的列表
(ls -iaR directory_name就可以看到一个目录当中所有文件的文件名以及它们的i节点号,可以在自己的电脑上试一试)
可以有这样的理解:
从用户的角度看,文件系统是一颗树
但是从系统角度来看,所有的目录和文件都是线性排列的
从算法的角度来理解:
类似于
目录或文件是一个结构体,存放在系统的一个数组中
一个目录的结构体当中有vector<子目录的id>,vector<子文件的id> ,这些id就是在系统的数组中的下标号
类似于这样: