LIUNX系统编程:文件系统

目录

1.创建文件的本质

1.1目录本身也是一个文件,也有他自己的inode

1.2LINUX创建文件,一定是在目录中创建文件。

2.重谈文件的增删查改

2.1为什目录没有写权限,就不能新建文件。

2.2.文件的查找

3.路径

3.1挂载

3.2如何理解挂载


1.创建文件的本质

1.1目录本身也是一个文件,也有他自己的inode

1050798不就是code的inode吗

1.2LINUX创建文件,一定是在目录中创建文件。

文件名不是文件的属性,也不是文件的内容,那文件名到底有什么用呢?

................................................................(省略在磁盘寻找inode和datablock的过程)

文件名的作用就是,在我们创建文件的时候,把文件名与文件的Inode编号映射起来。

然后把这个映射写入到目录文件当中,然后我们通过文件的名字,就能拿到inode编号,拿到inode编号就能,查到这个文件的所有信息了。

2.重谈文件的增删查改

2.1为什目录没有写权限,就不能新建文件。

因为不能把文件的映射关系写入到目录文件,删除同理。

2.2.文件的查找

在用户使用LIUNX系统的时候,我们查找一个文件用的都是路径去查找,但是想找到一个磁盘的文件,必须找到该文件的inode,怎么用一个路径,就找到文件的inode的呢?

例:我想找到test.c这个文件

这个文件的路径是/home/wys/code/buffer/test.c

想找到test.c,就必须找到先找到buffer目录的inode,想找到buffer目录的inode,就必须先找到code的目录的inode

依次类推,直到根目录,根目录的inode编号是确定的,系统是直接知道的,开机的时候,就会用这个编号,将根目录打开到内存当中,根目录的inode编号是2。

所以在内核中查找一个文件,都要逆向递归般的得到根目录,从根目录进行目录解析。

解析好的目录会被缓存在一个dentry的内核数据结构中(dentry就是描述目录的数据结构

里面存在的是这个路径与文件inode 的直接映射,而且dentry是内存级别的,就不用去磁盘里重新寻找,提高了文件系统个的效率。

3.路径

现在我们已经了解,查找一个文件,根据路径和文件名拿到inode编号,去对应分区,经过简单计算,算出是在哪一个分组,然后就能找到对应文件的inode。

现在一个重要问题,我们怎么知道这个inode编号是在哪一个分区的呢?

3.1挂载

不得不提到一个重要的概念“挂载”

一个文件系统所对应的分区要想被使用必须先被挂载到对应的目录

使用mount命令查看

因为我这个云服务器只有一块盘,所以只有一个ext4的文件系统。

这个文件系统的分区是被挂载到根目录的 /dev/vdal on /。

3.2如何理解挂载

文件系统在内核中一定不是凭空存在的,一定要被一种内核的数据结构描述(file_systerm_type),这种数据结构操作系统是不可见的,因为他不在操作系统的文件系统树中。

但是目录在操作系统的文件系统树上,只需要将描述其的内核数据结构file_systerm_type与dentry关联起来,不就能找到这个分区了吗

操作系统能找到文件系统树上的目录,访问目录就是访问对应的分区

所以如何找到分区的问题也就迎刃而解了,分区被挂载到对应的目录上,访问目录就是访问对应的分区。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值