当前位置: 首页 > news >正文

009 Linux_文件系统 | 软硬链接

前言

本文将会向你介绍文件系统与软硬链接

文章重点

本文将会先向你介绍文件是如何在磁盘上进行管理的,关于文件的管理将会从管理属性和管理内容两方面来谈,最后会向你介绍软硬链接的概念

文件在磁盘中的管理

首先,假设一个磁盘200GB,我们首要做的事情就是对它进行区域划分,方便管理(类似于国家治理,我们也需要划分为 一个个省来进行管理)
我们通常说的电脑上的CDEF盘,实际上在物理上只有一个盘,为了便于用户使用才分为了CDEF盘
假设:那么我们将200GB分为两个组,一个组BLOCK group100GB

在这里插入图片描述

Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子
超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个 文件系统结构就被破坏了
GDT,Group Descriptor Table:块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下
块位图(Blockitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。 i节点表:存放文件属性如文件大小,所有者,最近修改时间等 数据区:存放文件内容

关于此图中的Super Block,Group Descriptor table,block Bitmap,inode Bitmap inode Table Data blocks后续都会介绍,管理一个块组,也就是管理好这些信息

接着我们再将100GB分为2GB一个组,那么管理200GB的磁盘,我们只需要管理好这2GB就行了,毕竟管理方法是可以借鉴的
这也体现了分治(大事化小)的思想
在这里插入图片描述

那么问题来了:如何管理这2GB一个组呢?
在这里插入图片描述
那么我们就需要将这些信息管理好

管理属性

引入inode编号

在这里插入图片描述

第一列数字叫做文件的inode编号,一般情况,一个文件只有一个inode编号,每个文件都要有inode编号,并且在整个分区具有唯一性
inode块包含文件的属性(如文件大小,所有者,最近修改时间等),可抽象为一个结构体A(注意和inode编号区别,inode块是一个属性的集合)

struct inode
{
大小,权限,拥有者,所属组,ACM时间
inode编号
int ref_count //引用计数 后续会介绍
int block[N] //后续会介绍
}

每一个inode结构体有一个inode编号,并且inode结构体的大小固定,这样一来,inode就很好被定位
inode_Table是一个元素为一个个inode块的数组,每一个组block group都会有一个起始组的inode编号,用当前文件inode编号减去起始组的inode编号就可以得到在inode_Table表中的下标
在这里插入图片描述

这样一来属性就很好地被一个抽象数组管理起来了

管理内容

DATA block数据区:

每一个数据块是文件的所有内容数据,大小固定(4KB的数据块) 定位:每一个块都应该有块号的概念(编号,偏移量)
这个块号存在inode块中,比如一个文件的inode块中存储的int block[1,2,4]
那么该文件所有的数据内容存储在块号为1,2,4的数据区Data Block中

在这里插入图片描述

结论:只要知道inode编号(起始编号),就能根据inode定位是哪一个组区间(根据起始组inode编号),就能根据inode
Table查询inode块(属性),得知了inode块就知道了block[N],就可以定位DataBlock拿到文件的数据内容

可是怎么知道哪一个inode块没被使用,哪一个数据块datablock没被使用?

就需要根据块位图(Block_Bitmap)与 inode位图(inode_Bitmap) 块位图(Block_Bitmap):Block Bitmap中记录着Data
Block中哪个数据块已经被占用,哪个数据块没有被占用。比特位的位置表示块block编号,比特位的内容(0/1)表示是否被使用
inode位图(inode_Bitmap):每个bit表示一个inode是否空闲可用。比特位的位置表示inode编号,比特位的内容(0/1)表示是否被使用

软硬链接

软连接
在这里插入图片描述

可以观察到软连接形成了一个新inode,这说明文件经软链接后会形成了一个新的独立文件

连接的作用:快速定位文件

当安装的程序路径很深的时候,有了链接文件,就可以在桌面上放置快捷方式
另外地未来在公司中做项目,并不是把裸的exe可执行程序暴露出来交付,可能会把所有的项目(日志、配置文件等等)以目录的形式进行交付

在这里插入图片描述

这样一来,如果一个可执行程序或者配置文件隐藏的路径比较深,如果我们直接想要在外部访问它,那么可以用软连接快速定位这个文件

在这里插入图片描述

硬链接
在这里插入图片描述

软连接是一个独立的文件,硬链接不是,因为它没有独立的inode编号,本质上就是指在文件系统中创建一个文件的副本,这个副本与原始文件共享相同的inode。硬链接可以让一个文件拥有多个文件名,但它们实际上指向同一个数据块。当原始文件或者硬链接文件中的任何一个被修改时,修改会立即反映到所有的硬链接文件上

观察一个现象
为什么新创建的目录默认引用计数(硬链接数)为2呢?
在这里插入图片描述
.表示当前目录,. .表示上级目录

那是因为任何一个空目录都会隐藏两个文件,在dir下,.与inode也是一组文件名映射关系,以.为命名的文件也是dir1文件的副本,观察到它们的inode相同,.和dir1文件名(目录也可看作文件,linux下一切皆文件)都与inode有着映射关系,有两组映射,因此硬链接数为2

在这里插入图片描述

小结

今日的分享就到这里啦,如果本文存在疏漏或错误的地方还请您能够指出

相关文章:

  • elasticsearch[二]-DSL查询语法:全文检索、精准查询(term/range)、地理坐标查询(矩阵、范围)、复合查询(相关性算法)、布尔查询
  • springboot多数据源支持自定义连接池
  • SQL笔记 -- 锁
  • Eureka使用详解
  • web漏洞总结大全(基础)
  • 如何在CentOS下使用Docker部署Halo博客网站并结合内网穿透远程访问
  • 131. 分割回文串 - 力扣(LeetCode)
  • Ubuntu使用docker-compose安装chatGPT
  • x-cmd pkg | yq - 命令行 YAML处理工具
  • 三国游戏(第十四届蓝桥杯)
  • ros2学习笔记-CLI工具,记录命令对应操作。
  • 杭州城市开发者年会——CMeet系列技术生态沙龙
  • 【unity学习笔记】语音驱动blendershape
  • ctfshow反序列化(web254-web266)
  • 响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-6 fieldset
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • download使用浅析
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • iOS小技巧之UIImagePickerController实现头像选择
  • js学习笔记
  • Koa2 之文件上传下载
  • laravel5.5 视图共享数据
  • PermissionScope Swift4 兼容问题
  • Redis在Web项目中的应用与实践
  • Tornado学习笔记(1)
  • vue 配置sass、scss全局变量
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 测试如何在敏捷团队中工作?
  • 机器学习学习笔记一
  • 记一次用 NodeJs 实现模拟登录的思路
  • 经典排序算法及其 Java 实现
  • 批量截取pdf文件
  • 我建了一个叫Hello World的项目
  • 云大使推广中的常见热门问题
  • AI算硅基生命吗,为什么?
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 如何用纯 CSS 创作一个货车 loader
  • 正则表达式-基础知识Review
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #QT(智能家居界面-界面切换)
  • #微信小程序:微信小程序常见的配置传旨
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (¥1011)-(一千零一拾一元整)输出
  • (175)FPGA门控时钟技术
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (原創) 物件導向與老子思想 (OO)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转载)跟我一起学习VIM - The Life Changing Editor