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

news2024/11/30 2:34:44

文章目录

  • 前言
  • 一、 简单理解文件系统
  • 二、文件操作具体步骤
    • 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.coloradmin.cn/o/1215670.html

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

相关文章

基于Optuna的transformers模型自动调参

文章目录 一、导入相关包二、加载数据集三、划分数据集四、数据集预处理五、创建模型(区别一)六、创建评估函数七、创建 TrainingArguments(区别二)八、创建 Trainer(区别三)九、模型训练十、模型训练(自动搜索)(区别四)启动 tensorboard 以文本分类为例…

使用 Redis 构建轻量的向量数据库应用:图片搜索引擎(一)

本篇文章聊聊更轻量的向量数据库方案:Redis。 以及基于 Redis 来快速实现一个高性能的本地图片搜索引擎,在本地环境中,使用最慢的稠密向量检索方式来在一张万图片中查找你想要的图片,总花费时间都不到十分之一秒。 写在前面 接着…

C++进阶-STL 常用算法列举

STL 常用算法列举 概述常用遍历算法for_each 遍历容器transfrom 搬运容器到另一个容器中 常用查找函数find 查找元素find_if 按条件查找元素adjacent_find 查找相邻重复元素binary_search 二分查找法count 统计元素个数count_if 按条件统计元素个数 常用排序算法sort 对元素内内…

Linux C/C++全栈开发知识图谱(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)

众所周知,在所有的编程语言中,C语言是一门颇具学习难度,需要很长学习周期的编程语言。甚至很多人经常听到一句调侃的话语——“C,从入门到放弃”。 C界的知名书籍特别多,从简单到高端书籍,许多书籍都是C之…

8086与8088

一、8086与8088概述 8088/8086都是16位微处理器,内部运算器和寄存器都是16位的,同样具有20位地址线8088/8086都是由执行单元(EU)和总线接口部件(BIU)两大部分构成指令系统和寻址能力都相同,两种CPU是兼容的8088被称作准十六位的、是紧继8086…

为什么红帽Linux值得学习?红帽Linux是什么

为什么红帽Linux值得学习 物联网、云计算、大数据,或许你都耳熟能详,但是Linux可能你却感觉到有点陌生。这些未来趋势的行业使用的嵌入式、c、JAVA、PHP等底层应用软件都是在Linux操作系统上Linux运维工程师作为移动互联网的关键支撑岗位,缺口…

Redis内存淘汰机制

Redis内存淘汰机制 引言 Redis 启动会加载一个配置&#xff1a; maxmemory <byte> //内存上限 默认值为 0 (window版的限制为100M)&#xff0c;表示默认设置Redis内存上限。但是真实开发还是需要提前评估key的体量&#xff0c;提前设置好内容上限。 此时思考一个问题…

避坑指南!!在树莓派4b上安装Pycharm以及无法使用终端的问题解决!!

一、下载Pycharm–linux安装包 这里是踩的第一个坑&#xff0c;一开始我下载的是pycharm2023-linux版本的。后面发现缺少很多东西&#xff0c;安装不成功。后面下载了低版本的Pycharm才可以。我下载的是2020版本的。注意&#xff1a;在下载安装包时&#xff0c;一定要在window…

小米手机获取电池健康度

目录 方法一&#xff1a;使用Bug反馈功能 1. 打开拨号界面&#xff0c;输入*#*#284#*#* 2. 导出结果&#xff0c;等待即可 3. 找到这个压缩文件 4. 解压缩【我这里直接拷贝到电脑中操作&#xff0c;手机同理】 4.1 解压&#xff1a; 4.2 将得到的新的压缩文档解压 5. 打…

Stages—研发过程可视化建模和管理平台

产品概述 Stages是美国UL Solutions旗下UL Method Park GmbH的产品&#xff0c;用于帮助企业定义、管理、发布、控制、优化其研发过程&#xff0c;同时使其研发过程符合CMMI、ASPICE、ISO26262等标准。Stages的核心理念是把过程理论和实际项目进行有机结合。Stages聚焦于研发过…

web环境实现一键式安装启动

部署的痛点 一般在客户环境安装web环境&#xff0c;少说需要花费1-2小时。一般需要安装jdk、nginx、mysql、redis等 等你接触到了inno setup &#xff0c;你有可能会节约更少的时间去部署。也有可能是一个不懂技术的人&#xff0c;都可以进行操作的。废话不多说&#xff0c;接…

JS原生-弹框+阿里巴巴矢量图

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&q…

LeetCode - 160. 相交链表(C语言,配图)

思路&#xff1a; 1. 我们算出两个链表的长度lenA&#xff0c;lenB。我们在这里最后判断一下&#xff0c;两个链表的尾节点是否是一样的&#xff0c;如果是相交链表&#xff0c;那它们的尾节点一定是一样的。 2. 算出长链表和短链表的差距n&#xff08;n | lenA- lenB |&#…

【分享课】11月16日晚19:30PostgreSQL分享课:PG缓存管理器主题

PostsreSQL分享课分享主题: PG缓存管理器主题 直播分享平台&#xff1a;云贝教育视频号 时间&#xff1a;11月16日 周四晚 19: 30 分享内容: 缓冲区管理器结构 缓冲区管理器的工作原理 环形缓冲区 脏页的刷新

《洛谷深入浅出基础篇》 p3370字符串哈希——hash表

上链接&#xff1a; P3370 【模板】字符串哈希 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3370#submit上题干&#xff1a; 就是说&#xff0c;给你N个字符串&#xff0c;然后让你判断&#xff0c;这N个字符串里面有多少不同的字符串&am…

谭巍主任科普:面对HPV感染挑战,迈出关键一步!

在当今社会&#xff0c;HPV(人乳头瘤病毒)感染的问题日益凸显&#xff0c;它不仅限于性传播疾病&#xff0c;更上升为一种公共卫生问题。据统计&#xff0c;全球范围内每年有大量人群感染HPV&#xff0c;其中部分地区感染率高达50%。正因如此&#xff0c;谭巍主任投身于科普事业…

表单校验wed第十九章

常见的表单验证 一。表单选择器 属性过滤选择器 &#xff1a;selected 选中所有的下拉元素 &#xff1a;checked&#xff1a;选项元素 &#xff1a;disabled 不可用元素 &#xff1a;enable 所有可用元素 二。字符串演示 1.判断非空 isNaN(j) :判断是否为数字 2.表…

flutter绘制弧形进度条

绘制: import package:jade/utils/JadeColors.dart; import package:flutter/material.dart; import dart:math as math; import package:flutter_screenutil/flutter_screenutil.dart;class ArcProgressBar extends StatefulWidget{const ArcProgressBar({Key key}) : super…

蘑菇街获得mogujie商品详情 API 返回值说明

速卖通API接口是速卖通平台提供的一种数据交换接口&#xff0c;可以帮助卖家快速获取平台上的商品信息、订单信息、用户信息等数据&#xff0c;以便在自己的应用程序中进行展示、管理或分析。 速卖通API接口可以通过以下步骤进行使用&#xff1a; 注册速卖通账号并获取API密钥…

SystemVerilog学习 (7)——面向对象编程

一、概述 对结构化编程语言,例如Verilog和C语言来讲&#xff0c;它们的数据结构和使用这些数据结构的代码之间存在很大的沟壑。数据声明、数据类型与操作这些数据的算法经常放在不同的文件里,因此造成了对程序理解的困难。 Verilog程序员的境遇比C程序员更加棘手,因为 Verilog …