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

在这里插入图片描述

小结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/418851.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《WebKit 技术内幕》之五(2): HTML解释器和DOM 模型

2.HTML 解释器 2.1 解释过程 HTML 解释器的工作就是将网络或者本地磁盘获取的 HTML 网页和资源从字节流解释成 DOM 树结构。 这一过程中,WebKit 内部对网页内容在各个阶段的结构表示。 WebKit 中这一过程如下:首先是字节流,经过解码之…

(已解决)阿里云ECS服务器8080端口无法访问

最近购买阿里云服务器项目部署的时候,配置开放了阿里云8080端口,却一直访问不了,看了阿里云社区几个帖子,都没有找到正确的解决方法。 然后CSDN看了几个帖子,方法也不对。 索性,我很早之前就使用阿里云EC…

鸿蒙星河版启航,开发者驶入生态新征程

操作系统市场的气候已经不同以往。在鸿蒙决定不再兼容安卓之后,这里正欲长出一片全新的天地。 四年前,华为鸿蒙系统横空出世,彼时它还不完全与安卓和iOS的性质划等号,而是定义为物联网操作系统。而如今的华为鸿蒙要改写故事篇章&…

centos7安装Redis7.2.4

文章目录 下载Redis解压Redis安装gcc依赖(Redis是C语言编写的,编译需要)编译安装src目录下二进制文件安装到/usr/local/bin修改redis.conf文件启动redis服务外部连接测试 参考: 在centos中安装redis-5.0.7 Memory overcommit must…

k8s节点RouteCreated为false

出现该情况后,一般是初始化节点失败。因此,需要把节点从集群中移除,再加入到集群中,即可解决。 通常出现这个状况后,该节点上是没有被分配pod ip的,可以通过命令查看: # 发现没有PodCIDR、PodC…

(3)【Python数据分析进阶】Machine-Learning模型与算法应用-线性回归与逻辑回归

目录 一、Linear Regression线性回归应用 应用案例(一)——自定义数据(Custom data) 1、下载安装sklearn库 2、导入库函数 3、加载数据集 4、创建线性回归对象 5、模型训练 6、预测结果 7、绘制模型图像 8、应用模型进行…

相关系数(皮尔逊相关系数和斯皮尔曼相关系数)

本文借鉴了数学建模清风老师的课件与思路,可以点击查看链接查看清风老师视频讲解:5.1 对数据进行描述性统计以及皮尔逊相关系数的计算方法_哔哩哔哩_bilibili 注:直接先看 ( 三、两个相关系数系数的比较 ) 部分&#x…

vue.js js 雪花算法ID生成 vue.js之snowFlake算法

随着前端业务越来越复杂,自定义表单数据量比较大,每条数据的id生成则至关重要。想到前期IOS中实现的雪花算法ID,照着其实现JS版本,供大家学习参考。 一、库的建立引入 在你项目中创建一个snowFlake.js的文件:拷贝以下…

SpringCloud之Nacos的学习、快速上手

1、什么是Nacos Nacos是阿里的一个开源产品,是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案,用来实现配置中心和服务注册中心。 Nacos 快速开始 2、安装运行nacos nacos下载地址 下载地址: https://github.com/alibaba/nacos/rel…

【复现】Apache Solr信息泄漏漏洞_24

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 Apache Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求&#x…

Spark面试题

1. spark core 1.简述hadoop 和 spark的不同点(为什么spark更快)♥♥♥ shuffle都是需要落盘的,因为在宽依赖中需要将上一个阶段的所有分区数据都准备好,才能进入下一个阶段,那么如果一直将数据放在内存中&#xff0c…