【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.mzph.cn/news/144387.shtml

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

相关文章

黑芝麻智能完成上市备案,这一次国产汽车芯片真得崛起了?

“轮子上的数据中心”——现在,越来越多人用这句话来形容新能源汽车。 而芯片作为处理新能源汽车“数据中心”的大脑,其市场规模呈现增长趋势。车百智库近期发布的《汽车芯片产业发展报告(2023)》显示,2022年我国汽车…

内网Jenkins 部署.net(dotnet)项目

一、前置条件 内网部署Jenkins,并安装好所需插件 此篇内容需承接内网搭建Jenkins自动化远程部署项目到Windows服务器_jenkins内网安装-CSDN博客 ,才更好操作与理解 二、在Jenkins中创建项目 三、配置项目 General Source Code Management Build Envi…

Docker - 容器数据卷

Docker - 容器数据卷 什么是容器数据卷 等同于挂载,将容器内的目录地址指向于宿主机文件系统中 直接使用命令来挂载 -v docker run -it -v 主机目录:容器内目录# 测试 docker run -it -v /root:/home centos /bin/bash [rootiZ2zeg7mctvft5renx1qvbZ ~]# docker …

baidu贴吧邮箱采集小工具【写着玩】

这里写自定义目录标题 小工具写着玩小工具写着玩 之前有一个小业务,需要进行批量邮箱协议群发,然后需要采集一些真实的邮箱数据,最后想了一下让用户自己留下的基本上都是真实的,tieba又属于一个流量比较大的地方,后来就写了一个小教本进行测试; 工具还可以进行继续的延伸…

什么是CMDB?为什么企业需要CMDB?

CMDB即Configuration Management Database,配置管理数据库,它是组织IT基础结构中配置项CI(Configuration Item)及其关系的数据库。 而CI是指任何需要进行管理以确保成功提供服务的条目,CI可以是一个具体的实体,如服务器、交换机&…

基于单片机设计的水平仪(STC589C52+MPU6050)

一、前言 【1】项目背景 水平仪是一种常见的测量工具,用于检测物体或设备的水平姿态。在许多应用中,如建筑、制造和航空等领域,保持设备的水平姿态是非常重要的。为了实现实时的水平检测和显示,基于单片机设计的水平仪是一个常见…

堆的应用-----Top k 问题

目录 前言 Topk问题 1.问题描述 2.解决方法 3.代码实现(C/C) 前言 在人工智能算法岗位的面试中,TopK是问得最多的几个问题之一: 到底有几种方法? 这些方案里蕴含的优化思路究竟是怎么样的? 为啥T…

无线WiFi安全渗透与攻防(五) aircrack-ng(亲测有效)、mdk3联合攻击

无线WiFi安全渗透与攻防(五) aircrack-ng(亲测有效)、mdk3联合攻击 一. kali虚拟机 WiFi一、虚拟机连接网卡1、插入网卡进行连接2、检查是否连接成功输入ifconfig看是否出现wlan0,若没成功,可以输入ifconfig -a看一下是否出现wlan03、常见问题具体操作如下:二、使用airm…

【从入门到起飞】JavaSE—IO工具包(Commons-io,Hutool) (2)

🎊专栏【JavaSE】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🌺工具包Commons-io⭐使用步骤🛸新建一个文…

代驾预约小程序系统源码 :提起预约,避免排队 带完整搭建教程

大家好啊,又到罗峰来给大家分享好用的源码系统的时间了。今天要给大家分享的第一款代驾预约小程序源码系统。传统的代驾服务中,用户往往需要在酒后代驾、长途驾驶等场景下,面对排队等待代驾司机空闲时间的繁琐过程。这不仅浪费了用户的时间和…

如何准备2024年的系统设计面试?

1 前言 如果你正在准备软件工程师或软件开发人员的面试,那么你可能知道由于其开放性质和广泛性,准备系统设计是多么困难,但同时你也不能忽略它。在软件工程界,如果你正在申请高级工程师/主管/架构师或更高级别的角色,系统设计是最受追捧的技能,也是整个过程中最重要的环节之一…

CSS 实现新拟态(Neumorphism) UI 风格

什么是新拟态(Neumorphism) UI 风格?网上似乎还没有一个准确统一的定义。按照我个人的通俗理解,就是将界面的一部分凸起来,另一部分凹下去,形成的一种错落有致的拟物风格。代表作是乌克兰设计师 Alexander Plyuto 在各平台发布的新…

雷欧REO控制器维修REOVIB MFS268 M DP24

REO雷欧控制器维修常见型号包括: MFS268, MTS442, MTS443, MFR100/200, MFS158,MFS168等 涉及双层线圈层间短路的修理:振动控制器维修,双层线圈在上下层间发生层间短路,是由于层间材质不好或嵌…

AJAX入门Day01笔记

Day01_Ajax入门 知识点自测 如下对象取值的方式哪个正确? let obj {name: 黑马 }A: obj.a B: obj()a 答案 A选项正确 哪个赋值会让浏览器解析成标签显示? let ul document.querySelector(#ul) let str <span>我是span标签</span>A: ul.innerText str B: ul…

opencv的MinGW-W64编译

最近使用Qt&#xff0c;需要用到opencv,安装详情参考下面这个网址&#xff0c;写的挺好&#xff1a; opencv的MinGW-W64编译 - 知乎 我电脑安装Qt中自带了MinGW,所以不需要像上面网址中的下载MinGw&#xff0c;只需要将Qt中自带的MinGW添加到环境变量即可&#xff0c;如&…

c# 常用集合类型

动态数组 using System.Collections; using System.Text.RegularExpressions; namespace demo1 {/// <summary>/// 常用的集合类型有动态数组&#xff08;ArrayList类&#xff09;、堆栈&#xff08;Stack类&#xff09;、Queue类和Hashtable类/// </summary>inte…

同一个IP地址可有不同的写法?

每个人在上网的时候&#xff0c;都会被分配一个IP地址&#xff0c;这是互联网世界中的“身份证号码”。IP地址是以数字形式呈现的&#xff0c;例如192.168.1.1。然而&#xff0c;你是否知道&#xff0c;尽管一个IP地址的数字串唯一标识一个设备&#xff0c;但它可以有不同的写法…

【App测试】adb三大连接方式-夜神模拟器+真机+android真机(详细步骤)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 adb连接安卓模拟器…

接口测试自动化测试的总结与思考,超详细的~

服务端接口测试介绍 什么是服务端? 一般所说的服务端是指为用户在 APP 或 PC 使用的互联网功能提供数据服务的背后的一切。以天猫精灵智能音箱系列的产品链路为例&#xff0c;服务端便是网关&#xff08;包括网关在内&#xff09;之后的链路。 什么是接口? 官方点说&#…

你应该知道关于Python的这几个技巧!

随着大数据时代的到来&#xff0c;我们每天都在接触爬虫相关的事情&#xff0c;这其中就不得不提及Python这门编程语言。我已经使用Python编程有多年了&#xff0c;即使今天我仍然惊奇于这种语言所能让代码表现出的整洁和对DRY编程原则的适用。这些年来的经历让我学到了很多的小…