【Linux】文件系统和软硬链接

目录

磁盘

磁盘的结构

小问题解答:

磁盘存储的逻辑抽象

文件系统

问题解答:⭐⭐⭐⭐

软链接

硬链接

文件属性引用计数

小知识点:


在学习文件系统前我们先来了解一下磁盘。

在我们之前的学习中,我们对于文件的操作,都是在文件已经被打开的前提下进行的;

被打开的文件 -->找到这个文件 -->磁盘中先找到 -->文件路径+文件名 -->执行文件操作

那你们有没有一个疑问?没有被打开的文件在哪里存放呢⁉️

没有被打开的文件是被放到磁盘里的!!磁盘中有磁盘文件,那这个没有被打开的文件是如何存取的呢?

想要知道这个问题的答案,我们先来了解一下磁盘;

磁盘

磁盘到底长啥样啊?

磁盘的结构

一个磁盘有多个盘片,一个盘片有两个盘面,每个盘面都有对应的磁头

我们知道,在计算机中只认识二进制,那么磁盘是怎么存储数据的呢

盘片的表面涂有磁性物质,这些磁性物质用来记录二进制数据。

注意:磁头并不会碰到盘面,如果磁头和盘面接触,那么读取数据的时候,就会使盘面受到损害,那么存储的数据就会丢失;所以磁头是悬浮在盘片上的;

把一个盘片单独的拿出来:

每个盘面被划分成一个个磁道,磁道又被划分为多个扇区

我们从图纸可以看到,每个磁道的大小都不一样,在外圈的磁道比较大,内圈的磁道比较小,但是不管有多大有多小,每个磁道存储内容的大小都是一样的;只不过扇区小的存储的数据紧密点已;

磁盘读写的基本单位是扇区,一个扇区大部分存储的是512字节,但是也有的扇区存储的是4KB;

小问题解答:

如何找到一个指定位置的扇区?

  1. 找到指定的磁头(Header)
  2. 找到指定的磁道(Cylinder)
  3. 找到指定的扇区(Sector)

上面的方法就是CHS定址法

磁片中的盘面为什么要旋转?

  • 通过旋转来定位扇区;

磁头为什么要左右摇摆?

  • 通过左右摇摆来定位磁道;

通过学习磁盘的结构,我们可以知道,文件就是在磁盘中占几个扇区的问题!!

磁盘存储的逻辑抽象

对磁盘的存储进行逻辑抽象其实就是OS对磁盘进行管理和抽象;

为什么要对磁盘的存储进行逻辑抽象呢?

  • OS直接使用CHS定址法,耦合度太高;
  • 方便实现内核进行磁盘管理

不知道你们有没有见过磁带(没有见过的可以看下面图片):

我们就可以把整个磁盘看成一个一个的扇区这样来分:

假如有一个盘面1000个扇区,10个磁道;我们可以知道1个磁道有100个扇区;index为扇区的编号;

index/1000=H;

index%1000=tmp;[0,999]

tmp/100=C;

tmp%100=S;

文件系统

假如磁盘可以存储800GB,OS管理数据时会把它先分区在分组;

查看分区:

df -h

文件=文件内容+文件属性;

文件在磁盘中存储,本质上文件内容+文件属性数据;

Linux文件系统特定,文件内容和属性并不是存放在同一个地方,而是分开放的;

我们来看分别看一下每个组里面有什么;

  • data blocks:数据区,存放文件内容;
  • block bitmap:块位图,Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息
  • 超级块(Super Block):存放文件系统本身的结构信息。(并不是每个分组都有)

注意:

        inode 内部不含文件名!!!

        内核层面,每一个文件都要有inode number,我们可以通过inode号标识文件!!!

如何查找文件的inode号呢?

ll -li

每个分区内部分组,然后写入文件系统的管理数据(格式化!!!)-->在磁盘中写入文件系统!!!

问题解答:⭐⭐⭐⭐

我们先来看目录:

目录也是一个文件,目录里面有什么呢?

存放的是文件名和inode号的映射关系

我们要查找一个文件 ,要先找到他的inode号(inode号是以分区为单位),我们平时查找一个文件时并没有用它的inode号啊,我们用的一直都是文件名,他俩有什么关系呢?我们上面不是说文件名和inode号不存放在同一个地区嘛,怎么通过文件名查找到inode号的?

找到指定文件:先找到文件所在目录 --->打开目录  ---->根据文件名查找inode号 ---->目标文件的inode号

补充:(文件名和inode映射关系)

  • 一个目录下不能建立同名文件
  • 查找文件顺序:文件名-->inode号
  • 进入目录,要x权限;r权限:本质是是否允许读取目录的内容文件名;w:是否新建文件;

那又会有一个疑问,我们通过目录来查找,可是目录也是文件啊,目录的inode怎么找到?

其实就是递归似的一直向上进行路径解析,解析完毕后,找到根目录,然后再反向逐次打开我们对应的文件!!!

我们指定每一个分区都有它的inode机制,我们怎么指定这个inode在哪一个分区呢?

因为一个文件在访问之前,都是先有目录的!!!/a/b/c...

这样就可以直接找到路径下的哪一个分区,就能找到inode,根据inode就直接去指定分区下找指定文件了; 

磁盘-->分区-->写入文件系统(格式化)-->挂载到指定目录下-->进入该目录-->在指定分区下进行文件操作;

那目录是由谁提供的呢?

内核文件系统提前写入并组织好,然后你或你的进程提供!!!

软链接

我们先来看一下软链接长什么样子?

创建软链接:ln -s 目标文件 软链接文件名

如:ln -s test.txt test.link

看一下下面的代码,我们来分析一下软链接有什么特征

我们会发现,我们刚才创建的软链接是有它自己的inode number;所以软链接的特征就是软链接是一个独立的文件;

那有人要问了,软链接有什么用途呢?

软链接在windows中就是一个快捷方式;

我们来查看一下test.txt文件中的内容,和对test.txt生成文件的软链接文件的内容;

他们的内容都是一样的;

由此可知:软链接内容:目标文件所对应的路径字符串;

硬链接

和软链接的流程一样,我们先来看一下硬链接长啥样;

创建硬链接:ln 目标文件 软链接文件名

如:ln test.txt test.link

软硬链接创建的区别就是-s

然后我们来查看一下文件对应的inode number

test.txt和我们创建的硬链接文件的inode number是一样的;

所以硬链接特征:

硬链接不是一个独立的文件,因为它没有独立的inode number;用的是目标文件的inode number

那硬链接不是文件的话,它是什么?

硬链接是文件名和inode的映射关系;就是在指定目录下,添加一个新的文件名和inode号的映射关系;

如果我们把目标文件删除,test.txt的内容不会丢失;因为test.txt的内容对应的inode number是可以找到的--------硬链接记录了;

文件属性引用计数

下面图片中圈起来的就是文件所对应的引用计数;

创建文件目录默认的引用计数是2

为什么目录的引用计数默认是2呢?

任何一个目录都有两个文件: .  和     ..  ;

我们会发现dir目录和  . 文件的inode号是一样的;

所以目录的引用计数默认是2;

如果在目录下在创建一个目录,会发现这个目录的引用计数变成的3,新创建的目录的引用计数是2;为什么原目录的引用计数会+1呢

我们进入到新创建的目录查看,会发现   ..  文件的inode number和原目录的inode number是一样的;

  •   相当于当前目录的重命名,  ..  相当于上级目录;
  • 目录A内,新建一个目录,默认目录A的引用计数+1;

小知识点:

(1)定位一个文件,只要两种方式:

  1. 通过路径
  2. 直接找到目标文件的inode number;

(2)Linux下,不允许给目录创建硬链接,为了避免形成路径环绕;

(3)一般用硬链接作为文件备份;

以上就是文件系统和软硬链接的全部内容,希望有所帮助。😉😉😉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值