之前我们讲述的一些文件操作都是在文件被打开的基础上的,因为用户想要对某个文件做操作的话,这个文件一定是被打开的,也就是一定是内存级的文件。
但是有的没有被操作的文件,是在磁盘中的,我们的笔记本是在SSD中,断电也不会丢失,一般是永久保存的。那么在磁盘中的文件OS是如何快速的找到他的呢?
对磁盘的认识
台式机的磁盘:
储存数据的物理原理:
每个盘面都有一个磁头,盘面旋转,磁头上下移动,通过磁头改变,盘面微观中的小磁铁的南北指向(二进制)来达到记录数据的目的。磁头和盘面是间隔一段距离的,不然直接接触的话,磁头会刮伤盘面,导值数据丢失。
物理层面如何确定位置:
磁盘的逻辑存储,
把一圈一圈的磁道拉直然后相连,就比如磁带的原理:
然后再把扇区划分上去,不就是一个想一个数组一样吗:
但是,如果存储数据要一个磁道一次扇区的存储太慢了,所以我们把它划分为几个大区,然后再在每个区中,划分为几个小区,每个小区中划分为一个个的小组,然后文件系统对每个小组进行管理:
如何在组进行IO:
文件名
通过对文件系统的研究,我们发现系统中标识一个文件用的是inode,但是我们通常用户在使用的时候都是通过文件名去找文件的,这是为什么?
首先我们要明确一点:目录也是文件,他也有文件的inode
那么文件中的内容是什么呢?
所以不论查找或者用进程打开文件,都要先确定他的目录,
目录的r w权限也得到了解释
当目录没有r权限的时候:用户就不能读取目录,都不能读了,就拿不到对应文件的inode号,也就不能进行文件的查找了
如果没有w权限,那么就不可以在这个目录文件的inode区域添加inode表了
那么根目录又是怎么找到的呢?
在系统启动的时候,/目录会自动挂在到系统中!
文件的软硬链接
软连接:
ln -s 源文件 目标文件
本质是创建了一个新的文件,因为新建的链接文件有自己独有的inode,软连接存放的是原文件的路径:
应用:电脑桌面的快捷方式:
硬链接:
ln 源文件 目标文件
本质是同一个文件,只是在当前目录下的文件名和映射关系增加,让inode的引用计数++:
应用:
同样会变化的就是我们的目录,这是为什么呢?
是否还记得我们的目录中还有两个影藏文件:
这里的 . 就是对当前目录的硬链接
. . 就是对上级目录的硬链接
所以一个目录里面有几个子目录,那么他的数量就是硬链接数-2
那么我们是否可以自己定义目录的硬链接呢?
如果我们自己创建目录的硬链接的话,在访问的时候就会发生死循环,所以我们自己是不可以创建目录的硬链接的。
目录的硬链接只有系统自己可以创建。