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.mzph.cn/news/636485.shtml

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

相关文章

Linux中的共享内存

定义: 共享内存允许两个或者多个进程共享物理内存的同一块区域(通常被称为段)。由于一个共享内存段会称为一个进程用户空间的一部分,因此这种 IPC 机制无需内核介入。所有需要做的就是让一个进程将数 据复制进共享内存中&#xff…

acwing讲解篇之94. 递归实现排列型枚举

文章目录 题目描述题解思路题解代码 题目描述 题解思路 定义递归深度deep,数字使用情况used,选择的数字顺序path 进行递归 终止条件为递归深度达到n层时,打印path,然后返回 深度加一 遍历未使用的数字,选择数字&am…

【rust/bevy】使用points构造ConvexMesh

目录 说在前面问题提出Rapier具体实现参考 说在前面 操作系统:win11rust版本:rustc 1.77.0-nightlybevy版本:0.12 问题提出 在three.js中,可以通过使用ConvexGeometry从给定的三维点集合生成凸包(Convex Hull) import { ConvexGeo…

【51单片机Keil+Proteus8.9】温室盆栽灌溉系统

实验五 实验名称 温室盆栽灌溉系统 软件设计: 1. 定义对应的引脚和端口的别名。 2. 编写延时函数,用于控制程序的执行速度。 3. 编写LCD控制函数,包括发送命令和发送数据两种操作。 4. 编写显示函数,用于在LCD上显示字符串…

无人机打击激光器

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

无忧秘书智脑:轻松驾驭“看图说话”功能,职场沟通更高效

在现代职场中,有效的沟通是提升工作效率的关键。然而,有时候我们面对一张图片或图表,却难以用言语准确表达其中的信息。这时,无忧秘书智脑的“看图说话”功能就派上了用场。这篇文章将手把手教你如何使用这一功能,以及…

【MATLAB源码-第119期】基于matlab的GMSK系统1bit差分解调误码率曲线仿真,输出各个节点的波形以及功率谱。

操作环境: MATLAB 2022a 1、算法描述 GMSK(高斯最小频移键控)是一种数字调制技术,广泛应用于移动通信,例如GSM网络。它是一种连续相位调频制式,通过改变载波的相位来传输数据。GMSK的关键特点是其频谱的…

使用 Zabbix + Grafana 搭建服务器监控系统

搭建 Linux 服务器监控的目的是自己有一台阿里云服务器内存是 2g 的 , 多开一些软件就会把内存和 CPU 使用率弄的很高,最终导致服务器卡死。 所以基于这个痛点,想知道当前的 CPU 和内存是多少。阿里云 ECS 控制台中也提供对服务器的监控 , 但是为了学习…

文字的baseLine算法

使用canvas的drawText方法时候,除了要传入画笔和text还需要传入一个x坐标和y坐标。这边的x和y坐标是Baseline的坐标。 public void drawText(NonNull String text, float x, float y, NonNull Paint paint) {super.drawText(text, x, y, paint);} top:是 baseLine到…

mysql B+树索引

数据库索引用于提高查询性能和数据访问效率。索引可以加速数据的查找和筛选,减少查询的时间复杂度。数据库索引有很多类型,这里不展开也不比较,只介绍最常见一种索引结构B树索引。mysql中InnoDB引擎默认使用的就是BTREE索引。 B树数据结构 …

ubuntu设置每天定时关机

ubuntu设置每天定时关机 终端输入命令: sudo crontab -e输入密码,回车。 我这里使用nano作为编辑器,你可以选择vim。 在末尾输入以下命令: 59 23 * * * sudo -u root shutdown now设置:每天23:59分,电脑…

GitHub图床TyporaPicGo相关配置

本文作者: slience_me 文章目录 GitHub图床&Typora&PicGo相关配置1. Github配置2. picGo配置3. Typora配置 GitHub图床&Typora&PicGo相关配置 关于Typora旧版的百度网盘下载路径 链接:https://pan.baidu.com/s/12mq-dMqWnRRoreGo4MTbKg?…

SiamRPN代码研读

SiamRPN 1、概述 SiamRPN 是一种用于视觉目标跟踪的算法。它结合了 Siamese 网络(孪生网络)和 Region Proposal Network(区域提议网络)的概念。这种算法的主要目的是在视频序列中准确地跟踪单个目标。下面是它的一些关键特点&…

linux内核源码编译

centos7环境 iso选择 https://mirrors.tuna.tsinghua.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 自带qemu,未实测是否可用 选择编译版本2.6 下载地址 遇到的编译错误解决 yum list | grep curses yum install ncurses-devel.x86_64 -y yum i…

python爬取图片(thumbURL和html文件标签分别爬取)

当查看源代码,发现网址在thumbURL之后时,用此代码: # 当查看源代码,发现网址在thumbURL之后时,用此代码:import requestsheaders {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121…

SQL Povit函数使用及实例

PIVOT函数常用于数据的行转列&#xff0c;同时也可以用此函数实现类似于Excel中的数据透视表的效果。 PIVOT函数 PIVOT 函数的基本语法如下&#xff1a; -- PIVOT 语法 SELECT <非透视的列>,[第一个透视的列] AS <列名称>,[第二个透视的列] AS <列名称>,.…

在iPhone或iPad和Windows PC之间复制和粘贴文本的几种方法,总有一种适合你

复制和粘贴文本一直是计算机和移动设备中最酷的省时功能之一。但这个过程的工作方式因你使用的设备和操作系统而异。 在iPhone(或iPad)和Mac之间复制和粘贴相对快速而简单。还有几个选项用于在Android设备和Windows之间移动内容。但是,如果你想在iPhone和Windows之间复制和…

旅游项目day07

目的地攻略展示 根据目的地和主题查询攻略 攻略条件查询 攻略排行分析 推荐排行榜&#xff1a;点赞数收藏数 取前十名 热门排行榜&#xff1a;评论数浏览数 取前十名 浏览数跟评论数差距过大&#xff0c;可设置不同权重&#xff0c;例如&#xff1a;将浏览数权重设置为0.3…

在微信公众号中加入ChatGPT聊天的方法

1 介绍 开源项目 "chatgpt-on-wechat" 支持通过微信公众号进行调用&#xff0c;这意味着用户可以在与公众号的交互中体验 ChatGPT。由于服务是部署在远端服务器上的&#xff0c;因此用户只需拥有一部手机&#xff0c;就可以在任何环境下与 ChatGPT 进行交流。例如&am…

linux下vsc的自动切换输入法解决方案

前言 个人使用的是Linux开发加上vsc编辑器&#xff0c;这两个东西一加中国开发者大致上就消失不见了&#xff0c;眼馋idea那个Smartinput很久了&#xff0c;赶上放假了&#xff0c;有空搞搞&#xff0c;如果后期有心情会做的通用点 安装 商店搜索SmartInputLinux安装 使用…