【Linux系统】文件系统 软硬链接

news2024/10/6 8:29:17

文件被打开了?

这个文件已经被打开???什么意思,我们的Linux中存在非常多的文件,被打开的文件是少量的,我们要找到这个文件,先在磁盘中找到,就必须要通过这个文件的文件名和其路径来锁定其位置,那么问题来了,没有被打开的文件存放在哪里呢?磁盘中,磁盘文件,那我们得知道文件是如何存储的!!!

物理磁盘

我们知道文件=内容+属性,内容是数据,那属性应该也是数据啊,既然都是数据,那都是二进制数据,这些数据必然在磁盘上,那在磁盘上如何存储???

如下图是一个物理磁盘,在磁盘上会有正反两面,两面皆可存储数据,由于计算机只认识二进制数据,那存储的方式就必然是0,1序列。

 磁盘有正反两面,磁盘上有很多的磁道,通过主轴高速旋转带动磁盘高速旋转,磁头左右旋转来访问磁盘上的任意位置的数据。

 磁盘上有若干磁道组成柱面,1个磁道对应若干扇区,把一个扇区(512字节)作为磁盘读写的基本单位。

 如何找到一个指定的扇区呢?

我们是使用CHS定址法来实现的

  1. 找到指定的磁头(Header)
  2. 找到指定的磁道(柱面)  (Cylinder)
  3. 找到指定的扇区(Sector)

 那么文件其实就是在磁盘中占有几个扇区的问题!

 文件=内容+属性,Linux对文件需要管理,我们已经知道OS已经打开了的文件进行了管理,那对这未打开的文件如何管理呢,这些文件都是存在于磁盘中的!!!那么我们就要需要对磁盘进行管理,磁盘管理,那就得先描述,在组织!!!

为什么?OS直接使用CHS,耦合度太高,为了方便实现内核进行磁盘管理,把磁盘中的磁道的扇区进行抽象,组成一个线性结构,就可以利用数组下标来一一对应磁盘的扇区,一个扇区512字节,规定8个连续的扇区为一个块(4kb),所以文件就等于很多个扇区的数组下标。

那么我们想找到对应的扇区就可以去找对应的数组下标,我们又引入了块的概念,一个块有若干个扇区。

对于OS而言,未来我们读取数据可以以块为单位了!

 只要知道一个起始地址,和磁盘的总大小,有多少块,每个块的块号,如何转换到对应的CHS地址就全都知道了!!!这就是LBA  ---  逻辑区块地址(Logical Block Address,LBA)

我们知道自己的电脑上实际有几个磁盘吗?我们笔记本电脑实际用的是ssd固态盘,那么我们也知道我们的电脑上文件系统有c盘、d盘等等盘,那我们的硬件就分这么多盘???

实际不是这样,其实盘只有一个,只是进行了分区!!!

分区之后再分就是分组!!!

 我们这样只要管理好一个组就能管理好每个组,那管理好所有的组就能管理好一个分区,管理好一个分区那就能管理好所有的分区,那么文件管理就完成了!!!

那我们可以思考一下了,我们常常需要格式化某一个盘,c盘?d盘?

那格式化实质是在做什么工作呢???

现在有了答案!就是在每一个分区内部分组,然后写入文件系统的管理数据,这就是格式化过程的工作原理!!!

总结:格式化其实就是在磁盘中写入文件系统!!!

我们现在搭建出来了文件系统的一个框架,就该谈谈文件系统的细节部分了!!!

作为磁盘级的文件系统就要有其对应的各种信息,文件=内容+属性,都是存在哪里???

inode

 上图是Linux et2文件系统,磁盘文件系统图!!!

我们知道文件=内容+属性(也是数据),文件在磁盘存储,本质是文件的内容+文件的属性数据,而Linux特定,文件的内容和文件属性是分开存储的!!!

  • 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是否空闲可用。
  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • 数据区:存放文件内容
     

我们重点要谈一个inode,也就是i节点表(固定128字节)。

inode内部,不包含文件名!内核层面,每一个文件都要有inode number!我们通过inode号标识一个文件。每一个正常文件都要有一个inode属性集合!!

在Linux系统中我们要查看文件的inode编号需要使用命令 ls -li

 我们寻找文件的时候,都必须先得到文件的inode号,inode号是以分区为单位的(所以不同的分区内是可能有相同的inode号的)!datablock也是如此!

datablock数组能找到数据的内容在哪里,其中在找到对应位置的数据,如果该数组的大小无法保证去保存特大文件,这时该数组就会在大数据块中找到一些位置然后会继续从此位置映射出很多的数据的其他位置,保证了数据能够被完整的找到!!!

学习完inode等知识我们已经可以更深层次理解一些我们之前的知识了!!!

如何理解目录?

你凭什么直接拿到了inode编号,我们一直用的可都是文件名啊???

谈谈我们的目录文件,目录也是文件我们能理解,那是文件就得有文件=内容+属性,属性是啥我们已经学习了inode,明白了,那内容呢???

答案是:目录文件的内容其实是文件名和inode的映射关系!!!

如何理解一个目录不能建立同名文件?

因为我们需要用文件名+inode映射关系去唯一标识文件!!!

查找文件的顺序?文件名-->inode

如何理解目录的r权限?

本质是否运行我们读取文件的内容,也就是是否允许我们能够看到文件名与inode!!!

如何理解目录的w权限?

新建文件,最后一定要向当前所处的目录内容中写入,文件名和inode的映射关系!!!

如何理解一个文件的增删查改?

文件的增删查改不就是对文件名与其inode的映射关系进行增删查改吗!!!

还有一点我们平常执行文件操作时,往往不需要在文件名前面加入当前工作路径!!!

这是为什么?

找到指定的文件不就是找到文件所在的指定目录吗,打开这个文件就是根据这个文件名找到inode的映射关系往磁盘中查找。

 这个路径通过pwd怎么得到的???linux会缓存路径结构!!!

这是通过逆向路径解析,OS自己做的!!!

为什么我们在Linux中定位一个文件,在任何时候都要有路径的原因!!!

目录通常是谁提供的呢???你或者你的进程早就已经提供了!!!!

内核文件系统提取写入并组织好,然后我们提供的(我们的进程)!!!

我们知道inode在不同分区可能有相同的编号!

我们要想找到对应的文件就必须先找到对应的根目录啊!!!

那其实不用我们担心了,因为在分区时就被挂载到指定的目录下,一个文件在访问前,都是先有目录的!!!

软硬链接

软链接 执行命令ln -s 

 

硬链接 执行命令 ln

 用过了软硬链接,我们得到了一些特征:

  1. 软链接是一个独立的文件,因为有独立的inode number。
  2. 硬链接不是一个独立的文件,因为你没有独立的inode number,你用的是目标文件的inode。
  3. 属性中有一列硬链接数。

定位一个文件只有两种方式:

  1. 通过路径。
  2. 直接找到目标文件的inode。

最终都是通过inode找到!!!

 软链接的内容:目标文件对应的路径字符串(类似于Windows的快捷方式)

 硬链接是什么?

硬链接就是一个文件名和inode的映射关系,建立硬链接,就是在指定目录下,添加一个新的文件名和inode number的映射关系!

硬链接数,文件的磁盘级引用计数:意思是有多少个文件名字符串通过inode number指向我这个inode!

 什么是软硬链接,有什么用(为什么)?

软链接我们可以很清楚,类似Windows中的快捷方式!!!

那硬链接是怎么回事???

 硬链接一般有两个用处:

  1.  构建Linux路径结构,我们可以使用. ..来进行路径定位。
  2. 一般用硬链接做文件备份

 任何一个目录新建时,引用计数一定是2!!!

目录A内部,新建一个目录,会让A目录的引用计数自动加1,所以想知道一个目录中有几个目录:A引用计数-2即可求得!!!

Linux系统中不允许给目录建立硬链接,避免形成路径环绕!!!

. ..为何可以存在???

因为文件名是固定的,所有的系统指令在设定时几乎都能知道. ..是干什么的!!!

总结

打开的文件是存储在内核、内存中,而没有打开的文件则存放在磁盘中,与文件系统相关!!!

我们打开文件时有文本写入和二进制写入,计算机是只认识二进制的,所以文本写入这些都是语言层帮我们做的!!!

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

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

相关文章

一站式广告监测新体验,Xinstall助你广告投放更精准

在这个移动互联网飞速发展的时代,App推广与运营成为了每个开发者与广告主关注的焦点。然而,面对琳琅满目的广告平台和复杂的投放环境,如何精准评估广告效果、优化投放策略,成为了摆在面前的一道难题。今天,我们就来聊聊…

Linux中为什么etc是存放配置文件

在计算机系统中,/etc 是一个目录的名称,通常位于Unix和类Unix操作系统中,如Linux。这个目录用于存放系统配置文件。/etc 的命名来源于早期Unix系统中的 "etcetera"(拉丁语 "et cetera" 的缩写,意为…

RK3568驱动指南|第十六篇 SPI-第195章 实践:移植官方mcp2515驱动

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

Ollama基于Casaos一键部署,并接入Dify知识库,无需再为API付费

什么是Ollama Ollama是一个开源的大型语言模型服务工具,它帮助用户快速的运行大模型。浪浪云将它做为一键部署通过简单的安装,用户可以执行一条命令就可以运行开源大型语言模型,如 llama3 ,通以千问。极大地简化了部署和管理LLM的过程&#x…

vue通过后台返回的数字显示不同的文字内容,多个内容用、隔开

后台返回的数据 显示效果&#xff1a; html&#xff1a; <el-table-columnalign"center"label"使用过的小程序"width"124"v-if"activeTab 0"><template #default"scope"><divv-for"(item, index) in s…

Redis 典型应用——分布式锁

一、什么是分布式锁 在一个分布式的系统中&#xff0c;也会涉及到多个节点访问同一个公共资源的情况&#xff0c;此时就需要通过锁来做互斥控制&#xff0c;避免出现类似于 "线程安全" 的问题&#xff1b; 而 Java 中的 synchronized&#xff0c;只能在当前进程中生…

如何利用小程序容器技术搭建小程序生态?

小程序&#xff0c;作为现代移动互联网生态中的重要基础设施&#xff0c;正以其独特的创新性和便捷性展现出勃勃生机。截至2021年&#xff0c;全网小程序的数量已经突破了700万&#xff0c;其中微信小程序的开发者达到了300万之多。这一数字不仅代表了小程序在技术层面的成熟度…

PKUMOD同学又双叒获奖啦~

近期王选所数据管理研究室的同学们 凭借在各自领域的卓越表现 获得了多项荣誉和奖励 让我们共赏风采~ 期待他们在未来的科研道路上 取得更加辉煌的成就 庞悦 前沿交叉学科研究院2020级博士生 荣获2024年北京大学校长奖学金 庞悦&#xff0c;北京大学元培学院2016级本科生&…

1000W高清内窥镜定义掏耳勺新高度,西圣Find智能挖耳勺发布!

随着生活水平的提高&#xff0c;人们对个人健康越来越重视。特别是在日常生活中的一些小细节上&#xff0c;比如掏耳朵。传统的掏耳勺只能凭感觉和经验操作&#xff0c;在传统的耳勺与棉签下&#xff0c;很容易损伤耳道&#xff0c;甚至引发感染。为了解决这个问题&#xff0c;…

Word “当前页“ 与 “前一页“ (含部分内容)间有大半页空白,删除空白方法

鼠标光标选中需要向上移的句子&#xff0c;右键点击“段落”&#xff0c;然后在跳出的窗口中按照“换行和分页”中的红色方框内取消勾选后&#xff0c;点击确定即可。

今晚19点,《语音和心理健康》开讲!

《2024GAS声学大讲堂—音频产业创新技术公益讲座》面向医疗健康的声音与音乐技术系列专题讲座 第五讲 将于 今晚 19点 开讲&#xff0c;本次邀请了 湖南大学 教授 张子兴 演讲&#xff0c;讲座主题&#xff1a;《语音和心理健康》。此次直播方式为腾讯会议、小鹅通和中国电子音…

在window上搭建docker

1、打开Hyper-V安装 在地址栏输入控制面板&#xff0c;然后回车 勾选Hyper-V安装&#xff0c;如果没有找到Hyper-V&#xff0c;那么请走第2步 2、如果没有Hyper-V(可选&#xff09;第一步无法打开 家庭版本需要开启Hyper-V 创建一个文本文档&#xff0c;后缀名称为.bat.名称…

盘点2024年最新鼠标连点器推荐

电脑鼠标连点器是一种可以帮助用户自动化点击操作的小工具&#xff0c;广泛应用于游戏、自动化办公和测试等领域。选择一款合适的鼠标连点器能够提高工作和娱乐的效率&#xff0c;避免重复点击带来的疲劳。小编将为您介绍电脑鼠标连点器的产品特点、推荐几款实用的鼠标连点器并…

飞利浦的台灯值得入手吗?书客、松下多维度横评大分享!

随着生活品质的持续提升&#xff0c;人们对于健康的追求日益趋向精致与高端化。在这一潮流的推动下&#xff0c;护眼台灯以其卓越的护眼功效与便捷的操作体验&#xff0c;迅速在家电领域崭露头角&#xff0c;更成为了众多家庭书房中不可或缺的视力守护者。这些台灯以其精心设计…

中服云数字孪生平台引领工业物联仿真新纪元!

中服云数字孪生平台3.0是基于中服云物联网平台和数据中台打造的一款实时数据2D/3D集成展示监控平台。 旨在解决工业物联网数据的直观展示、实虚互动、仿真模拟、故障诊断、告警、预警、预测、实时观测、实时监控等问题。提供了数据采集、数据底座、监控逻辑、建模工具、展示互…

WSL——忘记root密码(Ubuntu)

1、问题描述 Windows下的WSL&#xff08;Ubuntu&#xff09;忘记了root密码&#xff0c;无法使用管理员权限。 2、解决方法 关闭 Ubuntu 窗口。打开 Windows 的 Powershell 或 cmd&#xff0c; 以 root 默认登陆 WSL。 wsl -u root 修改对应用户密码。 # xxx为要修改密码的用…

地铁车厢火灾3D模拟逃生演习减少了资源损耗和风险

在消防安全领域&#xff0c;为了更好地提升安全实训效果&#xff0c;我们在VR安全培训领域打造了多款消防安全VR模拟实训系统&#xff0c;不仅实现了与现实世界无异的交互操作&#xff0c;更在虚拟空间中超越了现实的限制&#xff0c;模拟出那些现实中难以搭建的复杂场景。 利用…

【学习笔记】网络设备(华为交换机)基础知识1——命令行入门知识

一、前期准备 提示&#xff1a;下面所有学习内容都是基于以下条件完成的 条件1.已经可以正常访问交换机的命令行接口 连接到命令行接口的方法 &#xff1a; ① &#xff1a;通过Console口本地访问 ② &#xff1a; 通过Telnet访问 ③ &#xff1a; 通过SSH访问 ④ &#xff1…

Web3 开发者入门手册:技能、工具和职业前景

原文&#xff1a;https://remote3.co/blog-post/how-to-become-a-web3-developer 作者&#xff1a;Paul Anderson 编译&#xff1a;TinTinLand Web3 是 2024 年科技领域最受瞩目的话题之一——Web3 令人激动的实用潜力可以跨越多个行业&#xff0c;早期采用者更有机会在未来…

嵌入式Linux系统编程 — 6.6 信号掩码

目录 1 信号掩码介绍 2 sigprocmas函数 3 sigsuspend函数阻塞等待信号 1 信号掩码介绍 信号掩码&#xff08;Signal Mask&#xff09;是操作系统中用于控制进程接收信号的一种机制。每个进程都有一个或多个信号掩码&#xff0c;它们定义了哪些信号在特定时间被阻塞&#xf…