【Linux】文件系统/inode/软硬链接

news2024/11/27 0:41:56

目录

一.了解磁盘

1.磁盘的概念

2.磁盘的物理结构

3.磁盘的逻辑结构

4.磁盘区域的划分

二.linux文件系统

三.inode

四.软硬链接

1.软链接

2.硬链接


一.了解磁盘

前言: 一般情况下, 系统中存在大量的未被打开的文件, 这些文件全部存储在磁盘上, 也简称磁盘级文件

在linux下, 一切皆文件, 而每个文件, 都拥有内容与属性, 这些全部存储在磁盘上

那么文件系统, 如何对磁盘文件进行管理, 磁盘是什么样子, 磁盘如何划分区域, 什么是格式化, 先来简单了解一下磁盘

1.磁盘的概念

永久性存储介质, 但是缺点就是非常慢, 因为磁盘属于外设, 是计算机中唯一的机械设备, 所以当我们加载一个进程或者打开一个文件都需要将其先加载到内存中, 尽可能的提速来与cpu的速度匹配

2.磁盘的物理结构

磁盘主要由盘片, 磁头...组成

盘面: 数据都存储在盘面上, 准确来说是存储在一个又一个扇区中

磁头: 由磁头高速左右摆动与盘片转动来进行读写

磁道: 一个盘面上的一圈就是一个磁道

柱面: 多个盘面的磁道在三维空间上组成一个柱面

扇区: 每个磁道被有规律的划分为n个扇区, 每一个扇区是512字节

OS通过CHS寻址来把数据写到指定扇区

CHS寻址:

1.在哪一个面上(对应的就是哪一个磁头)

2.在哪一个磁道(柱面)上

3.在哪一个扇区上

3.磁盘的逻辑结构

磁盘的物理结构是柱形的, 而在操作系统看来(也就是逻辑结构), 磁盘是线性的, 将其抽象为一个线性结构

将数据存储到磁盘转变为将数据存储到数组

找到磁盘的特定扇区的位置转变为找到数组特定的位置

对磁盘的管理就是对数组的管理

OS通过LBA寻址找到逻辑结构中的位置, 再将LBA寻址结果通过CHS寻址找到物理结构中的位置, 来进行读写

4.磁盘区域的划分

将上述逻辑结构划分为n个块, 所以对磁盘的管理, 就划分为了对一个小分区的管理

详细的说:

1.将一个总的线性结构划分为n个区域

2.再将每个划分好的区域, 分为n个小分区

3.每个小分区划分为n个块组

4.最终, OS对这些块组进行管理

二.linux文件系统

块组抽象图

块组中各个模块的概念

1.Data blocks: 多个4KB(8个扇区(512字节))大小的集合, 用来存储文件内容

2.inode Table: 一个大小为128字节的空间, 保存对应文件的属性, 所有文件的inode的集合, 每个文件都有对应的inode, 每个inode都有自己的inode编号

3.Block BitMap: 标记Data blocks中哪些个block被占用, 哪些个没被占用

4.inode BitMap: 标记inode Table中哪些个inode被占用, 哪些个没被占用

5.GDT: 块组描述符, 描述块组大小以及块组中的各种信息各种资源占用情况

6:Super Block: 描述整个磁盘的信息, 因为怕意外情况而导致Super Block数据丢失, 大部分块组中有备份

磁盘格式化都做了啥

写入相关数据, 并且每一个块组都写入, 整个分区就被写入了文件系统信息, 也就是格式化

写入相关数据, 就是将Block BitMap与inode BitMap中的位全部置为0, 将所有数据无效化, 即标记为可占用

事实上, 在删除文件时, 也是这么做的, 将Block BitMap与inode BitMap对应的删除文件的为置为0

所谓删除只是将数据无效化, 下一次写入新的数据即可覆盖无效数据

那么数据如果在没有被覆盖的情况下, 是可以被恢复的, 因为本质上inode还存在, block还存在

三.inode

指令: ls -i 查看当前目录下的所有文件inode

在inode Table, 这是一个128字节的空间, 在这个空间中有大量的inode

每个inode对应有且仅有一个独属于自己的inode编号

inode中保存的是对应文件的属性

一般对一个文件而言, 一个文件对应一个inode, 对应一个inode编号

也会有多个文件名对应一个inode的情况, 但是本质上这多个文件名还是指的同一个文件

内核数据结构中的struct inode表现形式

struct inode
{
    //inode编号

    //...
    //文件的属性...
    //...
    
    //与当前文件占用的block的映射关联
    int blocks[15];
    //block[0] = 6;block[1] = 7;
    //如果文件很大,一定有解决方式
    //block块不够用的情况
    //block最后几个映射可以映射其他的block来解决
}

 

如果一台计算机此时不能再新建文件了, 通常情况有两大原因

1.文件系统的block不够了 

2.文件系统的inode不够了

四.软硬链接

前言: 目录是文件吗? 目录中存放的是什么

目录也是文件, 也有对应的inode

目录中存放的内容是目录中的文件与文件自己的inode的映射关系

这也就说明了, 为什么创建文件需要w权限, 因为创建一个文件, 需要向目录中写入文件名与inode编号的映射关系

这个数字代表当前inode与多少个文件名产生映射

inode是给系统看的, 文件名是给用户看的

所谓的删除文件, 本质上就是减这个数, 当这个数减为0时, 说明没有文件名与这个inode产生关联, 这时就可以删掉该文件了

删除文件指令

1.rm 文件名

2.unlink 文件名

1.软链接

linux软链接如同windows中的快捷方式, 软链接是一个单独的文件, 有属于自己的inode, 内容存储的是原文件的路径

创建软链接的指令:

ln -s file.txt soft.link 

或ln file.txt -s soft.link

意为: 创建一个file.txt的软链接并命名为soft.link

softMybin.link是mybin生成的软链接, 是mybin这个可执行文件的快捷方式 

2.硬链接

创建硬链接, 并不是真正的创建新的文件, 而是在指定目录下, 建立了文件名和指定inode的映射关系

创建硬链接指令

link file.txt hard.link

或ln file.txt hard.link

意为: 创建一个file.txt的硬链接并命名为hard.link

创建出硬链接hard.link与hard2.link, 此时发现这俩与file.txt的inode编号相同, 且inode与文件名的映射关系最终变为3, 也就是说, 此时有三个文件名与同一个inode产生关联, 简单粗暴的说, 此时这个文件便拥有了3个名字, 当我们删除任意一个的时候, 只会将映射关系的引用计数3减为2, 当减为0时, inode编号不与任何一个文件名关联的时候, 才会删掉文件

硬链接的用途

为什么新创建的目录是2, 而新创建的文件是1

因为, 进入dir2目录时, 会有一个隐藏文件.来表示当前文件, 这时dir2与.都指的是这个目录文件

当我们在目录中在创建一个目录时, 引用计数就会变为3, 因为目录中还存在一个隐藏文件..表示上一目录, 所以如果一个目录中存在一个目录的话, 引用计数就会变为3, 此时目录文件inode编号与目录名/./..产生关联, 当目录中存在多个目录时, 自然引用计数也会逐渐++

快速查看目录中存在的目录个数公式

设:

目录文件名与inode映射的引用计数 为x;

目录中目录的个数为n;

x = 目录名 + . + n*.. ---> x = 2 + n ---> n = x - 2

即: 目录中目录的个数 = 目录文件名与inode映射的引用计数 - 2

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

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

相关文章

功能测试进阶自动化测试,一个女测试工的坎坷之路

绝大多数测试工程师都是从功能测试做起的,工作忙忙碌碌,每天在各种业务需求学习和点点中度过,过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展,从业人员能力的整体进步,软件测试需要具备的能力要…

从ADAS到高阶自动驾驶,车联网芯片如何赋能产业升级?

2022年,L2及L2ADAS前装搭载率正在快速提升,中国智能网联汽车产业进入了由ADAS加速向高阶自动驾驶迈进的关键期。 根据《高工智能汽车研究院》数据显示,今年1-9月前装标配搭载L2级辅助驾驶搭载量为395.19万辆,同比增长69.53%&…

Java开发必备技能:RocketMQ

官方文档可见:https://github.com/hiwei-zhang/rocketmq/tree/develop/docs/cn RocketMQ集群架构 RocketMQ由以下这几个组件组成 NameServer : 提供轻量级的Broker路由服务。Broker:实际处理消息存储、转发等服务的核心组件。Producer:消息…

69. 利用 ALV 实现增删改查系列之一:让 ALV 报表进入可编辑状态

在 CSDN 和我的知识星球里有朋友向我提出同样的问题,询问如何在 ALV 里实现增删改查操作。 虽然需求只有一句话,但是这个需求背后涉及到的知识点不少,因此笔者会通过几篇文章的篇幅,来介绍这个需求的详细实现步骤。 本文先解决第一个障碍,如何让 ALV 报表进入可编辑状态?…

[ MySQL ] 使用 MySQL Workbentch 进行MySQL数据库备份 / 还原(Part 3:备份.sql文件方式)

本文主要讲解如何用 MySQL Workbentch 进行MySQL备份和恢复数据库(利用.sql文件的方式)。 关于MySQL数据库备份,本博客内主要相关文章有: [ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(Part 1:备份.…

Unity发布Android平台错误记录

Unity发布Android平台错误记录 (1)Cannot parse project property android.enableR8‘’ of type ‘class java.lang.String’ as boolean. Expected ‘true’ or ‘false’. 注释掉android.enableR8MINIFY_WITH_R_EIGHT打包就可以了 (2&…

电线电缆企业应用APS计划排产软件的效益

电线电缆行业是我国经济第二大的配套产业,仅次于汽车产业,年市场规模超万 亿,按产品可分为电力线缆、电气装备用线缆、通信线缆以及绕组线等。电线电缆用以传输电(磁)能,信息和实现电磁能转换的线材产品。广义的电线电缆亦简称为电…

基础算法系列之基础(二)[大数问题]

文章目录前言大数相加大数相减大数乘法除法总结前言 OK,继续预热哈,没办法还得补作业,要G了,明天看看有没有时间加更一篇。 那么今天的话还是来说一下这个精度的一些问题,也就是大数之类的一些问题啥的。这个当然咱们…

mysql优化

索引: 排好序的数据结构 从磁盘上拿一条记录要和磁盘做一次IO操作,,磁盘的IO性能不高 索引数据结构: 二叉树(binary search tree) : 单边增长的数据没有帮助红黑树(red black tree) : 二叉平衡树&#x…

YOLOv1-YOLOv7全系列解析汇总

导读 目标检测Yolo算法是非常经典且应用广泛的算法,而在Yolo中,又分成了输入端、网络推理、输出层,每个部分都可以延伸出很多的优化方式,本文主要从Yolov1~v7各个版本的Backbone,Neck,Head,Tri…

JSPM基于SSM的乐聘网人才招聘系统

开发工具(eclipse/idea/vscode等):idea 数据库(sqlite/mysql/sqlserver等):mysql 功能模块(请用文字描述,至少200字):主要功能模块 (核心功能完整,不局限于下面我想的功能,下面的功能可以改&…

LeetCode刷题总结文档

前言 本文的刷题顺序依照代码随想录进行,因此题目板块的划分也和代码随想录一致。每个版块我会按照以下内容进行组织: 该类型题目的特征时间复杂度值得一讲的相关题目知识 正文 数组 二分查找 特征:有序数组中找特定组合的快速查询方法…

如何查询域名是否备案,域名备案批量查询方法

所有备案的域名都是需要通过工信部审核,录入到系统才可正式使用,所以我们在工信部的网站查询域名是否由备案信息就可以辨别出此域名是否有备案了。但是,大多数站长少则几十个域名,几千几万域名也是有的,如果还是在工信…

kong网关使用记录

kong 是一个api网关,类似nginx的网关,一般用于api服务的管理 kong 可以从consul中通过dns获取服务路由,可以自动实现负载均衡 kong kong最新版没有了conteos的安装文档,现在用Ubuntu来安装kong 1 下载kong curl -Lo kong-enter…

ERROR: Failed building wheel for box2d-py 解决方法

当我们在一个全新的Python环境中构建一个AI/ML项目时,往往会在pip install -r requirements.txt阶段遇到这样一个错误: Building wheel for box2d-py (setup.py) ... error .... swig.exe -python -c -IBox2D -small -O -includeall -ignoremissing -w2…

Java中常见的注解

一、注解 二、三种JDK内置的基本注解 1、Override 表示该方法是重写的父类方法。 为什么要写Override? 其实方法前不写Override是ok的,并且仍然是重写了父类方法。However!如果方法前有Override注解,编译器就会去检查该方法是否真…

ToB SaaS公司如何低成本高效获客

今年SaaS行业有些冷,如何过冬成了热门话题。原来天天对外讲帮客户降本增效,现在自个儿降本增效。调整组织架构,精简人员,砍预算,大抵都要来一遍。隔三岔五听说某家公司裁员,某家公司工资减半。市场预算自然…

CSS基础总结(一)

文章目录 一、CSS概述 (1)简介 (2)语法规范 (3)代码风格 二、CSS基础选择器 (1)标签选择器 (2)类选择器 (3)多类名选择器 &am…

STM32F103xx随记

关于STM32F103xx单片机的一些零碎知识,随时整理下来,方便查阅。 STM32F103xx随记STM32 & STM8 命名STM32F103xx引脚定义表引脚信息芯片手册地址大佬那里抄来的图STM32F103xxADC笔记STM32 & STM8 命名 STM32F103xx引脚定义表 今天在给新的模块添…

直播弹幕系统(二)- 整合RabbitMQ进行消息广播和异步处理

直播弹幕系统(二)- 整合RabbitMQ进行消息广播和异步处理前言一. Socket服务整合RabbitMQ二. 弹幕服务创建2.1 创建一个公共maven项目2.2 弹幕服务项目创建2.2.1 创建队列和广播型交换机2.2.2 生产者发送最终弹幕数据2.2.3 消费者监听原始弹幕数据2.3 Soc…