0
点赞
收藏
分享

微信扫一扫

【Linux】文件系统及软硬连接

他说Python 2022-03-30 阅读 36
linux

Linux文件系统

文章目录

硬盘分区

请添加图片描述

首先硬盘是一个机械结构的计算机设备,它由盘片,读写磁头,转轴,电机等协作完成数据的读写操作。

一个硬盘可能由多个盘面,每个盘面都会对应一个磁头,通过磁头可以找到对应的盘面,在盘面内以盘片为圆心不同半径的同心圆构成的区域叫做磁道,而磁道又被分为平均的区域块,叫做扇区

磁盘通过一级一级的结构完成文件的定位和读写操作,但是复杂的机械结构不便于操作系统进行管理,所以操作系统会把这些结构都抽象成逻辑地址,也就是把硬盘抽象成了一个大的数组结构,把硬盘的不同区域映射到数组当中,操作系统只需要对这个逻辑地址进行管理,对物理设备的管理转化成软件层面的管理,实现硬盘的管理操作。


但是一个硬盘的数据过于庞大,为了方便管理,操作系统要对抽象好的逻辑地址进行分区,缩小管理的难度,分好的分区,写入一个管理系统对数据进行管理,只要能管好一个分区,就能把对这个区的管理方式分别应用到别的分区,实现对整个硬盘的管理。

请添加图片描述

硬盘的文件系统

上面提到的对每个分区的管理系统,就是系统为硬盘的每个分区写入一定的结构和方法,实现对整个分区的管理,这就是Linux的文件系统。

下面的例子是Linux的ext2文件系统

请添加图片描述

硬盘的整个分区被划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的,

对硬盘划分的分区进行细分,可以把一个分区划分为一个boot block,和若干不同的块组,相当于对分区再进行细分,分为更小的分区,boot block叫做引导分区或者启动分区,用来帮助操作系统找到分区。

我们的文件系统进行管理的,实际上就是一个个块组,一个Block group就是一个块组,每个块组都由不同的区域构成


Inode

我们知道,文件从存储不光有文件的数据,还有文件的属性信息,而inode就是用来保存文件属性的数据结构

通过stat命令可以看到文件的属性信息

请添加图片描述

每个文件都会对应一个inode

每在硬盘上存放一个文件,文件对应的唯一inode信息都会被存放到inode Table表当中,而indoe Table中存放的indoe数量和剩余大小,则是通过inode Bitmap确定的,每存放一个inode到inode Table中,inode Bitmap的位图都会记录,文件存放到block中,每个block也都对应着Block Bitmap的位图,所以说Block Bitmap也会记录文件存放的位置信息等。

Inode id

它是一个inode的标识符,在分区内是唯一的不重复的,要找到inode,就要通过inode id ,用命令ls -i 就能查看文件的inode id

请添加图片描述

目录文件

“Linux下一切皆文件” ,目录结构其实也是一个文件,目录里面保存的,其实是文件名和inode的映射关系

目录文件构成=inode+数据

数据=文件名:inode id

我们用命令看到的文件详细信息,并不是说这些信息被保存在目录文件当中,我们要查看文件的详细属性信息,是通过文件名,在目录的数据中,找到文件名和inode id的映射关系,通过映射关系找到对应的inode,再把inode的信息拿出来,就能看到文件对应的属性信息。

软链接

用命令ln -s可以创建文件对应的软连接

ls -s IO.txt link

请添加图片描述

查看目录的详细信息,发现link和IO.txt文件拥有不同的inode id,说明两个文件不是一个文件

请添加图片描述

发现link指向的是IO.txt,我们再对link进行操作,写入字符串"link test"

请添加图片描述

请添加图片描述

我们对link进行写操作,但是link链接的IO.txt也发生了写操作。

但是两个文件的inod id不同,也就不是一个文件,为什么对link操作会影响IO.txt?

删除IO.txt文件

请添加图片描述

发现link的配色发生了变化,再对link进行操作,发现找不到文件。

这是因为link和IO.txt之间建立的是软连接,link是一个独立的文件,类似于window操作系统中的快捷方式,link文件中的数据,存的并不是IO.txt的inode,而是IO.txt的路径信息,所以在删除IO.txt之后,link就找不到IO.txt文件了。

软连接常用于大型工程,想把可执行程序拿到项目目录外面执行的话,就可以对可执行程序建立软连接,在目录外面不用配置环境变量就可以之间运行程序。

硬链接

使用命令ln 创建对应文件的硬链接

ln IO.txt h_link

请添加图片描述

可以看到硬链接的两个文件,inode id是同一个,也就是说这两个文件其实是同一个文件,而且文件详细信息里面的硬链接数,两个文件都变成了2

对这两个文件进行操作的话,毋庸置疑,肯定都会发生变化。

这个h_link文件对IO.txt 进行硬链接,这个h_link文件里面存的,其实是文件名和IO.txt的indoe id映射关系,这两个文件通过映射关系找到的indoe,其实是一个indoe,也就是一个文件属性,这两个文件其实是一个文件。

对IO.txt进行删除操作

请添加图片描述

这两个文件的链接消失了,但是这个文件本质上还是存在的,只是换了一个文件名,h_link里面依然是IO.txt里存放的映射关系,映射到的还是同一个inode,也就是说IO.txt并没有被删除,只是换了一个文件名。

举报

相关推荐

0 条评论