什么?你还不懂文件系统和软硬链接?

devtools/2024/9/19 8:16:25/ 标签: 数据库, linux, 运维, 服务器, bash

文章目录

  • 序言
  • 认识磁盘
  • 磁盘在系统中的管理
    • 熟悉磁盘各个分区
  • 软硬链接
    • 软链接
    • 硬链接

序言

首先熟悉一下一些专有名词(了解即可,但必须有一个概念认识)
固态:SSD,笔记本中常装的,台式机中也可以装,常见的对应接口M.2和SATA接口
磁盘:90年代常用的数据存储设备,或是现在企业级数据存放的重要设备

认识磁盘

在这里插入图片描述
磁盘中的数据存储

按0,1的充放电来改变磁盘表面的0,1状态,修改数据

磁盘的物理存储
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

磁盘在系统中的管理

一个盘面有很多的同心磁道,这些磁道之间有很小的间距

一个磁道有很多的扇形扇区

磁盘的存储单元最小是512byte(主要)或者是4kb-----单只想改变1byte,但还是要加载512byte

在这里插入图片描述
在这里插入图片描述

熟悉磁盘各个分区

在这里插入图片描述

1-100000 第一面                       100001-200000第二面1-10000 第一磁道10001-20000 第二磁道......

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

手绘一个图来理解这个分区的具体情况

在这里插入图片描述
在这里插入图片描述
ls- li
会多一列数据
在这里插入图片描述

这是iNode编号,一般情况下,一个文件一个iNode编号,每个文件都有
在整个分区都有唯一性,不同的分区可能有相同的iNode
在Linux中识别文件根据iNode编号

在这里插入图片描述针对上述这个表进行详细的说明一下:
i节点表:

存放文件的文件属性 如:大小,所有者,最近修改时间
保存文件属性是通过inode保存的
struct inode
{

文件大小属性,等…
int blocks[N]
int ref_count;
}

这个一个inode大小固定为128字节 ,每一个inode的大小都是固定的
这个i节点表就是struct inode inode_table{N}

在每个分区之前都有一个struct inode_number
要找某个inode对应的组内的位置只要inode - inode_number就能找到

Data blocks
在这里插入图片描述

根据inode编号 -------> 找到inode区间 -----> 然后找到对应的组

inode Bitmap

位图:标识每一个bit的inode编号,标识文件是否被使用,内容(0/1)

block bitmap

bit位的位置表示block的编号,标识这个block是否被使用

group Descriptor tabl:

块组描述符:inode,一共有多少inode,有多少被使用,分组多大,
保存整个块的管理信息

每一个块都有这五个字段(group descriptor table,)

super block

简称sb,这个超级块不属于这一个分组,可能有100个块,7 8个块组跟
super有关,里面放的是整个块的主要信息
当super block出现错误就在相当于整个磁盘都会报废
所以一般这个super block会多副本的形式保存在其他块区内
这样等super出错后,系统就能自己进行拷贝完成修复

新建,删除:知道iNode,怎么删除?

根据inode编号找到对应的位置将这个位置的数据由1----->0
找到对应的block改位图就能删除
这个删除表示文件的block 不可用

误删了怎么办?

知道inode编号,找到对应的块组,将位图的将0改为1
找到对应的inode数组,对应对的data block从0->1改回来
linux中会将删除的文件的inode保存下来
不做恢复处理(要知道原理)

super block

简称sb,这个超级块不属于这一个分组,可能有100个块,7 8个块组跟
super有关,里面放的是整个块的主要信息

当super block出现错误就在相当于整个磁盘都会报废
所以一般这个super block会多副本的形式保存在其他块区内
这样等super出错后,系统就能自己进行拷贝完成修复

补充细节:

ib中,这个block[N]的大小是15
0-12对应的数据直接映射
13往后间接映射 保存其他数据块的信息
14三级映射 保存更多其他块的信息
类似于一颗多叉树
134kb+4kb/44kb+1000*4kb…
以这样的计算得到文件的大小,这样的文件的大小很大,足够满足用户使用

当文件很大时,一般是占据索引映射的文件都沾满了,会在上层进行必要的分开…
这样的文件都是ext2文件系统,其他的ext3,4都是在此基础上添加了日志等信息

从上层来看,系统一直使用inode,用户一直使用文件名称,如何对应起来?
将文件名转化为inode文件映射(OS处理).

在这里插入图片描述

目录文件的数据块内容存的是什么?

存的是自己目录内部保存的文件的文件名 和 inode与文件名称的映射关系,所以同一个目录下不允许存在同名文件(文件名称被当做key来使用,inode要不同,这俩相互监视)
这样根据inode就能找到对应的db的数据

so,我想在一个目录下想新建,修改,删除文件时,需要的是该目录的w权限!!!

linux中文件名不属于文件属性,文件名存在于目录文件中

怎么找到test.c文件

首先要找到这个文件,要找到目录,并打开目录文件,这样就得到了文件名和inode的映射关系
有了这个关系就能根据inode找到在哪个分区下,在哪个分区的分组里面,
再根据inode在inode table中找到存放该inode信息的那个表,那么文件的所有属性就能找到
然后根据用户输入的指令,例如ls,就会将信息转化为字符串输出到界面
又如:cat test.c
一直到找到inode编号,根据inode在data blocks中,将数据导入到内存,再输出出来
这个找,从根目录开始找

在这里插入图片描述

可以通过vim查看这个目录文件的信息(仅做演示)

在这里插入图片描述

每个文件在哪,都是从路径中找到,这些路径都被记录下来(这些由一个进程启动时,进程会记录路径)

当一次进程启动,这个进程的所有路径信息会被缓存在内存中

系统中存在struct dentry{},在启动时将路径各个记录在这里面,以一种多叉树的形式

在这里插入图片描述

一个磁盘被分区格式化之后,linux要中使用这个分区,要把这个分区进行挂载mount(运维相关,不多做介绍)

在这里插入图片描述

FILE* fp = fopen("./log.txt","w"); 

执行这条语句,操作系统干了什么事?

首先确定的是是进程打开这个文件,进程有自己的CWD
根据进程的cwd和传入的路径,定位到该路径在磁盘的哪一个分区,哪一个分组.
找到上级目录的inode和文件内容,映射关系找到.这个文件的inode找到,属性加载到内存中,
在内存中构建struct FILE结构体,这个结构体指向这个inode,文件属性就这样出现了;
然后根据inode将数据块预加载到文件中,缓冲区就有了,此时再读将数据从缓冲区拷贝到应用层,这样这条语句就执行完成

软硬链接

软硬链接:
linux:软链接
硬链接

软链接

软链接:(是独立文件,有自己的inode编号) 功能像快捷方式,内部内容是指向目标文件的内容

bash">ln -s log log.soft.link

在这里插入图片描述

软链接:windows的快捷方式
在这里插入图片描述
linux下的场景跟win差不多
在多层深入的文件中打开不方便,建立连接快速打开
原文件路径
在这里插入图片描述
建立连接
在这里插入图片描述

执行:

在这里插入图片描述

硬链接

硬链接: (不是独立文件)

bash">ln hello hello.skft.link(

在这里插入图片描述
硬链接本质就是在指定目录内部的一组映射关系: 文件名<->inode的映射关系
文件硬链接删除,可以使用rm,但是更推荐unlink
先使用rm删除看结果:

在这里插入图片描述
在删除这个hello之后,这个数字减小了

一个文件真正被删除是指文件名和inode没有映射关系,
在系统层次目标文件怎么知道文件名指向了我? inode内的引用计数,表明有几个文件映射关系(默认为1)
硬链接后进行++
文件名在目录里具有唯一性,文件名->"指针"

int ref_count;//引用计数

硬链接数,哪些文件指向对应的inode

普通文件硬链接数是1,文件系统的硬链接数为2,因为文件系统内的 . 文件也包括在内

在这里插入图片描述此时,在里面创建一个 dir文件
在这里插入图片描述

退回mydir的目录

在这里插入图片描述

发现这个硬链接数变成3,
在新建的dir里面他的. . 文件与mydir又有相同的inode编号,所以这个也是硬链接创建的文件,这也是…能回退上级的原因(应用场景)

在这里插入图片描述

区别:
软链接就是新文件
硬链接是文件名和inode的一组映射关系

关于本次就到此结束,喜欢请三连,任何问题可以评论留言~~


http://www.ppmy.cn/devtools/22205.html

相关文章

PotatoPie 4.0 实验教程(23) —— FPGA实现摄像头图像伽马(Gamma)变换

为什么要进行Gamma校正 图像的 gamma 校正是一种图像处理技术&#xff0c;用于调整图像的亮度和对比度&#xff0c;让显示设备显示的亮度和对比度更符合人眼的感知。Gamma 校正主要用于修正显示设备的非线性响应&#xff0c;以及在图像处理中进行色彩校正和图像增强。 以前&am…

Paddle OCR v4 微调训练文字识别SVTRNet模型实践

文字识别步骤参考&#xff1a;https://github.com/PaddlePaddle/PaddleOCR/blob/main/doc/doc_ch/recognition.md 微调步骤参考:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7.1/doc/doc_ch/finetune.md 训练必要性 原始模型标点符号和括号容易识别不到 数据…

IPD项目管理体系的建立以及项目管理软件如何助力IPD高效落地

市场竞争的加剧与客户需求的多样性&#xff0c;传统的研发管理模式已无法满足企业发展的进程&#xff0c;IPD作为一种先进的研发管理思想与方法已被更多的企业所采用&#xff0c;用以提高研发效率。建立一个高效的IPD流程管理体系对于企业的发展至关重要。 接下来&#xff0c;…

Shader实战(3):贴图像素化风格实现

话不多说&#xff0c;将以下shader赋给材质贴上贴图即可。 Shader "HQY/Shader2" //自己改名 {Properties{_Diffuse ("Diffuse", Color) (1,1,1,1)_MainTex ("MainTex", 2D) "white" {}_Specular("Specular", Color) (…

mac M2 配置item2 rzsz

背景 apple m 系列处理器安装的 homebrew 跟 intel 处理器略有不同&#xff0c;其中安装目录的区别&#xff1a; m 系列处理器安装目录为 /usr/local/bin/homebrew intel 处理器安装目录为 /opt/homebrew 问题1: 卡住 产生原因&#xff1a; m 系列使用 brew install lrzs…

直接用表征还是润色改写?LLM用于文生图prompt语义增强的两种范式

直接用表征还是润色改写&#xff1f;LLM用于文生图prompt语义增强的两种范式 导语 目前的文生图模型大多数都是使用 CLIP text encoder 作为 prompt 文本编码器。众所周知&#xff0c;由于训练数据是从网络上爬取的简单图文对&#xff0c;CLIP 只能理解简单语义&#xff0c;而…

electron退出时添加一个包含“不再提示”选项的确认对话框

在 Electron 中添加一个包含“不再提示”选项的确认对话框可以通过 checkboxLabel 和 checkboxChecked 属性在 dialog.showMessageBox 函数中实现。这两个属性分别用于设置复选框的标签和初始状态。您可以根据用户的选择来决定是否在将来再显示此对话框。 以下是一个更新的示例…

redis基于Stream类型实现消息队列,命令操作,术语概念,个人总结等

个人大白话总结 1 在Redis Stream中&#xff0c;即使消息被消费者确认&#xff08;acknowledged, ACK&#xff09;&#xff0c;消息也不会自动从Stream数据结构中删除。这与Kafka或RabbitMQ等传统消息队列系统的做法不同&#xff0c;在那些系统中&#xff0c;一旦消息被消费并…

buuctf——[CISCN2019 华北赛区 Day2 Web1]Hack World

buuctf——[CISCN2019 华北赛区 Day2 Web1]Hack World 1.根据提示&#xff0c;说明flag在表里 2.那就猜测存在sql注入&#xff0c;反手测试一波id1 3.尝试使用1--进行注释 4.直接丢进salmap里吧&#xff0c;不出意外多半是跑不出来 5.直接放入fuzz里进行测试 6.发现当我…

经典的目标检测算法有哪些?

一、经典的目标检测算法有哪些&#xff1f; 目标检测算法根据其处理流程可以分为两大类&#xff1a;One-Stage&#xff08;单阶段&#xff09;算法和Two-Stage&#xff08;两阶段&#xff09;算法。以下是一些经典的目标检测算法&#xff1a; 单阶段算法: YOLO (You Only Loo…

关于腾讯云ocr银行卡识别报错url_1.URL is not a constructor

使用腾讯云进行ocr银行卡识别报错url_1.URL is not a constructor的问题各位怎么解决的能否留言告知一二 在线代码调试可以&#xff0c;但是js使用报错url_1.URL is not a constructor export function ocr(dataUrl){//dataUrl已转换为base64// Depends on tencentcloud-sdk-n…

PINN物理信息网络 | 利用物理信息神经网络进行流体动力学建模

背景 物理信息神经网络(Physics-Informed Neural Networks,PINN)是一种结合了神经网络和物理方程的方法,用于建模和求解物理问题。传统的基于物理方程的数值方法在处理复杂的非线性偏微分方程时可能面临数值稳定性、高计算复杂度和网格依赖性等问题。而PINN作为一种数据驱…

安全运营之通行字管理

一、什么是通行字 安全管理所指的通行字指的是对用于身份验证的账号密码或口令的管理。在计算机系统、网络服务、数据库管理等领域&#xff0c;通行字&#xff08;或称账号口令、密码&#xff09;是用于验证用户身份的重要机制。通行字管理的核心目标是确保只有授权用户才能访…

idea的macOS Apple Silicon (dmg)版本和macOS (dmg)版本有什么区别

“macOS Apple Silicon (dmg)” 版本则是专门为使用 Apple Silicon 芯片的 Mac 设备而设计的版本。 区别通常在于目标硬件平台和优化程度&#xff1a; 目标硬件平台&#xff1a;macOS Apple Silicon 版本是专门为基于 Apple Silicon 芯片的 Mac 设备&#xff08;例如 M1、M1 P…

tfrecord文件介绍、读取、写入介绍

1、tfrecord文件格式介绍 tfrecord文件格式&#xff0c;是深度学习框架tensorflow专用的一种文件格式&#xff0c;其底层使用protobuf&#xff0c;TensorFlow(python)也提供了api用于读取和写入tfrecord&#xff0c;非常方便&#xff0c;而对于golang语言&#xff0c;目前没有成…

Eureka服务注册与发现

Eureka服务注册与发现 概念原理Eureka的基本架构Eureka包含两个组件&#xff1a;Eureka Server和Eureka Client 三大角色目前工程情况 构建步骤step1&#xff1a;EurekaServer服务注册中心Module的建立step2&#xff1a;将已有的微服务注册进eureka服务中心actuator与注册微服务…

人机交互系统文本分类 text classification环节源码(E-commerce)

我把pre-trained model 下载到了本地 效果如下&#xff08;到时候把代码中的sequence 和labels换成自己的text和分类就行了。&#xff09;&#xff1a; 源码见链接&#xff1a; https://download.csdn.net/download/qqqweiweiqq/89211553

blender Principled Hair BSDF

三种模式&#xff1a; Direct Coloring 直接指定所需的RGB颜色值着色器会尝试近似所需的吸收系数来模拟该颜色Melanin Concentration 使用更加物理化的方式定义头发/毛发颜色通过指定黑色素(Melanin)的浓度和黑红色素(Pheomelanin/Eumelanin)的比例来确定颜色更符合头发/毛发中…

面向表格数据的大模型推理

现实世界中存在大量未利用的先验知识和未标记数据。而在医疗等高价值领域&#xff0c;获取足够标记数据训练机器学习模型尤其困难&#xff0c;这限制了传统监督学习算法的应用。尽管深度学习方法在其他领域取得了显著进展&#xff0c;但在表格数据分类上仍未能超越传统的机器学…

vue 项目关于不同分辨率的电脑网页适配方案

流式布局&#xff1a;这是一种相对灵活的布局方式&#xff0c;页面的元素宽度使用相对宽度&#xff08;例如百分比&#xff09;来定义&#xff0c;而不是使用绝对宽度&#xff08;例如像素&#xff09;。这样&#xff0c;当浏览器窗口大小变化时&#xff0c;元素会自动调整大小…