文章目录
- 理解文件系统
理解文件系统
我们之前学过,一个文件可以有多个datablock块,但是如果这个文件太大了怎么办?datablock中,不是所有的datablock只能存文件数据,也可以存其它块的块号。
inode Vs 文件名
找到文件的流程:知道inode编号->分区特定的块组->inode table块->属性和内容
那么我们怎么知道inode编号呢?
Linux中,inode属性里,没文件名的说法。
预备知识:
1.一个目录下,可以保存很多文件,但是这些文件没有重复的文件名。
2.目录时文件吗?
是->有自己的inode和datablock块。
而datablock块中存:文件和inode编号的映射关系。他们互为key值。
进入目录:必须有x权限
创建文件:必须有w权限
显示文件名与属性:必须有r权限
这些都是因为目录有自己的datablock块,所以要对datablock进行r\w,必须要有对应的r\w权限。
而inode编号是依托与目录结构
三个问题:
1.创建文件,系统做了什么?
a.首先我们肯定是在目录下创建文件的。
b.其次OS根据文件系统,找到目录所对应的分区。
c.然后找到块组中的inode Bitemap找到第一个为0的比特位,将0置1后返回该比特位的位置下标的大小就是inode号。
d.再根据inode号找到inode table对该文件的信息进行初始化
e.之后再用Block Bitmap,找到对应空闲的block块号
f.再用block块号,找到空闲的block块,然后写入文件和inode的映射关系
2.删除文件,系统做了什么?
a.根据文件名,找到inode
b.根据inode,将对应的inode Bitmap置为0
c.再将根据data block块号的BlockBitmap置为0
d.删除文件名和inode的映射关系
这样就删除了,不用清空数据,之后覆盖即可。
所以我们就可以理解文件恢复,就是根据之前的inode编号,找到对应的inode table然后恢复数据data block块。
恢复数据的前提:inode编号,没有被再次使用,inode table和data block内容没有被覆盖。
3.查看文件系统做了什么?
a.根据文件名,找到inode
b.根据inode找到对应的datablock table
c.然后再显示datablock table的内容即可
软硬链接:
软:
ln -s testLink1.txt soft.link
硬:
ln testLink2.txt hard.link
创建软硬链接的过程
我们再根据信息看一下软硬链接的区别
我们看到软硬链接的本质区别:软链接有自己的inode,硬链接没有。
软链接有自己独立的inode—>所以软链接是一个独立的文件
硬链接没有独立的inode---->所以硬链接不是一个独立的文件
软链接相当于Windows下的快捷键。
软链接特性:软链接的文件内容,是指向文件对应的路径
硬链接:
创建硬链接不是真正创建文件----->那么创建硬链接做了什么?---->就是在指定目录下,建立了文件名和指定的inode映射联系,仅此而已。
属性中有个数字就是硬链接数
我们看一下如果删掉testLink2.txt会怎么样
发现硬链接数变成1.
用图帮助理解
当我们删除一个文件的时候,并不是立即将该文件inode删除,而是将这个文件的引用计数count–。
当引用计数count=0的时候,这个文件和文件inode才应该被删除。
引用计数count=0,表示没有文件和他关联了---->没有用户关系这个文件了!
测试以上思路,创建多个硬链接
我们发现确实如此
语法删除软硬链接
软链接
unlink + 文件名
硬链接
unlink + 文件名
我们创建一个目录,发现目录的引用计数是2,为什么?
1.首先目录本身会建立和inode的映射关系
2.其次目录里面的 . 文件也会建立和inode的映射关系
我们在test目录下再建文件夹会发现引用计数变成3
这是因为d1中的 … 也和test的inode建立了映射关系
acm
下面解释一下文件的三个时间:
- Access 最后访问时间
- Modify 文件内容最后修改时间
- Change 属性最后修改时间