Linux文件系统

文章目录

  • 引言
  • 磁盘
  • 文件系统
    • 每个分组(一个block group)中存的都是什么
    • 目录文件
  • 软链接:
    • 软链接应用场景
  • 硬链接
  • 硬链接应用场景
  • 硬链接和软链接的区别

引言

在此之前我们谈论重定向等问题都是指被打开的文件,现在我们来学习一下未被打开的文件,以及它们是怎么在系统中进行存储的。
未被打开的文件是存储在磁盘上的,可能现在也有一些是在固态硬盘上的(SSD),我们暂时不考虑,只谈论磁盘。

磁盘

在这里插入图片描述磁盘
磁面:磁面上有甚多凹凸不平的点,也就是二进制序列,用来存储数据
磁头:一个磁面对应一个磁头,磁头通过光电信号来读写磁盘上的数据(二进制序列)

在这里插入图片描述
磁面是在盘片上的,一个盘片上可能两面都是磁面,都用来存储数据,也可能只有一面用来存储数据,比如我们常见的光碟,就只有一面,我们这里以一个盘面上有两个磁面来进行学习

在这里插入图片描述
一个磁面上有很多的磁道,多个磁道之间是同心圆的关系,一个磁道又会被分为很多个扇区。
那么系统是怎么存取数据的呢?
先概括大逻辑,再详细阐述细节:
首先圆盘不停地转动,磁头也在不停地左右摆动,先确定在哪一个盘面上,也就是确定哪一个磁头(一个盘面对应一个磁头),然后再确定在哪一个磁道,最后确定在哪一个扇区。

文件系统

文件系统是怎么划分的
我们经常听说分区,那么什么是分区呢?举一个例子,我们的电脑一般被分为了C盘和D盘,其实这就是分区,分区是为了方便我们的管理。比如一个大小为500G的磁盘,如果我们直接去管理,一定是不容易的,因此系统就在理论上对把他们分成多个区域,可能大小不一,比如100G,150G,200G,50G,这样分完之后我们就容易去管理了,每个区域内的被称为文件系统,文件系统又会由多个部分组成,比如开机信息相关的Boot Block和多个
Block group(),每个Block group()组里又会被划分为多个区域。
在这里插入图片描述
在这里插入图片描述
上图就是磁盘文件系统图(内核内存映像肯定会有所不同),磁盘是典型的块设备,硬盘分区被划分为一个个的block。一个block的大小是在格式化的时候确定的,并且不可以被修改。

每个分组(一个block group)中存的都是什么

我们可能听说过在磁盘上文件和属性是分开存的,那么在磁盘上是怎么分开存,又是怎么让对应属性和对应文件联系起来的呢?因此我们需要详细介绍一下磁盘文件的系统图。
在这里插入图片描述
Block Group()会被细分为多个块,每个块存储的内容不同。
其中最重要的就是inode,一个文件对应一个inode,inode Table表中存储的是很多个inode结构体编号 struct inode{…},结构体里面存的是inode编号对应文件的属性,比如修改时间,所属组,权限,文件类型,引用计数,
int blocks[num]等。其中block[num]数组索引是分级的,比如当num等于15的时候,前12个存放的是一级索引,也就是存的数据块的编号里面放的就是数据,后面两个是二级索引,意思就是他存的数据块编号里面存的不是数据,仍然是多个数据块编号,最后一个放三级索引,就是二级索引里面存的也是多个数据块编号而不是数据,这样做的目的就是为了能够存储更多的数据,而不被写死导致最多只能存放15个块数据
Data blocks中会被划分成很多个大小相同的数据块,用来存放文件的数据,这个数据块的大小一般是512,1024,2048KB,一个文件可能对应一个或多个数据块
一个inode结构体一般占用的空间是128KB,在inode Table表里面会有上万个inode编号,我们怎么知道这个编号里面有没有被占用,用来存放文件属性,存放的是否合法呢?因此我们这里通过inode Bitmap位图让比特位的位置和inode编号映射,去表示对应编号存放的属性是否合法的。
相应的我们怎么知道数据块中的内容是否是有效地呢?
因此我们可以通过Block Bitmap位图让比特位的位置合块号映射起来,去表示对应的数据块是否被使用。
Group Descriptor Table(GDT):块组描述符,用来记录这个分组里面被使用和未被使用的数据块个数,以及有多少个inode编号等信息。
Super Block:超级块,相对于块组描述符,它里面包含的是整个分区的基本信息,而不是某一个分组中的基本信息,其中存储的信息包括这个分区被分成了多少个组,每个组的大小,每个组inode数量,每个组里面block数量,每个组的其实inode,文件系统的类型与名称等。

目录文件

在inode里面,保存的是文件属性,但是不包括文件名,因为如果inode里面包括文件名的话,我们在查找一个文件时,是先通过文件名找到inode还是通过inode找到文件名呢?这就会导致逻辑上不符合常理,那么操作系统是怎么找到我们对应的文件的呢?文件名又是保存在哪里的呢?
我们常说Linux下一切皆文件,自然目录也是文件
在这里插入图片描述
我们可以看到目录文件也是有属性的,又因为文件 = 内容 + 属性,那么目录文件里面有内容吗,有的话,存的是什么?
当查找一个文件时,我们本质上是通过该文件的inode进行查找的,而不是通过文件名,文件名被保存在目录下,目录文件的数据块中保存的是文件的文件名和对应文件的inode的映射关系。
因此我们要找一个文件,只要通过目录找到目录对应数据块中,该文件名对应的inode就可以了,那么现在又有一个问题,既然目录也是文件,那么它也有自己的inode,我们又怎么找到目录对应的inode呢?
我们在使用命令时或访问文件时,其实是在当前路径下执行的,因此我们只需要根据相对路径或者绝对路径,一路向上递归,最终就会找到根目录,根目录对应的文件名就是,它对应的inode在操作系统中是已知的,因此我们再通过跟目录的inode,找到它对应的数据块,再一路向下递归,找到当前文件的文件名对应的inode就可以了。因此也可以帮我们解释为什么我们在访问任何文件时都需要带路径
上面这样做比较耗时,因此Linux下会对常用路径通过dentry缓存进行存储,方便我们在访问文件时,不用再读盘了,提高效率。

软链接:

生成软链接文件的指令:
ln -s 源文件 生成的链接文件
选项-s,是指单词soft,软的
在这里插入图片描述

生成的软链接文件指向源文件,软链接文件保存的是源文件的路径,如果源文件被删除,那么当前链接文件就不可再被执行
在这里插入图片描述

软链接应用场景

软链接文件是通过inode引用,文件保存的源文件路径,来访问源文件,因此我们可以把一些不在当前路径下的文件,通过软链接来使用其它路径下的文件

硬链接

生成硬链接文件的指令:
ln 源文件 生成的硬链接文件

在这里插入图片描述
我们发现test.c文件,使用者前面的数字由1变成了2,这个数是硬链接数,通俗来讲就是现在有几个文件正在共用这个inode,当我们删除一个这个inode对应的文件,只有当硬链接数变为0时,这个文件才会被彻底删除。

硬链接应用场景

我们先来看一个现象:
在这里插入图片描述
这里有一个疑问,为什么我们新创建的test目录,它的硬链接数会是2?
在这里插入图片描述

我们知道. ./是指上级目录,./是指当前目录,同时我们也可以看到.文件的硬链接数是2,其实这个.文件是当前目录的硬链接文件,而. .文件是上级目录的硬链接文件
为什么不允许对目录使用硬链接呢?
因为它是通过文件名别名引用来引用源文件的,如果可以对它做硬链接,就会导致我们在查询当前文件inode时,向上递归的过程形成死循环,那么为什么隐藏文件.也是目录的软链接就不会形成死循环呢?因为操作系统在对文件名进行扫描时,不会对隐藏文件进行扫描

硬链接和软链接的区别

硬链接文件,与源文件inode相同,源文件被删除,该链接文件仍可以被执行
软链接文件,会生成新的inode,源文件被删除,该链接文件不可再被执行
硬链接是通过inode引用,引用另一个文件,软链接是通过文件名引用去引用另一个文件
在这里插入图片描述
软链接是一个独立的文件,有独立的inode,也有独立的数据块,它的数据块里面存的是指向的文件的路径。
建立硬链接本质上就是在特定目录的数据块中新增文件名和指向的文件的inode编号的映射关系。硬链接不是一个独立的文件,因为他没有自己的inode。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Proteus仿真】【51单片机】水质监测报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用按键、LED、蜂鸣器、LCD1602、PCF8591 ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能: 系统运行后&…

【GUI软件开发】小红书评论采集:自动采集1w多条,含二级评论!

文章目录 一、爬取目标1.1 效果截图1.2 演示视频1.3 软件说明 二、代码讲解2.1 爬虫采集模块2.2 软件界面模块2.3 日志模块 三、附完整源码及软件 一、爬取目标 您好!我是马哥python说 ,一名10年程序猿。 我用python开发了一个爬虫采集软件&#xff0c…

矩阵起源荣获第八届“创客中国”深圳市中小企业创新创业大赛三等奖

近日,2023年第八届“创客中国”深圳市中小企业创新创业大赛圆满落下帷幕,矩阵起源(深圳)信息科技有限公司凭借项目”MatrixOne 新一代超融合异构云原生数据库”荣获企业组三等奖。 本届大赛由深圳市工业和信息化局、深圳市中小企业…

如何用Python3+requests+unittest实现接口自动化测试实战

一、Requests介绍 首先让我们来看 Requests 官方的介绍: Requests is an elegant and simple HTTP library for Python, built for human beings. 翻译过来就是:Requests 是为人类写的一个优雅而简单的 Python HTTP 库。这个介绍很直白了,…

ElasticSearch文档分析

ElasticSearch文档分析 包含下面的过程: 将一块文本分成适合于倒排索引的独立的 词条将这些词条统一化为标准格式以提高它们的“可搜索性”,或者 recall 分析器执行上面的工作。分析器实际上是将三个功能封装到了一个包里: 字符过滤器 首先&a…

乐优商城(三)品牌管理

1. 品牌的新增 1.1 url 异步请求 点击品牌管理下的新增品牌,填写品牌信息后提交 2.打开浏览器控制台 由此可以得知: 请求方式:POST请求路径:/item/brand请求参数:{name: “测试品牌”, image: “”, cids: “76,32…

云端生成式 AI – 基于 Amazon EKS 的 Stable Diffusion 图像生成方案

Stable Diffusion 是当下生成式 AI 领域最受欢迎的开源多模态语言-图像模型,由于其易用的接口和良好的使用体验,受到了开源社区和广大设计行业从业者的追捧。Stable Diffusion 模型版本正在快速迭代,并带动了各行各业的生产力变革。目前市场上…

SAP 40策略测试及简介

相信很多很多的行业中都会用到40策略按库存生产,接下来我们将详细的测试40策略 1、首先准备好成品物料AB2。 2、创建BOM—cs01 3、创建主配方C202 ,如果是离散制造的话就是创建工艺路线CA01 4、创建生产版本C223 5、同样的AB2物料增加库存20KG。 6、创建计划独立需求MD…

微信智能机器人开发-基于E云管家,实现强大的个微管理

本文介绍了如何利用E云管家开发一个功能丰富的微信智能机器人。E云管家是一个开发协议,为微信机器人提供了强大的功能支持,包括关键字回复、自动通过好友和自动发朋友圈等特性。我们将通过一个简单的示例演示如何在E云管家下实现这些功能,并附…

EMERSON艾默生变频器维修M600/M701/M702

艾默生变频器维修常见系列: EV1000 系列:体积小,操作简便,适用于塑料机械、纺织机械、烟草机械、陶瓷机械、制药机械食品机械、印刷机械、包装机械、空调等专用设备配套。 EV2000 系列:功率范围广,功能更…

2020年五一杯数学建模B题基于系统性风险角度的基金资产配置策略分析解题全过程文档及程序

2020年五一杯数学建模 B题 基于系统性风险角度的基金资产配置策略分析 原题再现 近年来,随着改革开放程度的不断提高,我国经济运行中的各种风险逐渐暴露并集中传导和体现于金融领域。党的“十九大”报告提出“守住不发生系统性金融风险的底线”要求&am…

企业组建客服中心,需要考虑哪些问题?

随着市场竞争的加剧,企业越来越注重客户服务。因此,组建一个专业的客服中心已成为企业的一个重要战略举措。然而,这个任务不仅需要考虑技术和人员方面的问题,还需要考虑许多其他的因素。在本文中,我们将探讨企业在组建…

使用双动态令牌混合器学习全局和局部动态以进行视觉识别

TransXNet: Learning Both Global and Local Dynamics with a Dual Dynamic Token Mixer for Visual Recognition 1、问题与解决2、引言3、方法3.1 双动态令牌混合器(D- Mixer)3.2 IDConv(Input-dependent Depthwise Convolution)3.3 Overlapping Spatial Reduction Attention …

Java 身份证号校验,根据身份证号识别出生地

Java 身份证号校验: import org.apache.commons.lang.StringUtils;import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.Map;/*** desc 身份证工具类* auth llp* date 2022/7/7 16:13*/ public class IdCardNum…

神仙打架!腾讯云阿里云谁更棋高一着?

现在,腾讯云和阿里云都在打价格战,推出了一系列的优惠政策。其中,腾讯云服务器只需要88元,而阿里云服务器也只需要99元。这么便宜的价格,是不是让你心动不已呢? 腾讯云的88元服务器:https://te…

MySQL优化方案

Mysql优化 一、连接配置优化1.服务端配置2.客户端优化 二、架构优化1.使用缓存2.做读写分离(集群、主从复制)3.分库分表3.1.垂直分库3.2.垂直分表3.3.水平分表3.4.水平分库 4.消息队列削峰 三、优化器——SQL分析与优化1.慢查询优化1.1.配置慢查询日志1.…

第三方支付支付宝的信息安全分析

随着信息技术的进步,网络结算方式也在迅速发展。网上结算虽然便捷快速,但是如果没有保障的平台或者法律的支持,双方在没有约束的情况下,就会导致拖延、折扣或者拒付等许多经济事件的发生,由此第三方支付就随之产生。第…

嵌入式开发:ST-LINK V2.1仿真器,Type-C接口

标题ST-LINK V2.1仿真器,Type-C接口 之前做的版本虽然也是V2.1的,但使用的接口是USB的Micro形式,不支持正反插,也不兼容现在通用的手机数据线,出差的时候又要多带一条线。 现在终于把我的ST-LINK的接口改了一下 如下…

oracle11G在linux环境下的卸载操作

1.使用SQL*PLUS停止数据库 [oracleOracleTest oracle]$ sqlplus / as sysdba SQL> shutdown [immediate] SQL> exit2.停止Listener [oracleOracleTest oracle]$ lsnrctl stop3.停止HTTP服务 [rootOracleTest /root]# service httpd stop4.用su或者重新登录到root(如想…

『吴秋霖赠书活动 | 第四期』《Spring Boot微服务实战》

文章目录 1. 写在前面2. Spring Boot介绍3. Spring Boot实战4. Spring Boot主要内容概览 1. 写在前面 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【…
最新文章