【Linux】文件系统

文章目录

  • 1. 理解文件系统
  • 2. inode
  • 3. 软硬链接
    • 3.1 硬链接
    • 3.2 软链接
    • 3.3 软硬链接的原理

在这里插入图片描述

1. 理解文件系统

我们使用 ls -l 的时候看到的除了看到文件名,还看到了文件元数据。

[root@localhost linux]# ls -l
总用量 12
-rwxr-xr-x. 1 root root 7438 "9月 13 14:56" a.out
-rw-r--r--. 1 root root  654 "9月 13 14:56" test.c

每行包含 7 列:

  • 模式
  • 硬链接数
  • 文件所有者
  • 大小
  • 最后修改时间
  • 文件名

ls -l 读取存储在磁盘上的文件信息,然后显示出来:

在这里插入图片描述

其实这个信息除了通过这种方式来读取,还有一个 stat 命令能够看到更多信息:

[tjq@hecs-227160 test_3_25]$ stat test1.c 
  File: ‘test1.c’
  Size: 365       	Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d	Inode: 1573701     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/     tjq)   Gid: ( 1000/     tjq)
Access: 2024-03-25 12:07:05.081994903 +0800
Modify: 2024-03-25 12:06:58.231864531 +0800
Change: 2024-03-25 12:06:58.231864531 +0800
 Birth: -

ACM:下面解释一下文件的三个时间:

  • Access 最后访问时间;
  • Modify 文件内容最后修改时间;
  • Change 属性最后修改时间。

2. inode

系统中,表示一个文件,用的不是文件名,而是 inode!

为了能解释清楚 inode 我们先简单了解一下文件系统:

在这里插入图片描述

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

  • Block Group:ext2 文件系统会根据分区的大小划分为数个 Block Group。而每个 Block Group 都有着相同的结构组成。
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:block 和 inode 的总量,未使用的 block 和 inode 的数量,一个 block 和 inode 的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。如果 Super Block 的信息被破坏,可以说整个文件系统结构就被破坏了。
  • GDT(Group Descriptor Table):块组描述符,描述块组属性信息。
  • 块位图(Block Bitmap):Block Bitmap 中记录着 Data Block 中哪个数据块已经被占用,哪个数据块没有被占用。
  • inode 位图(inode Bitmap):每个 bit 表示一个 inode 是否空闲可用。
  • i 节点表(inode Table):存放文件属性,如:文件大小、所有者、最近修改时间等。
  • 数据区(Date blocks):存放文件内容。

将属性和数据分开存放的想法看起来很简单,但实际上是如何工作的呢?我们通过 touch 一个新文件来看看如何工作。

[root@localhost linux]# touch abc
[root@localhost linux]# ls -i abc
263466 abc

为了说明问题,我们将上图简化:

在这里插入图片描述

创建一个新文件主要有以下 4 个操作:

  1. 存储属性
    内核先找到一个空闲的 inode(这里是 263466)。内核把文件记录到其中。

  2. 存储数据
    该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到 300,下一块复制到 500,以此类推。

  3. 记录分配情况
    文件内容按顺序 300,500,800 存放。内核在 inode 上的磁盘分布区记录了上述块列表。

  4. 添加文件名到目录
    新的文件名叫 abc。Linux 如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文件。文件名和 inode 之间的对应关系将文件名和文件内容及属性连接起来。

3. 软硬链接

3.1 硬链接

我们看到,真正找到磁盘上文件的并不是文件名,而是 inode。其实在 Linux 中可以让多个文件名对应于同一个 inode。

[root@localhost linux]# touch abc
[root@localhost linux]# ln abc def	// 创建了一个硬链接
[root@localhost linux]# ls -li
263466 -rw-rw-r-- 2 tjq tjq 0 Mar 26 16:14 abc
263466 -rw-rw-r-- 2 tjq tjq 0 Mar 26 16:14 def
  • abc 和 def 的链接状态完全相同,他们被称为指向文件的硬链接,内核记录了这个连接数,inode 263466 的硬链接数为 2。
  • 硬链接本质不是一个独立的文件,因为它的 inode 编号和目标文件相同;
  • 那么硬链接是什么呢?在创建硬链接时一定没有新建文件,它是一个新的文件名,和目标文件 inode 号的映射关系;
  • 我们在删除文件时干了两件事情:
    1. 在目录中将对应的记录删除;
    2. 将硬链接数 -1,如果为 0,则将对应的磁盘释放(引用计数)。
  • Linux 中,不允许用户给目录建立硬链接。

3.2 软链接

软链接是通过 inode 引用另外一个文件,在 shell 中的做法:

[root@localhost linux]# ln -s abc abc.s	// 创建了一个软链接
[root@localhost linux]# ls -li
263563 -rw-r--r--. 2 tjq tjq 0 Mar 26 16:14 abc
261678 lrwxrwxrwx. 1 tjq tjq 3 Mar 26 16:40 abc.s -> abc
263563 -rw-r--r--. 2 tjq tjq 0 Mar 26 16:14 def
  • 软链接本质是一个文件,有独立的 inode。

在这里插入图片描述

3.3 软硬链接的原理

  • 硬链接本质就是在指定的目录下,插入新的文件名和目标文件的映射关系,并让 inode 的引用计数++;
  • 软链接本质就是一个独立文件,软链接内容里面放的是:目标文件的路径!
  • 软链接类似 Windows 下的快捷方式。

END

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

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

相关文章

第十三届蓝桥杯省赛真题 Java 研究生 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 排列字母试题 B: 灭鼠先锋试题 C: 质因数个数试题 D: 数位排序试题 E: 蜂巢试题 F : \mathrm{F}: F: 爬树的甲壳虫试题 G: 重新排序试题 H \mathrm{H} H : 技能升级试题 I: 最优清零方案试题 J : \mathrm{J}: J: 推导部分和 发现宝藏 …

Mysql数据库函数【Mysql】

Mysql数据库函数【Mysql】 前言版权Mysql数据库函数常用函数排序与分页排序分页 单行函数2.数值函数2.1基本函数2.2角度与弧度2.3三角函数2.4指数与对数函数2.5进制间的转换 3.字符串函数4.日期和时间函数4.1获取日期、时间4.2日期与时间戳的转换4.3获取月份、星期、星期数、天…

在视频号上如何开店?个人玩家可以来做吗?过来人经验分享!

大家好,我是电商小布。 随着视频号小店这个项目的发展,整个体系越来越成熟,数据也在逐渐上升。 就去年来看,视频号带货的GMV值已经超过了3000亿,整个订单的数量增长了244%。 那么作为一个电商新手,想要在…

代码随想录算法训练营第三十天| 回溯算法总结

回溯算法核心:for循环横向遍历,递归纵向遍历,回溯不断调整结果集。对于startIndex(startIndex来控制for循环的起始位置)的使用: 如果是一个集合来求组合的话,就需要startIndex,例如…

计算机领域热门技术词汇

文章目录 计算机领域热门技术词汇1、机器学习 machine learning2、神经网络 neural network3、深度学习 deep learning4、自然语言处理 natural language processing5、计算机视觉 computer vision6、大数据 big data7、数据挖掘 data mining(DM)8、云计…

图像变换(python)

前言 这个Python没学过,写的是真的不方便,有很多问题还没解决,暂时不想写了,感兴趣的同学可以完善一下。设计的思路就是摆几个控件然后将对应的函数实现,这个Python的坐标放置以及控件的大小我没弄懂,算出…

Prometheus(六):Blackbox监控安装配置

目录 1 Blackbox Exporter安装配置1.1 Blackbox Exporter简介1.2 安装1、安装-使用源码包安装下载安装blackbox.yml文件配置快速启动文件 2、安装-使用docker 1.3 Prometheus配置1、http监控2、ping探测-ip3、https probe-DNS解析4、metrics配置5、TCP监控-探测端口 总结 1 Bla…

词曲创作只需几秒,「AI作曲家」Suno引爆音乐圈,第一手体验和攻略来了

ChatGPT狂飙160天,世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 有了 Suno 这个「作曲助手」,人人都可以创建自己想听的歌曲。 自…

【在FastAPI应用中嵌入Gradio界面的实现方法】如何在有一个Fastapi应用的基础上,新加一个gradio程序

官网教程:https://www.gradio.app/guides/sharing-your-app#mounting-within-another-fast-api-app 实践: import gradio as gr from fastapi import FastAPI from starlette.middleware.cors import CORSMiddlewareCUSTOM_PATH "/gradio"a…

Java八股文(SpringCloud)

Java八股文のSpringCloud SpringCloud SpringCloud 什么是Spring Cloud? Spring Cloud是一个用于构建分布式系统的开发工具箱,它基于Spring Boot框架,提供了一系列的组件和工具,用于帮助开发者快速搭建和管理分布式系统中的各种常…

javaSwing愤怒的小鸟游戏

一、简介 游戏名称是“愤怒的小鸟”,英文称为“AngryBird”。 “愤怒的小鸟”是著名游戏公司Rovio偶然间开发出来的益智游戏,从2009年12月上市到iOS。,讲述了鸟类和猪因为猪偷鸟蛋反生的一系列故事。游戏的类型版本是横向版本的水平视角&…

Warning logs 2024-03-23

给旧的笔记本安装ubuntu系统,并实现ssh远程连接 1、下载ubuntu系统 ubuntu下载链接 选择带桌面版本 2、准备U盘 3、使用UltraISO制作启动盘 使用UltraISO,打开刚才下载的ubuntu**.iso文件 4、进入BIOS,选择U盘启动 5、Warning 1 invali…

实时数仓项目《二》-利用chatgpt prompt完成基础维表的创建

系列文章: 实时数仓项目《一》-实时数仓架构-CSDN博客 目录 5. ods->dwd:维表关联方案及维表加工、导入hbase 5.1 维表关联方案 5.2 退维后结果去向 5.3 创建维表:基础业务库表数据同步到hbase 5.3.1 cdc 读取mysql数据,生成临时映射…

C/C++笔记-make编译时需要注意的问题(编译可执行程序时链接的so出现未定义的引用)

背景 环境是这样的,一个复杂的C项目,本来在A机器上能编译过去的,但放到B机器上编译可执行程序时链接的so出现未定义的引用。这就有点莫名奇妙了。 原因 我这边造成这个现象的原因有以下几点: ① 在makefile中所有的-I&#xff…

【LeetCode热题100】230. 二叉搜索树中第K小的元素(二叉树)

一.题目要求 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 二.题目难度 中等 三.输入样例 示例 1: 输入:root [3,1,4,null,2], k 1…

newOJ 1099: 输油管道问题

目录 题目链接: 思路: 代码: 题目链接: P1099 - 输油管道问题 - New Online Judge (ecustacm.cn) 思路: 因为主输油管道是由东向西的, 而每口油井要有一条输油管道和主输油管道连接(或南或北…

[DDD] ValueObject的一种设计落地及应用

目录 前言一、ValueObject二、设计2.1 接口2.2 单一值ValueObject2.3 单一字符串ValueObject 三、实现3.1 示例3.1.1 PhoneNumber3.1.2 SocialCreditCode 四、使用4.1 异常处理4.2 Json 反/序列化4.2.1 请求体4.2.2 HTTP接口4.2.3 用例 4.3 JPA/MyBatis4.3.1 Converter或TypeHa…

Harmony(鸿蒙)Stage模型综述

设计思想 ​Stage模型的设计,是为了提供给开发者一个更好的开发方式,更好的适用于多设备、分布式场景。 ​Stage模型的设计思想如下图所示。 ​Stage模型的设计基于如下三个出发点: 应用进程的有序管理 随着设备的内存越来越大&#xff0…

SM4加密是什么?SM4算法在国密HTTPS协议中的作用

SM4加密算法是一种分组密码标准,由国家密码管理局于2012年3月21日发布,相关标准为“GM/T 0002-2012《SM4分组密码算法》,与国际上广泛使用的AES等算法类似,SM4同算法样用于保护数据的机密性,确保信息在传输过程中不被未…

罗德与施瓦茨 RS®FSV3000 信号与频谱分析仪

R&SFSV3000 信号与频谱分析仪 罗德与施瓦茨 R&SFSV3000 信号与频谱分析仪一键即可测量,可以通过基于事件的操作捕获信号,并使用 SCPI 记录器轻松编写脚本程序,从而快速设置复杂测量。分析仪还具有出色的测量速度,可实…