【Linux】硬盘中文件的管理

一、关于inode编号

在Linux中输入 ls -i 命令可查看inode编号(加-l选项可以看详细信息)
在这里插入图片描述
 从上图中我们可以看到各文件的inode编号,硬链接数以及其文件大小。其中这里的文件大小指的是文件内容大小,我们知道:文件=属性+内容,属性包含最后修改时间,权限,拥有者等等…,故而实际上该文件在硬盘中存储所需空间比图片的数大(因为不仅要保存内容还要保存属性)
 Linux把文件属性和文件内容分开存储,其中文件属性也叫元信息,而inode是任何一个文件的属性集合,Linux中几乎每一个文件都有一个inode,为了区分不同的inode,从而有了inode编号
 inode和文件内容都是在磁盘中存储的


二、磁盘相关知识

i. 磁盘的特性

  • 磁盘就是通过磁性进行读写功能的设备,断电后保存的文件不会丢失。硬盘是磁盘中的一种,硬盘是电脑主要的存储媒介之一
  • 硬盘的读写速度,不适合做频繁小量访问
  • 硬盘有两种寻址模式,一种就是C/H/S(Cylinder/Head/Sector)寻址模式,另一种是更优的LBA模式,全称为Logic Block Address(即扇区的逻辑块地址)
  • 可将磁盘空间想象为线性的,对其进行分区管理,要对各个区格式化,写入管理信息(由文件系统决定)

ii. 磁盘的空间分布

在这里插入图片描述
其中Boot Block上记录了每个Block group块组的起始结束位置,这里面还可以找到操作系统代码

三、详解磁盘中的一个Block Group

  1. 文件的内容存储于上图的Data Blocks中,Data Blocks内部又被划分成很多个小块

  2. inode Table里有很多个inode,每一个inode以结构体存储于上图的inode Table中,为128字节/256字节,里面记录了inode ID,拥有者,创建时间,大小,权限,文件的时间戳,硬链接数等属性信息(也叫做元信息),还包含了一个blocks数组,数组每个下标对应于Data Blocks内部被划分的小块。注意:inode内包含了硬链接数(硬链接表示有多个文件名指向同一个inode),但是不包含文件名,文件名被保存在该文件所属目录中。
    在这里插入图片描述

  3. Super BlockGroup Descriptor Table
    这两个不是每一组都有,起整体的统计作用:
    其中Super Block统计了整个块inode使用了多少个,还剩多少个,Data Blocks内部的小块使用了多少个,还剩多少个;一个block和inode的大小;Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
    Group Descriptor Table:块组描述符,用于描述块组属性信息

  4. Block Bitmapinode Bitmap
    Block Bitmap通过位图来反映Data Blocks内部的小块具体是哪几个使用了和哪些没使用
    inode Bitmap通过位图来反映具体是哪几个inode使用了和哪些没使用


四、磁盘视角看文件操作

i.创建一个文件(未写入数据)的过程

  1. 遍历inode Bitmap位图找到未被使用的inode位,然后在inode Table申请对应的空间,写入相关属性信息
  2. 在其所属目录的内容块中记录文件名和inode编号(目录相关知识下文再阐述)

ii.写入数据的过程

  1. 先获得这个文件的inode,再遍历Block Bitmap位图获取Data Blocks内未使用的小块
  2. 在inode结构体中的blocks数组记录下来
  3. 往Data Blocks内对应的小块写入数据

iii.删除一个文件要做什么

  1. 先找到这个文件的inode
  2. 在Block Bitmap位图去除inode结构体中的blocks数组使用的空间,即修改位图
  3. 在inode Table位图修改这个inode对应的位,释放该位

五、关于目录的知识

首先,我们要明确Linux下一切皆文件的思想,故而我们研究目录是以文件视角看待,即分析它的属性和内容

  • 属性:保存了权限,所属组,修改时间和它自己的inode编号等…
  • 内容:是当前目录下的文件名以及文件对应的inode编号

通过tree命令可以查看目录的结构,然后cd命令进入dir目录,输入ls -i 命令可查看inode编号
在这里插入图片描述
 由此我们得到的结论是:一个文件的文件名并不保存在它的inonde属性集合里,而是保存在它所属目录的内容

进一步地我们以此视角重新看目录的rwx权限

  • 进入一个目录需要x权限:本质把当前进程的工作目录改成当前目录
  • 读取一个目录需要r权限:打印出当前目录下的文件名相当于读取目录的数据区,即读权限
  • 在目录创建文件需要w权限:创建文件需要把文件名和inode编号写到目录的数据区,即写权限

六、新视角看Linux命令

  • 输入命令 ls 发生了什么
    根据当前目录的inode编号找到它的内容块,并将这里面存储的文件名打印出来,此处并不用访问到文件的inode

  • 输入命令 ls -l 发生了什么
    根据当前目录的inode编号找到它的内容块,得到这里面存储的文件名,并根据这些文件的inode编号再去找它们的inode,获得它们的属性:权限,所属组,大小,修改日期,最后再打印出来

七、再审视文件操作

  • 引入目录后再分析创建文件并写入数据的过程
    在inode Bitmap申请一个未被使用的inode,然后在inode Table申请对应的空间,写入相关属性信息,再在Block Bitmap申请Data Blocks内未使用的小块,建立好这些小块与inode结构体中的blocks数组的对应关系,然后再写入数据。然后把当前inode编号和文件名填写到其所属目录的内容块中

八、软硬链接

i.软硬链接的命令

  • 软链接命令:ln -s 原文件名 新文件名
    通过此命令可将新文件名软链接到原文件名,新文件名保存的是原文件名的路径,相当于Windows中生成了一个新的快捷方式,通过./新文件名 也能运行程序,注意该“快捷方式”本身自己就是一个新的文件,有着全新的inode编号

  • 硬链接命令:ln 原文件名 新文件名
    通过此命令可将后者文件硬链接到前者,inode编号不变,通过./新文件名 也能运行程序

ii.软硬链接的区别

  1. 软链接生成的文件是一个独立的文件,有自己的inode编号,而硬链接没有独立的inode编号,与原文件的相同
  2. 软链接生成的文件相当于快捷方式;硬链接本质没有创建文件,只是再提供了一个和原文件inode编号具有映射关系的文件名,并将其写入到当前目录的内容块中,相当于取别名

iii.硬链接的作用

  1. 方便目录之间通过相对路径的方式相互跳转,即 . . . ,如通过cd . . 命令可以快速回到上级目录
  2. 删掉一个硬链接的目录/文件名不会影响其他的目录/文件名,相当于只是删掉了别名
  3. 通过看一个目录的硬链接数知道它有多少个子目录,每个目录内都有一个 . 文件夹,表示该目录自身,所以一个目录的硬链接数>=2

举个例子:当前有两个文件夹分别为dirhs,输入 ls -i -l 命令可查看到两个目录的硬链接数都是2,其中dir文件夹的inode编号为1311612123,我们进入dir文件夹,输入相关命令可以看到有一个 . 文件夹,它的inode编号也是为1311612123,即 . 文件夹dir文件夹的硬链接在这里插入图片描述  如果在dir目录内再创建个newdir,我们会发现dir的硬连接数会变成3,因为多了 . . ,而 . . 是指向上级目录即dir的,newdir中的 . . 对应的inode编号与dir的inode编号相同

评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值