【Linux系统编程十七】:(基础IO4)--文件系统(inode与软硬链接)

news2024/11/23 20:11:49

【Linux系统编程十六】:文件系统(inode与软硬链接)

  • 一.磁盘硬件
  • 二.文件系统(inode)
  • 三.软硬链接

一.磁盘硬件

Linux下的文件在磁盘中存储,文件的内容和属性是分开存储的!
文件的内容存储在数据块。
文件的属性存储在inode里。

我们首先需要先了解一下磁盘这个硬件的结构
在这里插入图片描述

磁盘的物理结构可以抽象成一个基于扇区数组的逻辑结构:
按着一定的算法,就可以按照LBA的方式访问磁盘的任意位置
在这里插入图片描述

因为这个扇区数组太大了,不好进行管理,所以我们首先对这个数组进行分区,划分成多个区域,只要能管理一个分区里的扇区,那么其他分区也就可以管理好。

但是每个分区还是比较大,所以我们又将每个分区分成若干个小块。block group想管理好磁盘,先管理好这些组块,管理好组块,就可以管理好分区,管理好分区就可以管理好磁盘。
每个组块由下面的几部分构成:
在这里插入图片描述

二.文件系统(inode)

每个块组都是由这6部分构成的,这部分就是文件系统。
Data blocks里存储的是文件的内容,文件的内容是以块的形式存储的。
inode里存储的是文件的属性,一个文件有唯一的inode。inode里还存储着一个块数组,这个块数组就是存储文件内容的块,所以只要找到该文件的inode,就可以根据该inode里的块数组找到该文件的内容。

Block Bitmap是干嘛的呢?它利用比特位的位置和块号映射起来,这样就可以表示这个块号是否被用。

inode Bitmap是干嘛的呢?它也是利用比特位的位和inode编号映射起来,那么比特位的内容就可以表示该inode是否是有效的。

在这里插入图片描述
在这里插入图片描述
其他部分的理解如图所示:
在这里插入图片描述
所以我们对于一个文件的增删查改,都是基于这个文件的inode,然后修改这个文件对应的inode bitmap 和 block bitmap里的内容,而不是真正的修改这个文件的内容。
但是存在一个问题,我们是怎么找到这个文件的?
我们原来的理解就是查找文件名字就可以查找到文件,现在理解文件系统,了解到,每个文件都有唯一的indoe编号。是根据inode的编号找到这个文件的。
但是文件的名字并不在inode里面,文件的名字并不属于文件的属性。
那文件的名字和文件的inode之间有什么联系呢?
在这里插入图片描述
目录也是文件,它有自己的inode,那么目录的数据块里存放的是什么呢?
目录的数据块里存放的是当前目录下所有文件的:文件名和inode的映射关系。

所以文件的文件名和inode之间存在着映射关系,这层关系存储在当前文件的目录的数据块里。
所以查找一个文件,必须要带有路径。这样目录将文件的文件名和inode映射起来。
所以查找一个文件,首先会先根据这个文件的indoe找到目录的数据块,就找到了文件的名字和inode映射关系。就可以找到文件了。

三.软硬链接

软硬链接是什么呢?
软连接是一个独立的文件,具有唯一的inode,也具有独立的数据块,而它的数据块里存放的是指向链接文件的路径。
就像window下的快捷方式,那些快捷方式并不是真正的程序,而只是一个文件标识。但是这个文件的数据块里存放的是该程序的存放路径。所以点击快捷方式,就可以执行程序。
在这里插入图片描述

硬链接不是独立的文件,因为它没有独立的inode,也就是硬链接形成的文件与链接指向的文件的inode一样。本质上就是在特定目录的数据块下新增,文件名和指向文件的inode的映射关系。多个文件名可以同时映射一个inode。
在一个目录文件中,有默认的两个隐藏文件,一个是.一个是…
.表示当前目录,…表示上一级目录。
那…是如何找到上上一级目录的呢?就是因为使用硬链接,…的inode和上一级目录的inode是一样的。.的inode和当前目录的inode是一样的。
在这里插入图片描述

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

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

相关文章

github 私人仓库clone的问题

github 私人仓库clone的问题 公共仓库直接克隆就可以,私人仓库需要权限验证,要先申请token 1、登录到github,点击setting 打开的页面最底下,有一个developer setting 这里申请到token之后,注意要保存起来&#xff…

【3】Spring Boot 3 集成mybatis-plus+druid+mysql

目录 【3】Spring Boot 3 集成组件:Druid Mybatis Plus Mysql集成方案1. Hikari jdbc mysql 集成方案增加依赖添加配置Spring Testng 测试用例 2. Druid Mybatis Plus Mysql集成方案2.1 配置Druid添加依赖配置启动Spring Boot Web StarterSpring Testng测试用…

VS项目属性变量

VS项目属性变量 $(SolutionDir) 获取解决方案的路径 $(Platform) 平台名字 → x86 / x64 $(ProjectName) 工程名字 $(Configuration) 当前的项目模式 → Debug / Release

第十九章总结:Java绘图

19.1:Java绘图类 19.2:绘制图形 package nineteentn; import java.awt.*; import javax.swing.*;public class DrawCircle extends JFrame {private final int OVAL_WIDTH 80; // 圆形的宽private final int OVAL_HEIGHT 80; // 圆形的高public DrawC…

接口测试和功能测试有什么区别

本文主要分为两个部分: 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分&#xff1…

JavaScript中的事件冒泡、事件捕获、事件委托

DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。 Dom标准事件流的触发的先后顺序为:先捕获再冒泡。即当触发dom事件时,会先进行事件捕获,捕获到事件源之后通过事件传播进行…

应届裁员,天胡开局——谈谈我的前端一年经历

应届裁员,天胡开局——谈谈我的前端一年经历 许久没有更新了,最近一个月都在忙,没错,正如题目所说,裁员然后找工作… 这周刚重新上班,工作第二天,感慨良多,记录些什么吧。 去年十…

AWS实战(一)-创建S3 存储桶

1)登录AWS账号,选择服务—>存储—>S3。 2)查看存储桶列表 3)点击"创建存储桶"创建bucket。 4)设置跨域 点击编辑,修改跨域设置即可。

基于SSM+Vue的健身房管理系统

基于SSMVue的健身房管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringMyBatisSpringMVC工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 课程信息 健身器材 管理员界面 用户界面 摘要 健身房管理系统是一种利用现…

Day40 Advanced Docking System使用方法

1.ads简介 Qt自带的铆接部件是QDockWidget,也被称为浮动窗口部件。QDockWidget可以用来创建可停靠的面板,它能够与QMainWindow、QDialog或任何具有centralWidget的QMainWindow派生类进行连接。QDockWidget提供了一个框架,允许用户将内容面板放…

Duplicate keys detected: ‘0‘. This may cause an update error

Duplicate keys detected: ‘0’. This may cause an update error.当遇到该节点内容更新时,会因为重复的key导致无法更新。 该错误,是因为同级节点下存在两个由0开始的key,当遇到该节点内容更新时,会因为重复的key导致无法更新。…

AD9371 AGC

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…

【springmvc框架一文搞定】

SpringMVC框架 1. 搭建springmvc测试项目1.1 创建maven项目1.2 导入依赖pom.xml1.3 将springmvc容器加载到tomcat中1.4 启动tomcat插件1.5 访问路径: 2. 剖析启动过程2.1 启动服务器初始化过程2.2 访问路径执行过程 3.spring-springmvc bean的管理3.1 因为功能不同&…

信号发生器为什么输出信号和配置参数对不上?

1.问题: 今天在调试时遇到信号发生器输出信号与我实际输入的参数不符的问题。 我原本打算输出一个中心点是2.5V然后上下偏移1.5V的信号。刚操作信号发生器的时候,调节到正弦波输出,参数部分,必须要输入High,Low电平。这个很不方…

苍穹外卖项目笔记(1)

前言 苍穹外卖项目笔记附代码,贴上 github 链接,持续更新中:GitHub - Echo0701/sky-take-out (不知道为啥发不了项目压缩包,那就下次再试试吧........) 1 软件开发整体介绍 1.1 软件开发流程 1.2 角色分…

NOIP 2017 宝藏----Java题解

目录 NOIP 2017 宝藏 题目描述 输入描述: 输出描述: 输入 输出 说明 输入 输出 说明 备注: 代码实现: NOIP 2017 宝藏 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO For…

基于入侵杂草算法优化概率神经网络PNN的分类预测 - 附代码

基于入侵杂草算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于入侵杂草算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于入侵杂草优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

No201.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…