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

【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是一样的。
在这里插入图片描述

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

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

相关文章

专业的软件第三方检测机构如何做性能测试?收费标准是多少?

随着软件信息技术的飞速发展,人们对于软件产品越来越依赖,从而用户对软件产品的稳定性和质量问题愈发看重。软件系统性能的好坏将严重影响该软件的质量和软件开发者的利益,为了更好的保障软件产品质量,软件企业会将性能测试交由软…

python 爬虫之urllib 库的相关模块的介绍以及应用

文章目录 urllib.request 模块打开 URL:发送 HTTP 请求:处理响应: 应用如何读取并显示网页内容提交网页参数使用HTTP 代理访问页面 urllib.request 模块 在 Python 中,urllib.request 模块是用于处理 URL 请求的标准库模块之一。…

vscode删除后重装还有原来的配置问题,彻底删除vscode,删除vscode安装过的插件和缓存

VSCode卸载后进行重新安装,发现新安装的还有原来的一些配置,卸载的不彻底,有时候也容易出问题,可按照如下方法卸载干净: 1.进入控制面板卸载VSCode,也可以在VSCode的安装目录下用程序自带的卸载程序 2.这…

灯光相机已就位!Cinerama LAND 销售活动开启序幕!

你准备好参加 The Sandbox 元宇宙中的重磅活动了吗?Cinerama LAND 拍卖即将来临,这是你踏入电影梦想世界的好机会。准备好构建你自己的沉浸式电影宇宙吧!绝对不容错过! 简要概括 🍿活动开始日期:11 月 9 日…

如何在Jupyter Lab中安装不同的Kernel

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

Django视图层()

视图层 django视图层:Django项目下的views.py文件,它的内部是一系列的函数或者是类,用来处理客户端的请求后处理并返回相应的数据 三板斧 HttpResponse # 返回字符串 render # 返回html页面,并且在返回浏览器之前还可以给html文件…

原生应用与hybrid app开发的流程区别

Hybrid App(混合 App)已经成为大家接触最为广泛的 App 形式,不管是我们用到的微信、支付宝还是淘宝、京东等大大小小的应用都非常热衷于Hybrid App 带来的研发效率提升和灵活性。 但我们正式进入到 hybrid App 的讨论前,有必要先…

自然语言处理(NLP)-spacy简介以及安装指南(语言库zh_core_web_sm)

spacy 简介 spacy 是 Python 自然语言处理软件包,可以对自然语言文本做词性分析、命名实体识别、依赖关系刻画,以及词嵌入向量的计算和可视化等。 1.安装 spacy 使用 “pip install spacy" 报错, 或者安装完 spacy,无法正…

springboot-error

Invalid bound statement (not found): com.example.demo.mapper.UserMapper.findAll 一直报错,找不到相应的mapper文件。 排除以下原因之后,还是不对: https://blog.csdn.net/xxpxxpoo8/article/details/127548543 最后发现是因为我的mapp…

【Transformer从零开始代码实现 pytoch版】(六)模型基本测试运行

模型基本测试及运行 (1)构建数据生成器 def data_generator(V, batch, num_batch):""" 用于随机生成copy任务的数据:param V: 随机生成数字的最大值1:param batch: 每次输送给模型更新一次参数的数据量:param num_batch: 输送多少次完成…

第四天课程 分布式搜索引擎1

分布式搜索引擎01 – elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: …

第十九章总结: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…

nginx-静态资源实践(压缩配置,常见静态资源配置)

Nginx 实战搭建一个静态资源web服务器 第一个阶段访问单个文件 listen 80; #监听的端口 server_name localhost; #服务名称 #配置路径映射 location /geotools/ {alias geotools/; #将geotools/ 和/geotools/路径一一对应起来 }目录关系如下: nginx下面建一个g…

软考系统分析师知识点集锦一:企业信息化战略与实施

一、信息化战略体系(★★★★★) 1、信息资源规划ISP 信息资源规划是信息化建设的基础工程,是指对企业生产经营活动所需要的信息,对产生、获取、处理、存储、传输和利用等方面进行全面的规划。 IRP强调将需求分析与系统建模紧密结合起来,需…

酷柚易汛ERP - 其他入库单操作指南

1、应用场景 处理其他非采购类型的入库单据,比如赠品、获赔商品、以货抵债、借入、接受捐赠等不参与采购管理的入库类业务。 2、主要操作 2.1 新增其他入库单 打开【仓库】-【其他入库单】,选择商品后,根据存货核算方法自动计算出单位成本…

栈的实现---超详细

栈的实现 文章目录 栈的实现一、栈的模型二、栈的代码实现以及测试用例①栈的初始化②入栈③出栈④弹出栈顶⑤判断栈空间是否为空⑥计算栈空间长度⑦销毁栈⑧测试用例 一、栈的模型 首先栈有两个概念 1.数据结构里的栈。2.语言/操作系统中的栈(内存空间),可能会在递…

JUC工具包介绍

目录 1. 引言 2. 介绍JUC工具包 2.1. JUC工具包的概述和作用 2.2. 什么是JUC工具包? 2.2.1. JUC工具包与传统线程编程的区别和优势 3. 线程池(Executor) 3.1. 线程池的概念和优势 3.1.1. ThreadPoolExecutor类的介绍和使用示例 3.1.…

Docker安装Octoprint 3D打印控制软件

Octoprint简介 Octoprint是一个运行在Linux系统上的开源套件,可以为普通的3D打印机添加强大的外围管理功能。 web管理界面远程操控摄像头实时监控视频录制、延时摄影在线切片图形化的温度曲线显示手机监控操作免SD卡和U盘通过插件和USB/GPIO接口实现更多功能 Oct…

第三天课程 RabbitMQ

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应&am…

分布式锁介绍

为什么需要分布式锁 在单机部署的系统中,使用线程锁来解决高并发的问题,多线程访问共享变量的问题达到数据一致性,如使用synchornized、ReentrantLock等。 但是在后端集群部署的系统中,程序在不同的JVM虚拟机中运行,且…