【Linux】:文件系统(软硬链接)

文件=内容+属性,前面我们所说的文件操作都是针对以打开的文件,那么未打开的文件呢?当然是在磁盘上储存着,接下来谈谈它是如何储存的。

在这里插入图片描述

一.认识硬件-磁盘

1.磁盘的物理构成

在2000年的时候流行过一段时间的光盘。

在这里插入图片描述

这种光盘有一面是光滑的,而磁盘就由一个或者多个这样的光盘组成(它的两面都是光滑的)。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

磁盘有一个磁头,当电脑关机时,磁头就会转到磁头停靠点。当磁盘通电时,磁盘会顺时针或逆时针高速旋转,同时磁头也会来回摆动。整个磁盘的底部会有一个与电脑的连接口,当把磁盘插入到电脑里时,电脑就能通过连接的总线把二进制信号读入电脑。

在这里插入图片描述

磁头是两面都有,如果只有一个光盘那么就有两个磁头,如果是两个光盘,那么就有四个磁头。注意磁头和盘面不接触。

2.磁盘的存储构成

在这里插入图片描述

磁盘上的数据是有规律的,它会循着马达向外部扩散,形成一个一个的同心圈,数据就储存在这些圆上,这些同心圆被称为磁道。在盘面上还会有一条条的线,将磁道分割成一个个扇形区域,这些区域被称为扇区。磁盘被访问的最基本单位就是扇区-一般512B/4KB。

在这里插入图片描述

要把数据储存到磁盘第一个问题就是定位—面->磁道->扇区。 从上往下看,多个圆重合在一起形成一个柱形结构,这个结构被称为柱面。前面说到磁头会左右摆动,就是在定位磁道。

磁盘为什么慢主要取决于:1.确认磁道;2.盘片的自转。 如果数据无序,势必会导致盘片的自转次数变多。所以运动越少,效率越高;运动越多,效率越低。

3.逻辑结构

虽然在物理结构上是圆形,但在逻辑结构上可以看成线性。

在这里插入图片描述

每一个扇区都有对应的下标,那么这样我们就能通过下标计算它所处的面,磁道。

回归到硬件:不仅CPU里有寄存器,磁盘里也有寄存器。

在这里插入图片描述

进程可以让操作系统间接的帮忙检查状态寄存器,判断状态是否变化,如果变化则操作结束,否则进行等待。然后IO访问控制寄存器,查看指令,接着对数据进行相应的操作。

二.文件系统

1.基本概念

如果一个电脑的磁盘有800GB的大小,那么毫无疑问这对于操作系统来说太大了不易于管理。于是我们可以将磁盘划分为C盘,D盘…之类的分区,当然这还是有些大,于是操作系统就又继续分割,分成一个个Block group组。

在这里插入图片描述

BootBlock:一般被称为启动分区,主要包括一些磁盘分区的起止位置,开机信息等等。

Block group:就是把磁盘划分成更多份。那么就把一块很大的磁盘变成了管理一个Block group的小块。而这些块里面的就是文件系统。

inode Table:inode是一个结构体保存了单个文件的全部属性(文件名不属于inode),128字节,一般而言一个文件一个inode。而inodeTable保存了该分组所有inode。

在这里插入图片描述

Data Blocks:存文件内容的区域,以块的形式呈现一般为4KB.

inodeBitmap:判断该编号的Inode是否有效。

inodeBlock:判断该编号的block是否有效。

SuperBlock:文件系统的基本信息,虽然它存在组里,但它保存的是每一个分区的信息。它不会在每一个组里都存在,但会存在某些组里,这是为了防止superblock丢失。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。

格式化:每一个分区在被使用前,都必须先将部分文件系统的属性信息提前设置进对应的分区中。

GroupDescriptorTable(GDT):块组描述符,描述块组属性信息。例如使用了多少块…

2.硬链接

我们看到,真正找到磁盘上文件的并不是文件名,而是inode。其实在linux中可以让多个文件名对应于同一个inode。而硬链接就相当于给文件取别名。硬链接不是一个独立的文件,它没有自己的inode。

建立一个文件,它的默认硬链接数是1,因为最开始只有它自己指向自己

在这里插入图片描述

建立一个硬链接:对link建立一个名为hard-link的硬链接,ln link hard-link

在这里插入图片描述

可以看到它们两个的硬链接数都变为了2,它们都指向同一个文件。实际上这个硬链接数是一个引用计数。我们在删除文件时干了两件事情:1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应的磁盘释放。

目录的硬链接数

我们自己不能给目录创建硬链接。原因很简单,目录是通过树形结构来搜索,一旦在子节点创建了一个对父节点的硬链接,那么在搜索文件时,很有可能就会造成父节点-子节点-父节点-子节点…的闭环。所以操作系统禁止给目录创建硬链接。

但是目录本身有硬链接数,这是由操作系统自己创建的。每一个目录都会有两个隐藏目录,.和… ,分别指向自身和上级目录,这其实就是一种硬链接。

创建一个目录,它默认硬链接数是2,因为还有一个.指向自己
在这里插入图片描述

当再在该目录里创建子目录时链接数还会增加,因为每创建一个子目录,就会多一个…指向该目录

在这里插入图片描述

所以要知道该目录下有多少个子目录,只需要硬链接数-2即可。

2.软链接

硬链接是通过inode引用另外一个文件,软链接是通过名字引用另外一个文件。软链接是一个独立的文件,它有自己的inode。常被用于创建一个软件的快捷方式。

建立一个软链接,两者的硬链接数不会发生改变:对test.txt建立一个名为soft_link的软链接,ln -s test.txt soft_link

在这里插入图片描述

注意:删除链接虽然可以使用rm,但建议使用unlink.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸蛋挞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值