Linux---文件系统

news2024/10/7 10:16:28

在基础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,就删除该文件

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

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

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

相关文章

Java项目:15 springboot vue的智慧养老手表管理系统

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统共分为两个角色:家长,养老院管理员 框架:springboot、mybatis、vue 数据库:mysql 5.7&…

Fink CDC 1.0 至3.0的从古至今

本文主要分享Flink CDC 1.0 至3.0的发展历程,了解其背后的关键特性和发展趋势,探讨其在大数据领域的影响和价值。 一、CDC概述 CDC是一种用以掌控数据变化的软件架构(技术思路),用于捕获和传递数据库中发生的数据变化。当数据库中发生增(INSERT)/删(DELETE)/改(UPD…

#GPU|LLM|AIGC#集成显卡与独立显卡|显卡在深度学习中的选择与LLM GPU推荐

区别 核心区别:显存,也被称作帧缓存。独立显卡拥有独立显存,而集成显卡通常是没有的,需要占用部分主内存来达到缓存的目的 集成显卡: 是集成在主板上的,与主处理器共享系统内存。 一般会在很多轻便薄型的…

win11 C盘出现感叹号

Win11系统中,出现本地磁盘上出现黄色感叹号,是BitLocker未关闭或者正在激活导致 解决方案: 鼠标右键点击开始菜单 ,之后选择“Windows终端”管理员 管理-bde状态;# #检查状态 管理-bde?# #查看帮助 Mana…

Docker 配置 Gitea + Drone 搭建 CI/CD 平台

Docker 配置 Gitea Drone 搭建 CI/CD 平台 配置 Gitea 服务器来管理项目版本 本文的IP地址是为了方便理解随便打的,不要乱点 首先使用 docker 搭建 Gitea 服务器,用于管理代码版本,数据库选择mysql Gitea 服务器的 docker-compose.yml 配…

Python如何让程序实现开机自启功能(随Windows启动)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 实现步骤 📒📝 方法一:使用Windows任务计划程序📝 方法二:添加注册表🎈 创建注册表项🎈 检查注册表项是否成功创建⚓️ 相关链接 ⚓️📖 介绍 📖 为了方便省事,我们很多时候需要给软件添加一个开机自启的功能,…

《微信小程序开发从入门到实战》学习九十三

7.1 视图容器组件 7.1.3 swiper与swiper-item组件 swiper组件的显示效果如下图所示: indicator-dots、indicator-color和indicator-active-color三个属性用于设置swiper组件下方的指示点。设置指示点的颜色时,可以使用HexColor,也可以使用r…

vscode开发FPGA(1)---TEROS_HDL插件报错

一、TerosHDL:modelsim(vlog-66)报错 Error: (vlog-66) Execution of vlib.exe failed 解决办法: 1.新建modelsim工程,并随意编译一个.v文件,将产生的work目录复制到modelsim安装路径下。 2.再将vscode设置verilog>linting>modelsim…

etcd技术解析:构建高可用分布式系统的利器

1. 引言 随着云原生技术的兴起,分布式系统的构建变得愈发重要。etcd作为一个高可用的分布式键值存储系统,在这个领域发挥着至关重要的作用。本文将深入探讨etcd的技术细节,以及如何利用它构建高可用的分布式系统。 2. etcd简介 etcd是一个开…

苗情监测站有什么作用?

苗情监测站是一种针对植物生长情况的监测设施,主要用于实时监测和分析植物生长环境中的各种因素,如温度、湿度、光照、土壤温湿度等,从而为农业生产提供科学的依据和技术支持。 具体来说,苗情监测站的作用包括以下几个方面&#…

EasyExcel实现导出图片到excel

pom依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version> </dependency> 实体类&#xff1a; package com.aicut.monitor.vo;import com.aicut.monit…

京东云开发者DDD妙文欣赏(3-4)什么时候厨师是Actor

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 京东云开发者DDD妙文欣赏&#xff08;1-2&#xff09;报菜名和化繁为简的创新>> 图8 《餐厅》中的“用例图” &#xff08;01&#xff09; 原文 用例图 赏析 揉一揉眼睛仔细…

全新PHP短网址生成系统,短链接生成系统,URL缩短器系统源码

PHP短网址系统URL缩短器平台&#xff0c;它使您可以轻松地缩短链接&#xff0c;根据受众群体的位置或平台来定位受众&#xff0c;并为缩短的链接提供分析见解。 系统使用了Laravel框架编写&#xff0c;前后台双语言使用&#xff0c;可以设置多域名&#xff0c;还可以开设套餐等…

架构师之路(十六)计算机网络(传输层)

前置知识&#xff08;了解&#xff09;&#xff1a;计算机基础。 作为架构师&#xff0c;我们所设计的系统很少为单机系统&#xff0c;因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 既然网络层已经…

Linux服务器配置与管理(第一次实验)

实验目的及具体要求 1.熟悉Ubuntu桌面环境和基本操作 2.熟悉命令语法格式 3.掌握Linux各类命令的使用方法 4.熟悉Linux操作环境 实验仪器、设备和材料 笔记本电脑 软件VMware Workstation 17 Player Ubuntu 64 位操作系统 实验内容、步骤及实验数据记录 &#xff08;一…

【医学图像隐私保护】联邦学习:密码学 + 机器学习 + 分布式 实现隐私计算,破解医学界数据孤岛的长期难题

联邦学习&#xff1a;密码学 机器学习 分布式 提出背景&#xff1a;数据不出本地&#xff0c;又能合力干大事联邦学习的问题 分布式机器学习&#xff1a;解决大数据量处理的问题横向联邦学习&#xff1a;解决跨多个数据源学习的问题纵向联邦学习&#xff1a;解决数据分散在多…

自动化防DDoS脚本

简介 DDoS &#xff08;分布式拒绝服务攻击&#xff09;是一种恶意的网络攻击&#xff0c;旨在通过占用目标系统的资源&#xff0c;使其无法提供正常的服务。在DDoS攻击中&#xff0c;攻击者通常控制大量的被感染的计算机或其他网络设备&#xff0c;同时将它们协调起来向目标系…

第二百八十七回

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容&#xff0c;本章回中将介绍如何播放视频.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…

解决 [Vue warn]:Avoid mutating a prop directly 警告

错误信息 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “xxx” 错误原因 所有的 prop 都使得…

Vue开发之proxy代理的配置(附带uniapp代理配置)

vue 1.在vue.config.js中添加 devServer 属性中配置 proxy 属性 module.exports {productionSourceMap: false,publicPath: /,devServer: {port: 8085,proxy: {/api/admin: {target: http://10.58.104.70:6111,changeOrigin: true,pathRewrite: {/api/: /}},/api: {target: …