2024年11月Linux文件系统的要点介绍(3)

发布时间:

  ⑴三、 创建一个目录的过程

  ⑵前面说了创建一个文件的大概过程,也了解文件内容、属性以及入口的保存方式,那么创建一个目录时又是怎么回事呢?

  ⑶我现在test目录使用命令mkdir 新增一个子目录child:

  ⑷从用户的角度看,目录child是目录test的一个子目录,那么在系统中这层关系是怎么实现的呢?实际上test目录包含一个指向子目录child的i-节点的链接,原理跟普通文件一样,因为目录也是文件。目录在系统中的保存方式和结构大概如下:

  ⑸目录其实也是文件,只是它的内容比较特殊。所以它的创建过程和文件创建过程一样,只是第二步写的内容不同。

  ⑹ 系统找到空闲的i-节点号,写入目录的属性

  ⑺ 找到空闲的数据块来存储目录的内容,只是目录的内容比较特殊,包含文件名字列表,列表一般包含两个部分:i-节点号和文件名,这个列表其实也就是文件的入口,新建的目录至少包含三个目录”。”和”。。”其中”。”指向自己,”。。”指向上级目录,我们可以通过比较对应的i-节点号来验证, 对应着上级目录中的child对应的i-节点号

  ⑻ 记录分配情况。这个和创建文件完全不样

  ⑼ 添加目录的入口到父目录,即在父目录中的child入口。

  ⑽一般都说文件存放在某个目录中,其实目录中存入的只是文件在i-节点表的入口,而文件的内容则存储在数据区。图中,我们一般会说“文件userlist在目录test中”,其实这意味着目录test中有一个指向i-节点的链接,这个链接所附加的文件名为userlist,这也可以这样理解:目录包含的是文件的引用,每个引用被称为链接。文件的内容存储在数据块。文件的属性被记录在一个被称为i-节点的结构中。I-节点的编号和文件名关联起来存在目录中。

  ⑾注意:其中“。”表示是当前目录。而“。。”是当前目录的父目录。但也有特殊情况:如我们查看根目录/的情况:

  ⑿发现“。”和“。。”都指向i-节点。实际上当我们用mkfs创建一个文件系统时,mkfs都会将根目录的父目录指向自己。所以根目录下。和。。指向同一个i-节点也不奇怪了。