009 Linux_文件系统 | 软硬链接

news2024/11/28 12:47:16

前言

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

文章重点

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

文件在磁盘中的管理

首先,假设一个磁盘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.coloradmin.cn/o/1399213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

softmax回实战

1.数据集 MNIST数据集 (LeCun et al., 1998) 是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。 我们将使用类似但更复杂的Fashion-MNIST数据集 (Xiao et al., 2017)。 import torch import torchvision from torch.utils import data from torchvisi…

25计算机考研408专业课复习计划

点击蓝字,关注我们 今天要分享的是25计算机考研408专业课复习计划。 以下内容供大家参考,大家要根据自己的复习情况进行适当调整。 统考与自命题 统考科目是指计算机学科专业基础综合(408),满分150分,试…

用MATLAB函数在图表中建立模型

本节介绍如何使用Stateflow图表创建模型,该图表调用两个MATLAB函数meanstats和stdevstats。meanstats计算平均值,stdevstats计算vals中值的标准偏差,并将它们分别输出到Stateflow数据平均值和stdev。 请遵循以下步骤: 1.使用以下…

医保移动支付加密解密请求工具封装【国密SM2SM4】

文章目录 医保移动支付加密解密请求工具封装一、项目背景二、使用方法三、接口调用四、源码介绍五、下载地址 医保移动支付加密解密请求工具封装 定点医药机构向地方移动支付中心发起费用明细上传、支付下单、医保退费等交易时需要发送密文,由于各大医疗机构厂商的开…

揭秘AI换脸技术:从原理到应用

随着人工智能技术的不断发展,AI换脸技术逐渐成为人们关注的焦点。这项神奇的技术能够将一张图像或视频中的人脸替换成另一张人脸,让人不禁惊叹科技的神奇。那么,AI换脸技术究竟是如何实现的呢?本文将带您深入了解AI换脸技术的原理…

python系列-输入输出关系运算符算术运算符

🌈个人主页: 会编程的果子君​💫个人格言:“成为自己未来的主人~” 目录 注释的语法 注释的规范 输入输出 通过控制台输出 通过控制台输入 运算符 算术运算符 关系运算符 注释的语法 python中有两种注释风格: 1.注释行:…

无人机打击激光器

激光器的应用非常广泛,涵盖了多个领域。以下是一些主要的激光器应用: 医疗领域:激光器在医疗行业中有着重要应用,比如用于激光手术(如眼科手术)、皮肤治疗、牙科治疗、肿瘤治疗等。 工业制造:在…

(菜鸟自学)初学脚本编程

(菜鸟自学)初学脚本编程 Bash脚本概述编写一个测试在线主机的脚本程序 Python脚本概述编写一个与Netcat功能类似的脚本程序 C语言脚本概述编写C语言脚本程序(Hello World) Bash脚本概述 Bash脚本是一种基于Bash(Bourn…

图片批量建码怎么用?每张图片快速生成二维码

当我们需要给每个人分别下发对应的个人证件类图片信息,比如制作工牌、荣誉展示或者负责人信息展示时,现在都开始使用二维码的方法来展示员工信息。那么如何快速将每个人员的信息图片分别制作成二维码图片呢,最简单的方法就是使用图片批量建码…

vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持

文章目录 一、v-model是什么二、什么是语法糖三、v-model常见的用法1、对于输入框(input):2、对于复选框(checkbox):3、对于选择框(select):4、对于组件(comp…

群发邮件效果追踪:掌握数据,优化营销策略

我们在邮件群发结束后,如果想要了解到这次群发活动的效果怎么样,就需要通过一些数据。比如说邮件达到率、打开率、跳出率、退订率等。这些信息可以将收件人的行为数据化,让我们可以更清晰地对活动进行深入分析让我们及时地找出问题和优点&…

C语言数据结构——顺序表

(图片由AI生成) 0.前言 在程序设计的世界里,数据结构是非常重要的基础概念。本文将专注于C语言中的一种基本数据结构——顺序表。我们将从数据结构的基本概念讲起,逐步深入到顺序表的内部结构、分类,最后通过一个实…

网络安全:守护数字世界的盾牌

在当今数字化的时代,网络已经渗透到我们生活的方方面面。从社交媒体到在线银行,从在线购物到工作文件传输,网络几乎无处不在。然而,随着网络的普及,网络安全问题也日益凸显。那么,如何确保我们的数字资产安…

Vue2的双向数据绑定

Vue2的双向数据绑定 Observer:观察者,这里的主要工作是递归地监听对象上的所有属性,在属性值改变的时候,触发相应的watcher。 Watcher:订阅者,当监听的数据值修改时,执行响应的回调函数&#x…

KubeSphere 核心实战之二【在kubesphere平台上部署redis】(实操篇 2/4)

文章目录 1、登录kubesphere平台2、redis部署分析3、redis容器启动代码4、kubesphere平台部署redis4.1、创建redis配置集4.2、创建redis工作负载4.3、创建redis服务 5、测试连接redis 在kubesphere平台上部署redis应用都是基于redis镜像进行部署的,所以所有的部署操…

【Github搭建网站】零基础零成本搭建个人Web网站~

Github网站:https://github.com/ 这是我个人搭建的网站:https://xf2001.github.io/xf/ 大家可以搭建完后发评论区看看!!! 搭建教程:https://www.bilibili.com/video/BV1xc41147Vb/?spm_id_from333.999.0.0…

2023.12 电子学会青少年软件编程(Python) 等级考试试卷(三级)

2023年12月 电子学会青少年软件编程(Python) 等级考试试卷(三级) 分数: 100 题数: 38 一、单选题(共 25 题, 共 50 分) 1. 一个非零的二进制正整数, 在其末尾添加两个“0” &#xf…

【排序算法】六、快速排序(C/C++)

「前言」文章内容是排序算法之快速排序的讲解。(所有文章已经分类好,放心食用) 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 快速排序1.1 原理1.2 Hoare版本(单趟)1.3 快速排序完整代码&…

70.Redis缓存优化实践(基于分类树场景)

文章目录 前言第一次优化第二次优化第三次优化第四次优化第五次优化 前言 分类树查询功能,在各个业务系统中可以说随处可见,特别是在电商系统中。 而在实际工作中,这样一个分类树查询,我们都不断的改进了好几次。这是为什么呢&…

Lite AD的安装

1、Lite AD的安装及配置 Lite AD流程: (1)创建一个新的Windows 10,安装tools,再安装ITA组件(安装Lite AD会自动安装VAG/VLB) (2)创建一个新的Windows 10,安…