Linux---文件系统

在基础IO中,我们所讲的都是对被打开文件的管理,但是不是所有的文件都是被打开的,对那些在磁盘中保存的没有被打开的文件,我们同样也需要管理,这个就像是快递站中等待被人取走的快递,我们需要将它们分门别类管理起来,方便别人来取,同理,我们也需要对磁盘上的文件进行管理,方便在访问文件时快速定位文件

所以文件的管理工作分为两个部分:1、打开的文件  2、没有被打开的文件。这就是文件系统需要做的工作,主要是关于文件存储(文件 = 内容 + 属性)

一、磁盘---硬件---物理存储结构

 二、磁盘存储的逻辑结构

上面的磁盘是硬件对文件的存储,但我们操作系统要管理硬件还需要先描述在组织。我们可以把磁盘的存储空间抽象成一个数组,具体如下

根据上面说的,我们知道对磁盘空间的管理可以转换成为对数组的管理,但是我们具体是如何管理的呢?在装系统的时候,我们将电脑的空间划分为C盘、D盘、E盘等进行使用,也就是说我们要将管理的空间变小,这样方便管理,所以我们做了下面的操作

通过上面这张图,我们大致了解了文件管理的工作细节,但是有一个问题,Linux识别和对文件的管理只通过inode编号,而我们用户从来不用inode编号,用的都是文件名, 所以两者必然具有映射关系,那么这对关系存放在哪里呢?

再次理解目录

  • 目录的内容是什么?目录内部直接保存文件的文件名和inode的映射关系。两者互为键值。所以一个目录中不能存在同名的文件
  • 在一个目录下,新建,删除,修改一个文件需要什么权限?w,因为需要改变文件名和inode的映射关系,即修改目录内容
  • 文件名不属于文件的属性,它只存放在目录中

如何找到一个文件?

我们只要找到该文件所在的目录,然后通过文件名得到与它对应的inode编号,然后就可以找到该文件,这很容易理解,但问题是我们如何找到文件所在的目录?我们知道目录也是文件,所以我们只要不断重复上诉操作,就能得到一个路径,从而找到我们需要的文件,那么这个路径我们如何得到呢?

pwd命令我们都用过,它能打印当前所在的路径,其实本质就是进程本身会记录程序所在的路径。而我们打开文件的操作其实都是交给进程去完成的,所以我们能找到文件。

当然对于那些高频访问的文件,文件的路径会被放在缓存里,方便以后找到文件,同时操作系统中有一个dentry结构体用来记录路径,有兴趣可以去自行了解一下

但是还有一个问题,前面说找到路径就能找到文件,而路径是由一个个目录文件组成,也就是一个个inode编号组成的,而inode编号只在分区内是唯一的,那么我们一开始如何判断这串路径属于哪个分区呢???

一个磁盘,被分区格式化之后,Linux中要使用这个分区,要把这个分区要进行挂载mount,简单来说就是将分区和目录建立映射关系,所以路径起始位置的目录就已经确定了文件在哪个分区。

三、软硬链接

由上图可知:软链接是一个独立的文件,硬链接不是,因为它没有独立的inode编号

  • 什么是软链接?它是一个独立的文件,有独立的inode,里面存放的是它链接的文件的路径,类似于windows中的桌面快捷方式,能在其他的目录下打开或执行链接文件
  • 什么是硬链接? 它不是一个独立的文件,它的inode和链接文件相同,这就说明两者对应同一个文件,也就是说它只是在指定目录内部对某一个inode(文件)建立的另一个映射关系,本质test2和test2.hard.link是同一个文件的不同名称。

为什么创建普通文件的硬链接数为1,创建目录的硬链接数却是2呢?

肯定是有两个不同的文件名指目录文件inode编号

如果我们在newfile中再创建一个文件呢? 

硬链接数变成了3,原因在于新建的文件里也存在newfile的硬链接

所以目录中的两个隐藏文件./..是当前目录和上级目录的硬链接,

同时,文件系统是否删除一个文件,就是看该文件的inode对应的文件名是否为0(即硬链接数),所以inode结构体中还有一个引用计数用来记录有多少个文件名指向该inode,如果引用计数变为0,就删除该文件

注意:不允许对目录建立硬链接

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

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

相关文章

赋值运算符

注意点:复合赋值运算符,会进行强制类型转换,不会报错 byte b 2; b 3; b; b 2; b为byte类型 b 3; 等价于b b 3;而b3的结果为int类型; 但在此过程中存在强制类型转换,b(byte)(b3);因而不会报错

电脑提示找不到opencl.dll无法继续执行的多种解决方法,实测有效

Opencl.dll文件的丢失可能会引发一系列系统运行与软件功能上的问题。作为一款重要的动态链接库文件,Opencl.dll在计算机中扮演着关键角色,它主要负责支持和实现OpenCL(开放运算语言)标准,该标准允许程序能够利用多种不…

C/C++ LeetCode:跳跃问题

个人主页:仍有未知等待探索-CSDN博客 专题分栏:算法_仍有未知等待探索的博客-CSDN博客 题目链接:45. 跳跃游戏 II - 力扣(LeetCode) 一、题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元…

eNSP学习——利用三层交换机实现VLAN间路由

目录 背景 实验内容 实验目的 实验步骤 实验拓扑 实验编址 实验步骤 基本配置 配置三层交换机实现VLAN间通信 背景 虽说单臂路由可以实现不同VLAN之间主机的通信,但该技术存在一些局限性,比如带宽、转发效率等。 三层交换机在原有二层交换机…

备忘录模式-C#实现

该实例基于WPF实现,直接上代码,下面为三层架构的代码。 目录 一 Model 二 View 三 ViewModel 一 Model using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 设计模式练…

阅读go语言工具源码系列之gopacket(谷歌出品)----第二集 layers-巧妙的抽象与无聊的协议包

上一集中我们讲到了wpcap.dll的go封装方法,对于linux系统下libpcap的go封装采用的是常用的cgo方式,想了解的可以看看pcap文件夹中的pcap_unix.go。 我们得到了wpcap.dll的go调用,就可以利用它来进行列举所有网络设备,例如以下代码…

韦东山嵌入式Liunx入门笔记一

文章目录 一、嵌入式Linux二、Ubuntu系统2-1 安装软件2-2 Linux文件(1) 文件架构(2)文件属性(3)文件命令(4) 解压、压缩文件(5) 网络命令 2-3 vi编辑器2-4 Ubuntu下包管理 三、配置网卡四、安装后续学习使用的软件4-1 MobaXterm4-2 FileZilla4-3 Source Insight4.04-4 下载BSP4…

vivado 定义和配置I/O端口、

定义和配置I/O端口 您可以使用Vivado IDE导入、创建和配置I/O端口,如中所述以下部分。 导入I/O端口 根据项目类型,可以使用以下方法导入I/O端口: •I/O规划项目:您可以将XDC和CSV文件导入空的I/O规划项目当您使用文件导入功能…

Java Lock源码解读

一,概述 多线程问题本质是多个线程共同访问了同一块内存,导致该内存状态不确定而产生了一系列问题。concurrent包中提供的Lock类本质是对线程对象进行监督、排队,调度,确保lock只能有一个线程或共享线程成功返回,否则…

幻兽帕鲁游戏服务器搭建by阿里云服务器4核16G和32G配置价格表

如何自建幻兽帕鲁服务器?基于阿里云服务器搭建幻兽帕鲁palworld服务器教程来了,一看就懂系列。本文是利用OOS中幻兽帕鲁扩展程序来一键部署幻兽帕鲁服务器,阿里云百科aliyunbaike.com分享官方基于阿里云服务器快速创建幻兽帕鲁服务器教程&…

go 引用fork后的模块的两种方式(replace和工作区)

很久没更新了,一是工作琐碎,二是处在舒适区,但最近看着身边的同事一个个离开,危机感骤然而生,不得不重拾书本,毕竟生活还得继续,不卷是不可能的,谁让我们生在这个卷中卷的国度&#…

3d gaussian splatting介绍整理

3D 高斯分布是用于实时辐射场渲染的 3D 高斯分布中描述的一种光栅化技术,它允许实时渲染从小图像样本中学习到的逼真场景。 paper github 本文翻译整理自: blog: Introduction to 3D Gaussian Splatting DDPMs - Part 2 给出一些2D图片,用…

「阿里云」幻兽帕鲁个人服务器已上线,3分钟快速搭建

基于阿里云搭建幻兽帕鲁服务器方法,1到2分钟部署完成,稳定运行无卡顿,阿里云服务器网aliyunfuwuqi.com分享保姆级手把手教程,基于阿里云计算巢、云服务器或无影云桌面都可以: 基于阿里云幻兽帕鲁服务器创建教程 基于…

WLAN

前言 今天给大家讲一个不一样的实验,生活息息相关,特别有意思的,顺便让大家放松放松 实验 一.引入 实验拓扑图: 明眼人已经知道我没要干嘛了,WIFI无线路由器 所有的PC设备都换成WIMP300N模块无线接收 成功后你们的拓扑图就会和我的一样 二、配置Linksys WRT300N   配置pc3…

循环测试之旅——深度解析Pytest插件 pytest-repeat

在软件开发中,测试的重要性不言而喻。而为了提高测试的鲁棒性和可靠性,Pytest插件 pytest-repeat 应运而生。这个插件可以帮助你轻松实现测试用例的循环运行,以更全面地评估代码的稳定性。本文将深入介绍 pytest-repeat 插件的基本用法和实际案例,助你更好地利用循环测试,…

独占指针:unique_ptr 与 函数调用 笔记

推荐B站视频: 2.unique_ptr_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p2&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 3.unique_ptr与函数调用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL?p3&vd_sourcea934d…

MIT_线性代数笔记:第 29 讲 奇异值分解

目录 如何实现用矩阵数学语言描述这一过程举例 本讲介绍奇异值分解(Singular value decomposition),简称 SVD。这是矩阵最终也是最好的分解,任意矩阵可分解为 A U Σ V T AUΣV^T AUΣVT,分解结果为正交矩阵 U&#x…

OpenAI API 的最新动态:新一代的嵌入模型,更新 GPT-4 Turbo,更新 GPT-3.5 Turbo 以及降低 API 价格

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 OpenAI 正在推出新一代嵌入模型、新的 GPT-4 Turbo 和审查模型、新的 API 使用管理工具,而且很快就会降低 GPT-3.5 Turbo 的价格。 OpenAI…

【MAC】Multi-Level Monte Carlo Actor-Critic阅读笔记

基本思想: 利用多层次蒙特卡洛方法(Multi-Level Monte Carlo,MLMC)和Actor-Critic算法,解决平均奖励强化学习中的快速混合问题。 快速混合? 在强化学习中,当我们说一个策略"混合得快"…

3D视觉技术快讯

SparseGS主要解决了3D GS(Gaussian Splatting)与NeRF类似的稀疏视角问题,即当训练输入视角很稀疏时,GS会在训练中过拟合,从而在新视角上的测试结果较差。本论文则是提出使用原有的深度先验以及显式的约束来提升GS在稀疏视角下的表现&#xff…