【Linux】文件系统中inode与软硬链接以及读写权限问题

文章目录

  • 前言
  • 一、 简单理解文件系统
  • 二、文件操作具体步骤
    • 1.新建文件
    • 2.删除文件
    • 3.查找文件
  • 三、目录的重新理解
    • 1.目录下没有w权限,无法对其下的文件进行创建与删除
    • 2.目录下没有r权限,无法对其下的文件进行查看
    • 3.目录下没有x权限,无法进入这个目录
  • 四、软链接
  • 五、硬链接
    • 1.Linux不允许目录建立硬链接,会造成闭环问题


前言

一、 简单理解文件系统

我们接下来以磁盘举例:
文件=文件内容+文件属性
Linux中文件内容与属性是分开存储的。
文件内容:在数据块中存着
文件属性:在inode中存着

在这里插入图片描述

在这里插入图片描述

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节点表:存放文件属性 如文件大小,所有者,最近修改时间等

数据区:存放文件内容

Linux系统中,一个文件,一个inode,每一个inode都有自己的inode编号是唯一的(inode的设置是以分区为单位的,也就是1号分区inode编号从1到500,2号分区也是1到500,分区之间编号互不影响),inode为一个结构体,里面存着文件的所有属性,文件名并不属于inode属性

格式化:
每一个分区在被使用之前,都必须提前先将部分文件系统的属性信息提前设置进对应的分区当中(也就是划分好Block Group ,GDT,inode位图等),方便我们后续使用这个分区或者分组

二、文件操作具体步骤

在这里插入图片描述

1.新建文件

首先会分配到一个空余的分组中,在分组中通过GDT来判断是否有剩余的位置放入,在inodeBitmap中查找最近的没有使用的下标,将其从0置为1,之后用这个inode编号去inodeTable中这到这个位置,将自己的信息(大小,修改时间之类的)写入到struct inode结构体中,文件就完成了创建

如果要写入数据,首先判断要写入数据大小需要几个数据块大小,之后根据BlockBitmap在位图中找到未使用的数据块,之后将其置为1,把块号填到inode中block数组对应的位置,之后到DataBlock中写入数据

删除=允许被覆盖,可以提高系统效率

2.删除文件

我们根据我们当前文件所处的目录确定我们属于哪个分区的,根据文件inode大小确定我们是哪个分组的,通过inode编号找到我们对应inode的属性,根据属性中blocks数组的内容,去BlockBitmap中将对应位置的置为0,之后再将inode编号的位置在inodeBitmap中置为0

3.查找文件

我们根据我们当前文件所处的目录确定我们属于哪个分区的,根据文件inode大小确定我们是哪个分组的,通过inode编号在inodeTable中找到我们对应inode的属性,根据inode结构体里面block数组去对应的位置DataBlock找数据,将对应块载入内存,虽然我们载入了整个块大小的数据,但我会根据我当前文件大小来在块中读取对应字节的数据

三、目录的重新理解

文件那些操作的前提都是基于我们有文件的inode编号,但我怎么获得我们inode编号呢?我们平时都是直接用文件名进行操作的。

在这里插入图片描述

首先目录也是文件,Linux系统下一切且文件,所以我目录也有自己的属性+内容,也需要数据块来存储数据。
问:目录里存放的是什么?
答:存放的是文件名与文件名其inode编号的映射关系。

问:既然这样那我又是怎么获得目录的inode编号呢?我们得先知道目录的inode编号读取其数据内容才能获得文件名与inode编号啊!!!
答:我们会一路向上递归到根目录,根目录的位置是确定的,inode编号也是确定的,我们根据根目录中存的数据,找到目录和inode的对应关系

1.目录下没有w权限,无法对其下的文件进行创建与删除

因为即便我们把文件创建出来,文件名与inode的映射关系,我们没有w权限,我们就无法将这个关系存入目录的数据当中。

2.目录下没有r权限,无法对其下的文件进行查看

我们要先获得文件的inode编号,才能去对应数据块中找文件的数据,但现在目录都不让我读啊!我都没办法获取到文件的inode编号,拿什么去读文件?

3.目录下没有x权限,无法进入这个目录

进入目录,就是cd进去, 将系统的环境变量做更新,给当前路径做更新,并给目录信息做更新,但没有x权限我们就无法执行这一操作。

四、软链接

软链接是一个独立的文件,有一个独立的inode,也有独立的数据块,他的数据块中保存的是指向文件的路径(相当于windows中的快捷方式)

命令:ln -s 要链接的文件名 创建的软链接文件名
在这里插入图片描述
因为软链接中存着链接文件的路径,所以我们可以选择将我们的软链接文件放入可执行文件的目录/usr/bin
``
这样我们就可以以直接执行我们自己写的可执行程序了
在这里插入图片描述
在这里插入图片描述

五、硬链接

硬链接不是一个独立的文件,因为其没有独立的inode编号,所谓建立硬链接,本质其实是在特定目录的数据块中新增文件名和指向文件名inode编号的映射关系(相当于取别名)

命令:ln 要链接的文件名 创建的硬链接文件名

每个inode内部都有一个引用计数器(记录有多少个文件指向我)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.Linux不允许目录建立硬链接,会造成闭环问题

在这里插入图片描述

我们假设可以创建目录硬链接
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端跨界面之间的通信解决方案

主要是这两个方案,其他的,还有 SharedWorker 、IndexedDB、WebSocket、Service Worker 如果是,父子嵌套 iframe 还可以使用 window.parent.postMessage(“需要传递的参数”, ‘*’) 1、localStorage 核心点 同源,不能跨域(协议、端…

HTTP/2.0协议详解

前言 HTTP/2.0:互联网通信的革新标准 随着互联网技术的飞速发展,HTTP协议作为互联网应用最广泛的通信协议,也在不断演进和优化。HTTP/2.0是HTTP协议的最新版本,它旨在提供更高效、更安全、更快速的互联网连接。 一、HTTP/2.0的优…

clickhouse的安装和配置

使用虚拟机测试, 系统为ubuntu 22.04 一 安装 sudo apt-get install -y apt-transport-https ca-certificates dirmngr sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754echo "deb https://packages.clickhouse.com/deb stable ma…

[sqlserver]在count(*)末尾增加单位(sql语句中的类型转换函数convert())

背景:在查询登录总数后面增加“人次” 解决:使用convert()函数转换为varchar类型即可 原语句: select count(*) 登录次数 from login 更改后: select convert(varchar,count(*))人次 登陆次数 from login 关于convert()函数的…

大数据爬虫分析基于Python+Django旅游大数据分析系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Python和Django的旅游大数据分析系统是一种使用Python编程语言和Django框架开发的系统,用于处理和分…

67基于matlab图像处理,包括颜色和亮度调整、翻转功能、空间滤波和去噪、频域滤波和去噪、噪声添加,形态学操作、边缘检测及示波器集成的GUI图像处理。

基于matlab图像处理,包括颜色和亮度调整、翻转功能、空间滤波和去噪、频域滤波和去噪、噪声添加,形态学操作、边缘检测及示波器集成的GUI图像处理。数据可更换自己的,程序已调通,可直接运行。 67 matlab图像处理图像降噪 (xiaohon…

腾讯云优惠服务器有哪些?腾讯云服务器优惠券领取入口汇总

腾讯云此次推出云服务器中最实惠的2核2G服务器以每年仅需88元的超低价格为用户提供稳定可靠的计算资源。这样的价格对于个人网站、小型企业以及学生开发者来说绝对是一笔难以忽视的优惠。 腾讯云双十一领9999代金券 https://1111.mian100.cn 腾讯云新用户领2860代金券 https:…

Xocde 升级15 或者 iOS17报错:

错误: Assertion failed: (false && "compact unwind compressed function offset doesnt fit in 24 bits"), function operator(), file Layout.cpp, line 5758. 翻译: 断言失败:(false&&“压缩展开…

使用VC++设计程序:对于一幅256级灰度图像,求其一元熵值、二维熵值

数字图像处理–实验二B图像的一维熵与二维熵算法 本文主要是对图像进行一维熵以及二维熵的计算,下面附有实现的代码 文章目录 数字图像处理--实验二B图像的一维熵与二维熵算法一、 实验内容二、 一维熵1. 一维熵的定义2. 一维熵的C代码实现 三、 二维熵1. 二维熵的定…

C#中.NET Framework4.8 Windows窗体应用通过EF访问新建数据库

目录 一、 操作步骤 二、编写EF模型和数据库上下文 三、 移植(Migrations)数据库 四、编写应用程序 五、生成效果 前文已经说过.NET Framework4.8 控制台应用通过EF访问已经建立的和新建的数据库。 本文想说的是,.NET Framework4.8 Win…

在webstorm中配置sass编译环境

1.下载ruby 下载地址:ruby下载 2.安装ruby 下载之后,有一个exe安装包 双击exe文件 ,并选择自己的安装位置(这个位置一定要记得,需要在webstorm中使用)。其他的步骤默认安装即可。 3.安装sass ruby安装成功后…

vue中bus的详细使用

vue中关于兄弟组件bus的使用方法 首先,bus可以用在任何组件之间的传值 废话不多说,请看下面代码解说 首先,先创建bus.js文件,然后在引用,这里有两种引用方法:局部引用和全局引用。 // bus.js文件内容 imp…

2019年五一杯数学建模A题让标枪飞解题全过程文档及程序

2019年五一杯数学建模 A题 让标枪飞 原题再现 标枪的投掷是一项历史悠久的田径比赛项目。标枪投掷距离的远近受到运动员水平(出手速度、出手角、初始攻角、出手高度、出手时标枪的初始俯仰角速度等),标枪的技术参数(标枪的长度、…

在Python中使用sqlite3进行数据持久化操作

目录 引言 一、安装sqlite3模块 二、创建数据库连接 三、创建游标对象 四、执行SQL命令 五、提交更改 六、关闭连接 七、使用参数化查询 八、使用ORM进行数据操作 九、备份和恢复数据库 十、处理大量数据 十一、优化查询性能 十二、处理并发访问 十三、处理数据持…

考虑区域多能源系统集群协同优化的联合需求侧响应模型(matlab代码)

该程序复现《考虑区域多能源系统集群协同优化的联合需求侧响应模型》文献模型,程序的核心是对多个区域级多能源系统互联系统进行多目标优化,并且考虑联合需求侧响应,以多个区域多能源系统运行总成本最小、碳排放最小为目标,建立多…

敏感数据是什么?包含哪些?如何保障安全?

最近看到不少小伙伴在问,敏感数据是什么?包含哪些?如何保障安全?这里我们小编就给大家一一解答一下,仅供参考哦! 敏感数据是什么? 敏感数据,是指泄漏后可能会给社会或个人带来严重危…

IDEA创建JavaFX项目

1、New -> Project 2、选择JavaFX 配置项目名,包名,lib包管理工具,JDK版本(注,JDK版本最低需要11) 3、选择lib包 根据自己需求选择 lib包介绍 BootstrapFX:BootstrapFX 是一个为 JavaFX 提…

将ECharts图表插入到Word文档中

文章目录 在后端调用JS代码准备ECharts库生成Word文档项目地址库封装本文示例 EChartsGen_DocTemplateTool_Sample 如何通过ECharts在后台生成图片,然后插入到Word文档中? 首先要解决一个问题:总所周知,ECharts是前端的一个图表库…

【文件包含】phpmyadmin 文件包含(CVE-2014-8959)

1.1漏洞描述 漏洞编号CVE-2014-8959漏洞类型文件包含漏洞等级高危漏洞环境Windows漏洞名称phpmyadmin 文件包含(CVE-2014-8959) 描述: phpMyAdmin是一套开源的、基于Web的MySQL数据库管理工具。其index.php中存在一处文件包含逻辑,通过二次编…

多区域OSPF配置

配置命令步骤: 1.使用router ospf 进程ID编号 启用OSPF路由 2.使用network 直连网络地址 反掩码 area 区域号 将其归于对应区域 注意: 1.进程ID编号可任意(1-65535) 2.反掩码用4个255相减得到 3.area 0 为主干区域 4.连接不…