文件系统

目录

1.认识磁盘

磁盘的物理结构

CHS定位法

磁盘的逻辑结构

2.认识文件系统

inode

分区和分组

磁盘上的文件系统

3.软硬链接

软链接

软链接的操作

创建软链接

查看软链接

删除软链接

软链接的特点

软链接的使用场景

硬链接

硬链接的操作

创建硬链接

查看硬链接

删除硬链接

硬链接的特点

硬链接的使用场景


1.认识磁盘

磁盘的物理结构

我们的计算机当中会存在许多的文件,有被打开的文件,也有没打开的文件,没打开的文件就是放在磁盘上存储的,磁盘的物理结构如下图所示:

  • 盘片:一个磁盘有多个盘片,一个盘片有上下两个盘面。
  • 磁头:一个盘面配有一个磁头,磁头会在盘面上方来回摆动读取盘面上的数据。
  • 主轴:多个盘片被主轴贯穿,绕主轴旋转。
  • 伺服系统:内部有各种控制电路和程序,控制磁盘的运动。

我们将磁盘的物理结构形象的表示成下面这幅图:

  • 磁道:盘面上的一圈就是一个磁道。
  • 扇区:磁道上的一小个扇装结构就是一个扇区,一个扇区的大小通常是512字节。

CHS定位法

磁盘上的磁头(Head)、磁道(Cylinder)、扇区(Sector)都有唯一的编号,那么我们就可以这样来定位磁盘上的一个特定扇区:

  • 首先确定使用哪一个磁头,通过这个磁头就能够找到一个固定的盘面。
  • 通过磁头的来回摆动,找到固定的一个磁道。
  • 盘片是绕轴旋转的,通过盘片的旋转,就能找到特定的扇区。

这种定位一个扇区的方法称为CHS定位法。扇区是磁盘进行IO的基本单位,文件又是在磁盘上存储的;那么,一个文件就是多个扇区所承载的数据了。

磁盘的逻辑结构

我们可以想象一下,把一个盘面按照磁道为单位进行展开,并且所有的磁道首尾相连,那么一个盘面不就相当于被展开成了一串 “磁带” 了吗?

我们可以把展开之后的盘面看成一个大数组,每个数组元素都是一个扇区。这个大数组就是磁盘的逻辑结构。

磁盘逻辑结构示意图:

对于操作系统来说,每次和磁盘进行IO的基本单位是4KB。 

2.认识文件系统

inode

文件是由文件的内容文件的属性共同组成的。文件内容的大小是不固定的,但是文件属性的大小是固定的,通常为128字节。而且,在Linux操作系统中,文件的内容和文件的属性是分开存储的,文件的属性存储在一个 struct inode 类型的结构体中,inode中通常记录着文件大小,所有者,最近修改时间等……

需要注意的是:inode中, 没有文件名,Linux系统中,标识一个文件用的不是文件名,而是inode编号,也正是inode中没有文件名,才能做到 struct inode 类型的对象大小固定。

分区和分组

我们计算机上的磁盘的存储空间是很大的,就现在而言,一般的计算机都有512GB的磁盘空间,那么操作系统要如何才能管理好着512GB的磁盘空间和磁盘上的文件呢?

操作系统对磁盘空间的管理其实是采用了分治思想,先把磁盘划分成多个区域,我们在Windows电脑上就可以很明显的看到有什么C盘、D盘…… 这其实就是操作系统对磁盘进行了分区;要管理好一个磁盘,就要管理好多个分区。那么操作系统是如何管理好一个分区的呢?同样采用了分治思想,操作系统先把一个分区分成多个组,这叫做分组,然后编写管理好一个分组的数据结构和算法,一个分组能够管理好,那么就能把管理管理一个分组的数据结构和算法拷贝给其他分组,这样就管理好了一个分区内的多个分组,也就意味着管理好了一个分区,既然能够管理好一个分区,那复用管理好着一个分区的数据结构和算法,就能管理好多个分区,管理好多个分区就意味着管理好了磁盘。

分区和分组示意图:

磁盘上的文件系统

每一个分组其实是 Block group 结构,多个 Block group 结构和头部的 BootBlock 结构 共同就构成了磁盘的文件系统,每一个 Block group 又都有相同的结构,分别是:

  • Date blocks:数据区,存放文件的内容。
  • Block Bitmap:块位图,Block Bitmap中记录着 Data blocks 中哪个数据块已经被占用,哪个数据块没有被占用;比特位的位置,表示块号,比特位的内容,表示对应的块是否被使用(1表示使用,0表示未使用)。
  • inode Table:i节点表,相当于一个 inode 数组。
  • inode Bitmap:inode位图,inode Bitmap中记录着 inode Table 中 inode 的使用情况;比特位的位置表示第几个inode,比特位的内容,表示inode是否被使用(1表示使用,0表示未使用)。
  • Super Block:超级块,存放文件系统本身的结构信息。
    记录的信息主要有:
    1.bolck 和 inode的总量。
    2.未使用的block和inode的数量。
    3.一个block和inode的大小。
    4.最近一次挂载的时间。
    5.最近一次写入数据的时间。
    6.最近一次检验磁盘的时间等其他文件系统的相关信息。
    Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。
  • Group Descriptor Table:块组描述,符描述块组属性信息。

3.软硬链接

软链接

在Windows操作系统中,我们都使用过快捷方式打开一个软件,在Linux操作系统中,软链接文件就类似于Windows中的快捷方式。

软链接的操作

创建软链接

我们可以使用 ln -s 目标文件或目录 软链接名称 命令创建一个软链接文件:

  • 从开头的文件类型为l,表明软链接文件是一个链接文件。
  • 并且文件名当中会通过 -> 告诉我们软链接文件链接的是哪一个文件。
查看软链接

我们还可以使用 ll -l -i 命令查看文件的 inode编号

  • 可以看到这两个文件的inode编号不同,表明一个文件的软连接确实是一个文件。
删除软链接

我们可以使用 rm 命令或者 unlink 命令删除一个软链接文件:

软链接的特点

  • 软链接是一个独立的文件,因为它有自己的inode编号。
  • 软连接会记录目标文件或目录的路径,相当于Windows中的快捷方式。
  • 可以为目录创建软链接。

软链接的使用场景

软链接中会记录目标文件or目录的路径,我们可以使用这一点来进行以下操作:

  • 简化路径:为长路径的文件或目录创建软链接,方便访问。
  • 版本管理:通过软链接指向不同版本的文件或目录,方便切换。

硬链接

硬链接是Linux操作系统中的一种文件链接方式。它与软链接不同,硬链接直接指向文件的 inode,而不是存储目标路径。硬链接更像是文件的 “别名”,多个硬链接共享同一个 inode 和 数据块。

硬链接的操作

创建硬链接

我们可以使用 ln 目标文件 软链接名称 为指定文件创建硬链接:

  • 开头的文件类型为 - ,表明硬链接是一个普通文件。
查看硬链接

我们可以使用 ll -l -i 命令 查看硬链接文件:

  • 开头的文件类型为 -,表明这是一个普通文件。
  • code.c 和 code_link.hard 的 inode 编号是一样的,说明code_link.hard只是code.c的一个别名
  • 可以看到 code.c 和 code_link.hard 文件的硬链接数都是2。
删除硬链接

我们可以使用 rm 命令 或者 unlink 命令删除一个硬链接文件:

  • 可以看到文件的硬链接数变成1了。
  • 硬链接数相当于一个文件的引用计数,当硬链接数大于1时,删除硬链接不会影响其他的硬链接or文件;只有当硬链接数为1的时候,删除硬链接才会释放文件数据。

硬链接的特点

  • 硬链接与目标文件共享同一个 inode,因此它们指向相同的物理数据。
  • 用户不能给目录建立硬链接,只能由系统给目录建立硬链接。

硬链接的使用场景

  • 文件备份:硬链接可以提供额外的访问路径,即使删除一个硬链接,文件数据依然存在。
  • 文件共享:多个用户可以通过硬链接共享同一个文件,而无需复制路径。

在Linux操作系统中,我们经常可以看到 ... 这两个目录,. 代表当前目录,.. 代表上一级目录,这是如何实现的呢?

Linux 系统当中目录本质上是一个特殊的文件它存储了文件名和对应的 inode 编号的映射关系,当我们创建一个目录的时候,文件系统会自动生成两个硬链接:

  • .指向当前目录的 inode。

  • ..指向父目录的 inode。

这样,就能够通过 cd . 命令 进入当前目录,cd ..命令进入上一级目录了。

注意:我们只是说用户不能给目录创建硬链接,但是系统是可以给目录创建硬链接的,这两个硬链接就是操作系统自己创建的。

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

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

相关文章

学习路之PHP --TP6异步执行功能 (无需安装任何框架)

学习路之PHP --异步执行功能 (无需安装任何框架) 简介一、工具类二、调用三、异步任务的操作四、效果: 简介 执行异步任务是一种很常见的需求,如批量发邮箱,短信等等执行耗时任务时,需要程序异步执行&…

一键部署DeepSeek

腾讯Cloud Studio提供DeepSeek一键部署功能,0行代码,秒级部署使用! 重点是每月免费提供10000分钟! 不用等待模型下载,创建即可使用。 内置 Ollama、DeepSeek-R1 1.5B、7B、8B、14B 及 32B 模型。 热门模板 AI模板 前…

(学习总结26)Linux工具:make/Makefile 自动化构建、Git 版本控制器 和 gdb/cgdb 调试器

Linux工具:make/Makefile 自动化构建、Git 版本控制器 和 gdb/cgdb 调试器 make/Makefile 自动化构建在 Linux 命令行中的命令 makeMakefile 的基本操作1. 编写与删文件基本操作2. 总是执行操作3. 执行操作时的依赖性4. 定义变量或命令操作与其它简单操作5. 多文件操…

Linux提权之docker提权(十三) 链接第八篇完整版

书接上回 实验环境一样的 第八篇 我们用ssh密钥登陆后 发现我们web1的权限 当我们拿到web1的权限时 我们无法提权(这里我用的继续十二的环境 大家也可以继续) 所以我们首先要提权(当然必须是一个完整的 tty shell 不会的 我们去看第二篇 当然我下边也给你表注明了) python3…

Docker启动ES容器打包本地镜像

文章目录 1、安装 Docker2、下载镜像3、查看已下载的镜像4、 保存和加载镜像5、.tar 文件与 Docker 镜像的关系6、如何从 .tar 文件加载 Docker 镜像7、为什么需要 .tar 文件?8、ES 8.x版本无法启动8.1 问题原因8.2 解决方案8.3 提交容器为新镜像 1、安装 Docker 如…

C#开发的Base64编码及解码完整源码及注意事项

在软件开发时,经常用Base64编码和解码功能。本文介绍一个简单易用的Base64 编码和解码工具,顾名思义,就是简单快捷地进行 Base64 代码的解码或编码操作。您的数据可以轻松地编码为 Base64 编码,也可以解码为可读的格式。传输数据时…

使用OpenCV实现帧间变化检测:基于轮廓的动态区域标注

在计算机视觉中,帧间差异检测(frame differencing)是一种常用的技术,用于检测视频流中的动态变化区域。这种方法尤其适用于监控、运动分析、目标追踪等场景。在这篇博客中,我们将通过分析一个基于OpenCV的简单帧间差异…

夜莺监控 - 边缘告警引擎架构详解

前言 夜莺类似 Grafana 可以接入多个数据源,查询数据源的数据做告警和展示。但是有些数据源所在的机房和中心机房之间网络链路不好,如果由 n9e 进程去周期性查询数据并判定告警,那在网络链路抖动或拥塞的时候,告警就不稳定了。所…

【QT 一 | 信号和槽】

Qt5基本模块 Qt Creator 中的快捷键 • 注释:ctrl / • 运⾏:ctrl R • 编译:ctrl B • 字体缩放:ctrl 鼠标滑轮 • 查找:ctrl F • 整行移动:ctrl shift ⬆/⬇ • 帮助⽂档:F1 • 自动…

Ubuntu本地使用AnythingLLM

1.介绍 AnythingLLM是一个全栈应用程序,由Mintplex Labs Inc.开发,旨在将任何文档、资源或内容片段转换为大语言模型(LLM)在聊天中可以利用的相关上下文。 2.在ubuntu本地安装 打开终端并运行: curl -fsSL https:/…

Rust学习总结之-枚举

枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同但是要表达的意思是一致的,枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举,男人和女人两种。下面我们来学习Rust中的枚举。 一:枚举定义 …

domain 网络安全 网络安全域

🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 文章目录 1、域的概述 1.1、工作组与域1.2、域的特点1.3、域的组成1.4、域的部署概述1.5、活动目录1.6、组策略GPO 2、域的部署实验 2.1、建立局域网&#xf…

面试基础---深入解析 AQS

深入解析 AQS:从源码到实践,剖析 ReentrantLock 和 Semaphore 的实现 引言 在 Java 并发编程中,AbstractQueuedSynchronizer(AQS)是一个核心框架,它为构建锁和其他同步器提供了基础支持。ReentrantLock 和…

Harmony开发笔记(未完成)

一、感想 作为一名拥有11年经验的Android开发者,我亲历了Android从高速发展到如今面临“僧多粥少”的过程。技术的世界瞬息万变,没有一种技术能够让人依赖一辈子。去年初,我自学了鸿蒙系统,并顺利通过了鸿蒙官方的初级和高级认。…

计算机视觉(opencv-python)入门之常见图像处理基本操作(待补充)

图像预处理是计算机视觉任务中的关键步骤,它通过对原始图像进行处理,以提高后续图像分析、特征提取和识别的准确性。 示例图片 目录 常见图像预处理方法 灰度化处理 法一 法二 说明 切片截取部分图像数据 cv2.cvtColor() 颜色空间转换 cv2.spli…

设计模式Python版 备忘录模式

文章目录 前言一、备忘录模式二、备忘录模式示例1三、备忘录模式示例2 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a…

Linux红帽:RHCSA认证知识讲解(三)Linux基础指令与Vim编辑器的使用

Linux红帽:RHCSA认证知识讲解(三)Linux基础指令与Vim编辑器的使用 前言一、Linux基础指令二、Linux 文件系统层次结构概念三、通过路径指定文件四、使用命令行工具管理文件五、Vim 的安装方式六、Vim 的操作模式七、红帽建议掌握的 Vim 键和命…

auto.js例子之WebView多页面浏览器

"ui";ui.layout(<vertical><horizontal id"webs" layout_weight"1"></horizontal><button id"one" text"第一个" /><button id"two" text"第二个" /><button id"…

跨平台公式兼容性大模型提示词模板(飞书 + CSDN + Microsoft Word)

飞书云文档 CSDN MD编辑器 Microsoft Word 跨平台公式兼容方案&#xff1a; 一、背景痛点与解决方案 在技术文档创作中&#xff0c;数学公式的跨平台渲染一直存在三大痛点&#xff1a; 飞书云文档&#xff1a;原生KaTeX渲染与导出功能存在语法限制微软Word&#xff1a;Math…