磁盘文件简单的一个框架图:
磁盘里的文件系统如何管理:
将磁盘划分成几个区域,前面是磁盘信息,
第一个区域:放的是超级块,
第二个区域:是inode 在磁盘上每创建一个文件,就会对应一个inode的结构体
第三个区域:目录项
目录项分为两项:
第一项是inode的编号
第二项是文件的名称 当我们在linux中创建一个文件(touch hello.c)时,在文件内写入数据“hello world”(字符串),此时就会在linux中创建一个数据区,会把文件中的数据保存到这个数据区,此时这个数据区文件会对应一个inode的结构体,这两个是一 一对应的关系,也就是数据区有几个文件,它就对应几个inode的结构体。
inode里面会有一个编号,当你在创建的时候,这个编号会对应一个文件名
比如:
在目录项里面就会有编号是1001对应hello.c
当我们用vim打开一个文件时(vim hello.c),vim怎么知道这个文件在哪?
它的执行过程是:
将文件名hello.c传给vim这个编辑器,此时这个编辑器会通过文件名hello.c去目录项里面找到1001这个inode编号,进而通过这个编号就可以找到inode结构体,找到结构体后,结构体里面就会有数据区里面文件的信息,找到数据区,打开这个文件,就可以加载文件中的内容。第四个区域:文件的数据区域
所谓硬链接
就是以inode的物理编号为基础创建的一个链接 比如: ln hello.c
xx.c,那么这个xx.c就是hello.c的一个硬链接,同时,在目录项里面就有一个文件名为xx.c,xx.c和hello.c是同一个文件,说直接点硬链接就是一个文件的别名,对应的还是这个hello.c这个文件,它是利用hello.c这个编号,来建立的一个链接,所以这两个名称都是对应的同一个inode结构体,对应同一个inode,就说明它们对应的是同一个文件,所以不管我们是vim
hello.c还是vim
xx.c,都是打开的同一个文件,都是通过inode编号1001找到数据区里的文件。就像我们经常看到的硬链接数,在目录项中就有几个文件名指向这个文件
实操:
硬链接总结:
就是文件的一个别名,相当于给文件多取一个名字,所以呢,文件本身的文件名,也是这个文件的硬链接。
从删除(rm)角度看:
本质上也就是删除该数据区文件的硬链接数,当一个文件的硬连接数为零的时候,我们就认为该文件不存在,系统就会把这个数据区清除。
软连接:
软连接属于七种类型文件里面的一种符号链接(特殊文件:快捷方式),
七种类型文件分别为:
常规文件 -
ASCII码文件
二进制的文件
目录字符设备 c
块设备 b
有名管道 p
套接口 s
符号链接 l
目录文件 d
软连接是根据文件的路径来建立链接
比如:创建一个软连接ln -s hello.c yy.c,此时此刻yy.c是一个独立的一个文件,数据区内会有一个单独的数据区,既然有单独的数据区,那么它就对应一个单独的inode结构体,编号也是有单独的一个inode编号,目录项里面也会有对应的项。
那么软连接文件里面放的是什么?
放的是建立链接的这个文件的一个路径
执行流程:
打开文件vim yy.c,此时他会根据这个文件名先在目录项里面找到inode编号,然后通过inode编号找到inode这个节点后,进而就可以找到对应的数据区,从数据区文件里面获取源文件的路径,通过路径再找到文hello.c,后面的流程就和硬链接一样了,最后通过yy.c打开hello.c
从删除(rm)角度看:
如果删除软连接yy.c,会不会影响源文件hello.c,不会影响源文件。
所以一般我们为了安全起见都会给一些动态库建立一个软链接,目的是为了对动态库进行保护,用的时候是使用的链接文件,而不是用的库的本身
如有什么出入还望指出,虚心求教!
如果你有收获,点个赞,鼓励一下,谢谢^ _ ^