Linux:磁盘深潜:探索文件系统、连接之道与库的奥秘

news2024/12/27 10:52:36

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

文章目录

目录

文章目录

前言

一  磁盘

1.1  磁盘的物理结构

1.2  磁盘的存储结构 

 1.3  磁盘的逻辑结构

​编辑二  文件系统

2.1  简单了解 

2.2  inode 

2.3  文件描述符,进程与文件系统的关系 

​编辑2.4  补充小知识

三  软硬连接

3.1  软连接 

3.2  硬连接

​编辑四  动静态库

 4.1  静态库

 4.1.1  手动制作静态库

4.1.2  使用静态库 

​编辑 4.2  动态库

4.2.1  手动制作静态库 

4.2.2  使用动态库 

4.3  动静态库补充

总结


前言

本篇详细介绍了进一步介绍Linux,让使用者有更加深刻的认知,而不是仅仅停留在表面,更好的模拟,为了更好的使用. 文章可能出现错误,如有请在评论区指正,让我们一起交流,共同进步


一  磁盘

1.1  磁盘的物理结构

1.2  磁盘的存储结构 

 扇区:是磁盘存储数据的基本单位,512字节,块设备

 

 1.3  磁盘的逻辑结构

 

磁带上面可以存储数据,我们可以把磁带“拉直”,形成线性结构

 

真实过程: 

 

 

 

二  文件系统

2.1  简单了解 

 因此,我们可以将磁盘看作以块为单位的一维数组

对一个磁盘我们如何进行管理? 分区管理 !

 对于一个区如何进行管理呢? 分组管理!

因此我们只要管理好一个组,就相当于管理好磁盘

        Linux ext*文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被 划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设 定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的(包含和启动有关的信息,包括磁盘大小等等), 

●  Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相 同的结构组成。政府管理各区的例子

●  超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量, 未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个 文件系统结构就被破坏了——因此一个分区里超级块有好几份散布在不同组,内容完全一样,防止文件系统挂掉

●  GDT,Group Descriptor Table:块组描述符,描述块组属性信息,有兴趣的可以在了解一下

●  块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用

●  inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。

●  inode表:存放文件属性 如 文件大小,所有者,最近修改时间等

●  数据区:存放文件内容

PS:一般情况下,一个分区里,inode和block的个数是固定的 

2.2  inode 

上面提到 inode存放文件属性 如 文件大小,所有者,最近修改时间等

 

在我们的Linux中,也可以看到inode编号 

 inode与block建立一映射关系

这样我们可以得到一个结论:

操作系统想要访问文件内容时,需要通过inode去inode位图找是否存在,再通过inode中block数组找到数据块,再去block位图找是否被占用,最后访问到文件数据内容

准确理解文件系统:

 

 子问题1:inode和block是如何进行映射的

一级间接块索引可将扩展成可存1024块 变成4m 

 子问题2: 文件名和目录文件

 先提出一个结论,在操作系统中,都是通过inode来操作文件的

可是,我们在使用Linux的时候,都是通过文件名来访问文件的 

 这样我们了解目录文件是存储文件名和inode的映射关系的

可是,目录文件也是文件啊 !也有自己的inode和文件名,那它是哪来的?——上级目录

在我们目前看来,我们访问文件都要通过路径访问

 

 

Linux系统不需要保存路径,在磁盘没有路径的概念,只有inode,路径是用户层面的,系统都是通过inode查找文件

2.3  文件描述符,进程与文件系统的关系 

2.4  补充小知识

 

三  软硬连接

 ln是linux的一个重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。

3.1  软连接 

ln -s 文件名 要形成的软连接名 

 

我们发现,源文件和软连接文件拥有不同的inode

软连接有独立的inode,软连接内容上,保存的是目标文件的路径,类比于Windows的快捷方式 

 应用场景:快捷方式

3.2  硬连接

 ln 文件名 形成的硬连接文件名

 硬连接不是独立的文件,没有独立的inode,硬连接本质就是一组文件名和已经存在的文件的映射关系

 应用场景:文件备份 

四  动静态库

 4.1  静态库

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库

 4.1.1  手动制作静态库

ar -rc lib+库名+.a  .o文件

ar是gnu归档工具,rc表示(replace and create)——r是替换,c是创建,如果库中有对应的.o,则替换,没有则创建

一定前缀带上lib,后缀带上.a

4.1.2  使用静态库 

 4.2  动态库

●  动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。

●  一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码

●  在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking)

●  动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。操作系统采用虚 拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。

4.2.1  手动制作静态库 

生成动态库

shared: 表示生成共享库格式

fPIC:产生位置无关码(position independent code)

库名规则:libxxx.so 

4.2.2  使用动态库 

1、拷贝.so文件到系统共享库路径下, 一般指/usr/lib

2、更改LD_LIBRARY_PATH 

3、ldconfig 配置/etc/ld.so.conf.d/,ldconfig更新

2:

[root@localhost linux]# export LD_LIBRARY_PATH=.
 [root@localhost linux]# gcc main.c -lmymath
 [root@localhost linux]# ./a.out
 add(10, 20)=30
 sub(100, 20)=80

 3:

[root@localhost linux]# cat /etc/ld.so.conf.d/bit.conf 
/root/tools/linux
[root@localhost linux]# ldconfig

 

4.3  动静态库补充


总结

✨✨✨各位读友,本篇分享到内容是否更好的让你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!

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

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

相关文章

格姗知识圈博客网站开源了!

格姗知识圈博客 一个基于 Spring Boot、Spring Security、Vue3、Element Plus 的前后端分离的博客网站!本项目基本上是小格子一个人开发,由于工作和个人能力原因,部分技术都是边学习边开发,特别是前端(工作中是后端开…

模型选择拟合

1.通过多项式拟合交互探索概念 import math import numpy as np import torch from torch import nn from d2l import torch as d2l 2.使用三阶多项式来生成训练和测试数据的标签 max_degree 20 # 多项式的最大阶数 n_train, n_test 100, 100 # 训练和测试数据集大小 true…

SQL Server 当前日期及其未来三天的日期

当前日期及其未来三天的日期,并分别以 YYYY-MM-DD 和 yyyyMMdd 的格式展示 1、当前日期及其未来三天的日期,以 YYYY-MM-DD的格式展示 WITH CurrentDate AS (SELECT GETDATE() AS 当前日期 ) -- 使用 CONVERT 函数 SELECTCONVERT(VARCHAR(10), 当前日期,…

【论文笔记】MLSLT: Towards Multilingual Sign Language Translation

🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 基本信息 标题: MLSLT: Towards Multiling…

springboot医疗物品采购系统-计算机设计毕业源码10210

摘 要 本文基于Spring Boot框架,设计并实现了一个医疗物品采购系统。该系统旨在解决医疗物品采购中的管理和信息化问题,提供便捷的服务和支持。通过系统的设计与实现,实现了医疗物品的供应商家管理、物品类型管理、物品仓库管理、采购计划管…

小渡Ai论文写作:文献综述黑科技LitMaps30s找到所有文献

✨Litmaps 究竟是什么呢? Litmaps 是一款极为强大的文献搜索与追踪工具! 它不但能够助力你找到相关的研究文献,还能够依据你提供的文献生成一张学术地图,清晰地展现文献之间的引用链以及研究发展趋势。 恰似一张璀璨的星空图&a…

Linux中安装配置SQLite3,并实现C语言与SQLite3的交互。

前言 SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。本次实验介绍在Linux上实现C语言和SQLite3的交互,利用C语言编写相关语句,连接数据库、操作数…

python实战(三)——文本向量化/文本表示

一、概念 文本向量化是自然语言处理领域的重要环节,也是现在大语言模型开发重要基础。计算机程序无法理解文字信息(实际上非数值类型的信息都无法理解),因此我们需要将文字信息转换成计算机程序可理解的数值类型。通俗来说就是我们…

Python 精品学习资料收藏下载,Python 字符串处理备忘单

重点在这: (请移步图中作者处,获取高清大图下载链接) Python 中的字符串(String)是一种用于表示文本的数据类型。字符串是不可变的,这意味着一旦创建,你不能改变字符串中的字符&am…

【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-基础知识铺垫-遇到问题(1) 】

【学习AI-相关路程-mnist手写数字分类-python-硬件:jetson orin NX-自我学习AI-基础知识铺垫-遇到问题(1) 】 1、前言2、先行了解(1)学习基础知识-了解jetson orin nx 设备(2)学习python&AI…

ClickHouse在百度MEG数据中台的落地和优化

导读 百度MEG上一代大数据产品存在平台分散、质量不均和易用性差等问题,导致开发效率低下、学习成本高,业务需求响应迟缓。为了解决这些问题,百度MEG内部开发了图灵3.0生态系统,包括Turing Data Engine(TDE)计算引擎、Turing Dat…

从0到1,搭建vue3项目

一 Vite创建Vue3项目 1.1.创建Vue3项目 1.1.1.运行创建项目命令 # 使用 npm npm create vitelatest 1.1.2、填写项目名称 1.1.3、选择前端框架 1.1.4、选择语法类型 1.1.5、按提示运行代码 1.1.6浏览器问 localhost:5173 预览 1.2项目结构 1.2.1vite.config.ts 1.2.2 pac…

基于线性回归(Linear Regression)的房屋价格预测

基于线性回归(Linear Regression)的房屋价格预测 一元线性回归加载数据假设函数损失函数(代价函数)梯度下降函数完整代码 多变量线性回归加载数据集特征缩放假设函数损失函数梯度下降函数算法步骤完整代码 线性回归是统计学中的一…

【二轮征稿启动】第三届环境工程与可持续能源国际会议持续收录优质稿件

第三届环境工程与与可持续能源国际会议(EESE 2024)由中南林业科技大学主办,湖南农业大学协办,将于2024年12月20日-22日在湖南长沙召开。 大会邀请到国家杰出青年科学基金获得者、华中科技大学能源与动力工程学院冯光教授&#xf…

R实验——logistic回归、LDA、QDAKNN

数据集介绍: mpg,miles per gallon即油耗,这个数据集来自卡内基梅隆大学维护的StatLib库。1983年美国统计协会博览会使用了该数据集。这个数据集是对StatLib库中提供的数据集稍加修改的版本。根据Ross Quinlan(1993)在预测属性“mpg”中的使…

计算机网络原理总结C-网络层

网络层 网络层提供的两种服务网际协议IP 虚拟互连网络IP地址子网掩码(无分类编址CIDR)IP地址和MAC地址IP数据报格式(路由)转发分组的流程 因特网的路由选择协议(动态路由协议) 网际控制报文协议ICMPIP多播…

认识CSS语法

CSS(网页美容) 重点:选择器、盒子模型、浮动、定位、动画,伸缩布局 Css的作用: 美化网页:CSS控制标签的样式 网页布局:CSS控制标签的位置 概念:层叠样式表(级联样式表…

UE5 第一人称示例代码阅读0 UEnhancedInputComponent

UEnhancedInputComponent使用流程 我的总结示例分析firstthenand thenfinally&代码关于键盘输入XYZ 我的总结 这个东西是一个对输入进行控制的系统,看了一下第一人称例子里,算是看明白了,但是感觉这东西使用起来有点绕,特此梳…

布隆过滤器:极简存储,高效检索

引言 在海量数据的存储与检索中,如何在保持快速检索的同时,降低内存占用是个巨大的挑战。有没有一种既能快速检索又能节省内存的方案?布隆过滤器(Bloom Filter)就是这样一种数据结构。 布隆过滤器的基本原理 如果我…

数据库、数据仓库、数据湖和数据中台有什么区别

很多企业在面对数据存储和管理时不知道如何选择合适的方式,数据库、数据仓库、数据湖和数据中台,这些方式都是什么?有什么样的区别?企业根据其业务类型该选择哪一种?本文就针对这些问题,来探讨下这些方式都…