【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不允许目录建立硬链接,会造成闭环问题

在这里插入图片描述

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

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

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

相关文章

空调能量表

数字化应用场景:空调能量监测 定义 空调能量表产品又被称为冷量积算仪、冷量积分仪、能量积分仪、能量积算仪、空调冷热量表、冷量表、能量表等,现阶段行业内没有统一的名称。 作用 用于计量中央空调能耗的仪表,它通过和空调管道流量计和温…

numpy数据库

numpy中的数组 0、导包 import numpy as np 1、创建数组 >>> # 创建数组,得到darray类型 >>> t1 np.array([1, 2, 3]) >>> t2 np.array(range(8)) >>> t3 np.arange(1, 9, 2) 2、数组为 numpy.ndarray 类型 >>…

基于单片机C51全自动洗衣机仿真设计

**单片机设计介绍, 基于单片机C51全自动洗衣机仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机C51的全自动洗衣机仿真设计是一个复杂的项目,它涉及到硬件和软件的设计和实现。以下是对这…

redis常见问题及解决方案

缓存预热 定义 缓存预热是一种优化方案,它可以提高用户的使用体验。 缓存预热是指在系统启动的时候,先把查询结果预存到缓存中,以便用户后面查询时可以直接从缓存中读取,节省用户等待时间 实现思路 把需要缓存的方法写在初始化方…

Linux三剑客:grep的基本使用

目录 grep介绍 什么是grep和egrep 使用grep 命令格式 命令功能 命令参数 grep配合正则表达式使用 认识正则 基本正则表达式 匹配字符 配置次数 位置锚定:定位出现的位置 分组和后向引用 作为学习一名计算机专业的学生,我想Linux应该需要了解…

HTML5学习系列之实用性标记

HTML5学习系列之实用性标记 前言实用性标记高亮显示进度刻度时间联系信息显示方向换行断点标注 总结 前言 学习记录 实用性标记 高亮显示 mark元素可以进行高亮显示。 <p><mark>我感冒了</mark></p>进度 progress指示某项任务的完成进度。 <p…

Python基础教程之模块介绍及用法,适合新手小白的入门教程~

文章目录 什么是模块&#xff1f;创建模块使用模块模块中的变量为模块命名重命名模块内建模块使用 dir() 函数从模块导入 什么是模块&#xff1f; 请思考与代码库类似的模块。 模块是包含一组函数的文件&#xff0c;希望在应用程序中引用。 创建模块 如需创建模块&#xff…

(C++类的初始化和清理)构造函数与析构函数

目录 1. 类的六个默认成员函数2. 构造函数&#xff08;Constructor&#xff09;2.1 概念2.2 特性 3. 析构函数&#xff08;Destructor&#xff09;3.1 概念3.2 特性 1. 类的六个默认成员函数 一个类中如果什么成员都没有&#xff0c;称为空类 class Date {};但是这并不代表空…

Windows 系统彻底卸载 SQL Server 通用方法

Windows 系统彻底卸载 SQL Server 通用方法 无论什么时候&#xff0c;SQL Server 的安装和卸载都是一件让我们头疼的事情。因为不管是 SQL Server 还是 MySQL 的数据库&#xff0c;当我们在使用数据库时因为未知原因出现问题&#xff0c;想要卸载重装时&#xff0c;如果数据库…

如何分析伦敦金的价格走势预测?

伦敦金作为国际黄金市场的重要指标&#xff0c;其价格走势一直备受投资者关注。但是&#xff0c;黄金市场的价格变化受到多种因素的影响&#xff0c;因此要准确预测伦敦金的价格走势并非易事。在本文中&#xff0c;将介绍一些常用的方法和工具&#xff0c;帮助您分析伦敦金的价…

Docker-compose 下载安装测试完成

源文件-http://t.csdnimg.cn/7NxHchttp://t.csdnimg.cn/7NxHc 1 docker-compose说明 Docker Compose 是Docker的组装工具&#xff0c;用于创建和调试多个Docker容器&#xff0c;并在同一个Docker主机上运行它们。Docker Compose基于YAML文件&#xff0c;描述多个容器之间的相…

在Spring Boot中使用Redis的发布订阅功能

Redis的发布订阅模式是一种消息传递模式&#xff0c;它允许多个订阅者订阅一个或多个频道&#xff0c;同时一个发布者可以将消息发布到指定的频道。这种模式在分布式系统中非常有用&#xff0c;可以解决以下问题&#xff1a; 实时消息传递&#xff1a;发布订阅模式可以用于实时…

django——公众号服务开发

开发过程 项目背景&#xff1a;功能描述&#xff1a;参考文档以及调试链接&#xff1a;技术架构&#xff1a;准备工作公众号的注册以及设置域名的准备服务器的租赁内网穿透微信支付的注册 功能开发细节微信公众号自定义菜单获取access_token创建菜单查询菜单删除菜单 个性化菜单…

Nginx反向代理与负载均衡与504错误

Nginx反向代理与负载均衡概念简介 关于代理 什么是代理 类似中介 在没有代理模式的情况下&#xff0c;客户端和Nginx服务端&#xff0c;都是客户端直接请求服务端&#xff0c;服务端直接响应客户端。 那么在互联网请求里面&#xff0c;客户端往往无法直接向服务端发起请求…

【LeetCode刷题-滑动窗口】--76.最小覆盖子串

76.最小覆盖子串 class Solution {//建立两个hashMap&#xff0c;ori用于存储目标字符串t中每个字符的出现次数//cnt用于存储当前窗口中每个字符的出现次数Map<Character,Integer> ori new HashMap<Character,Integer>();Map<Character,Integer> cnt new H…

PyTorch:计算图

在深度学习和神经网络领域&#xff0c;计算图是一种重要的概念&#xff0c;它在理解和实现神经网络模型的训练过程中起着至关重要的作用。PyTorch作为一款优秀的深度学习框架&#xff0c;自然也包含了计算图的概念和实现。本文将深入探讨PyTorch中计算图的原理、应用以及对深度…

mp4封装格式各box类型讲解及IBP帧计算

作者 —— 靑い空゛ 出处&#xff1a;http://www.cnblogs.com/ailumiyana/ 音视频流媒体高级开发教程 MP4文件封装格式&#xff0c;对应的标准为ISO/IEC 14496-12&#xff0c;即信息技术 视听对象编码的第12部分 ISO 基本媒体文件格式&#xff08;Information technology Codi…

最新版仿东郊到家小程序源码 上门服务小程序源码

最新版仿东郊到家小程序源码 上门服务小程序源码 1、数据概况&#xff08;新增业务城市用户投票功能&#xff0c;更加直观的查看业务城市的关注度、人气和影响力,促进业务开展&#xff09; 2、数据概况 &#xff08;增加可视化数据大盘&#xff0c;代理商端可查看自己下面的技…

【java学习—十五】线程的同步与死锁(5)

文章目录 1. 多线程产生的问题2. Synchronized 的使用方法3. 线程的死锁问题 1. 多线程产生的问题 问题&#xff1a; 同一个账户&#xff0c;支付宝转账&#xff0c;微信转账。两个手机&#xff0c;一个手机开支付宝&#xff0c;另一个手机开微信。假设账户上有3000元&#xff…

OCC教学:拓扑

拓扑&#xff1a;1.介绍 几何限制 OCCT 曲面支持矩形修剪。布尔运算后可能会出现非矩形域。 如何存储剪切操作的结果&#xff1f; 拓扑的目的 一般来说&#xff0c;拓扑是描述对象局限性的一种手段。 OCC拓扑被用于用于描述&#xff1a; 物体的边界&#xff1b;对象之…