inode和软硬链接

news2024/11/20 2:45:08

文章目录:

  • 一、理解文件系统
    • 1.1 什么是inode
    • 1.2 磁盘了解
      • 1.2.1磁盘的硬件结构
      • 1.2.2 磁盘的分区
      • 1.2.3 EXT2文件系统
  • 二、软硬链接
    • 2.1 软链接
    • 2.2 硬链接

一、理解文件系统

1.1 什么是inode

inodes 是文件系统中存储文件元数据的数据结构。每个文件或目录都有一个唯一的 inode 编号来标识它们。

inode 包含了有关文件或目录的信息,如文件的拥有者、所属组、权限、时间戳等。它还包含指向文件内容的指针,以及其它一些元数据(文件属性),如文件大小和文件类型。

使用命令 ls -l 或者 ll 就可以查看到该目录下的文件及其属性:

在这里插入图片描述

其中文件对应的属性如下所示(以 myfile.txt 文件为例):

在这里插入图片描述

在 Linux 中,文件的元数据和文件内容是分开存储的,其中使用 inode 来保存文件的元数据。为了管理系统中大量的文件,给每一个文件都分配了一个唯一的 inode 编号,便于系统可以快速的访问和管理文件系统中的文件,而不需要扫描整个文件系统。inode 使得文件系统非常高效的处理大量文件和目录。

使用命令 ls -il 可查看当前目录下的文件的 inode 编号:

在这里插入图片描述

在计算机中,文件的属性和数据通常存储在文件系统中。文件系统是一种用于在磁盘或其它设备组织和管理文件和目录的机制❗

1.2 磁盘了解

磁盘是一种用于存储电子数据的设备,通常由多个盘片、磁头和马达组成。它是计算机系统中最常见的外部存储设备之一。磁盘可以存储各种类型的数据,包括操作系统、应用程序、文档、音乐、图像等。数据以二进制形式存储在盘片表面的磁性涂层上。当读取或写入数据时,磁头会在盘片表面运动,根据磁性涂层上的磁场变化来读取或写入数据。

1.2.1磁盘的硬件结构

在这里插入图片描述

文件保存在磁盘中,为了更好的理解,首先来了解一下磁盘的物理结构:

在这里插入图片描述

磁盘的CHS地址:

磁盘的 CHS 地址是一种用于标识磁盘上物理扇区位置的方式,他由柱面(Cylinder)、磁头(Head)、扇区(Sector)三个参数组成,通常被称为 “CHS寻址模式”。在 CHS 寻址模式下,每个物理扇区都由一个唯一的 CHS 地址来定位。柱面号标识磁盘上的圆柱轨道编号,磁头号表示读写磁盘表面的编号,而扇区号则表示每个轨道上的扇区编号。

尽管CHS寻址模式已经被逐渐淘汰,但在早期计算机系统中仍然广泛使用。现代计算机系统使用更高级别的LBA(Logical Block Addressing,逻辑块寻址模式)或者GPT(GUID Partition Table,全局唯一标识分区表)等方式进行数据存取。

1.2.2 磁盘的分区

磁盘的分区是指将一个物理磁盘划分为多个逻辑部分,每个部分称为一个分区。一个磁盘可以划分为一个或多个分区,每个分区看起来像一个独立的磁盘,可以单独格式化、挂载和使用。磁盘一般以扇区为单位,一个扇区的大小通常情况下为 512byte 。如:一个大小为 512G 的磁盘,可以划分为10亿多个扇区。

在这里插入图片描述
在 Linux 下,可以使用 ls /dev/vda* -l 命令来查看磁盘的分区信息:

在这里插入图片描述

1.2.3 EXT2文件系统

ext2文件系统于1993年问世,由 Remy Card 开发,它是几个 Linux 发行版(如 RedHat 和 Debian)中的第一个默认文件系统。ext2之所以流行并使用了很长的一段时间,是因为它解决了 ext 第一个系列中出现的 inode 和 碎片 等基本问题。

EXT2文件系统使用基于磁盘的存储方案,其中数据被存储在扇区中,每个扇区的大小为4KB。磁盘被分为一个或多个分区,每个分区包含一个超级块、一个或多个组描述符块和多个数据块组。每个数据块组都由超级块(Super Block)、块组描述符(Group Descriptor Table)、块位图(Block Bitmap)、inode位图(inode Bitmap)、inode表(inode Table)和数据块(Data blocks)组成。
在这里插入图片描述

  • Boot Block(启动块):大小是确定的,占据一个扇区(512byte)。存储着主引导记录与分区表信息。
  • Block Group:ext2文件系统会根据分区的大小划分为数个 Block Group。而每个 Block Group 都有着相同的结构组成。
  • Super Block(超级块):存放文件系统本身的结构信息。记录的信息主要有:block 和 inode 的总量,未使用的 block 和 inode 的数量,一个 block 和 inode 的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其它文件系统的相关信息。Super Block 的信息被破坏,可以说整个文件系统结构就被破坏了。
  • Group Descriptor Table(块组描述符):简称 GDT,描述块组的属性信息。
  • Block Bitmap(块位图):记录 Data Block 中哪个数据块已经被使用,哪个数据块没有被使用。
  • inode Bitmap(inode 位图):记录 inode Table 中哪一个被使用,哪个没有被使用。每个 bit 位表示一个 inode 是否被使用。
  • inode Table(i 节点表):存放文件的属性。
  • Data Blocks(数据区):存放文件内容。

将属性和数据分开实际上是如何工作的呢?接下来我们创建一个新的文件来说明一下:

[root@hostname linux]# touch abc
[root@namehost linux]# ls -i abc
263466 abc

在这里插入图片描述
创建一个文件时,操作系统通常会执行以下操作:

  1. 分配空间:操作系统会为哎文件分配磁盘空间,这些空间在文件创建后将被保留以供该文件使用。
  2. 存储属性:内核先找到一个空的 i 节点(该例子是263466)。内核将文件属性记录到其中。
  3. 存储数据:该文件需要存储在三个磁盘块中,内核分别找到三个空闲磁盘块:300、500、800。将内核缓冲区的数据分别写到三个磁盘块中。
  4. 记录分配情况:文件内容按顺序300、500、800存放。内核在 inode 上的磁盘分布区记录了上述块列表。
  5. 添加文件名到目录:该目录的文件名为 abc。Linux 内核将入口(263466,abc)添加到目录文件。文件名和 inode 之间的对应关系将文件名和文件的内容以及属性连接起来。

文件与 inode 和 data block 之间的关系

在文件系统中,一个文件对应一个 inode ,一个文件可以由一个或多个数据块组成,这些数据块可能存储在磁盘上的不同位置。每个数据块都有一个地址,该地址通常存储在文件的 inode 中。因此,在文件系统中,当我们创建一个文件时,操作系统会为该文件分配一个 inode,并为该文件分配一些数据块。文件内容存储在数据块中,而文件元数据则存储在 inode 中。程序通过 inode 来访问文件,并根据 inode 中存储的指针信息找到相应的数据块来读取或写入文件数据。

如何理解创建一个新文件

  1. 在创建新文件的目录下找到该目录所在的分区和块组。
  2. 遍历 inode bitmap 找到一个未使用的位,将该位置为1。在 inode table 中找到该位对应的空间,并将该文件的属性信息写入其中。
  3. 在 block bitmap 中找到一个或多个未使用的位(具体多少个由写入文件数据的大小来确定),将这些位置为1。然后在 data blocks 中找到对应的数据块,将数据写入数据块中。
  4. 在 inode table 新创建文件的 inode 的数组中填入对应的数据块信息,建立映射关系。
  5. 最后,将 inode 名称和文件名的映射关系保存到目录的数据块中。

如何理解删除一个文件

  1. 将该文件对应的 inode 在 inode bitmap 对应的位置置为 0 。
  2. 将该文件在 block bitmap 中申请的位置置为 0。

注意:删除文件并不是真正意义上的对文件数据进行删除,而是将删除文件对应的数据置为无效即可。因此,在一些情况下,可以对某些删除的文件进行找回。

二、软硬链接

Linux 中的软链接和硬链接是什么?

软链接(符号链接)是到原始文件的实际链接,而硬链接是原始文件的镜像副本。如果删除原始文件,软链接就失去价值了,因为它删除原始文件后它指向一个不存在的文件。但在硬链接的情况下,情况是完全相反的。即使删除了原始文件,硬链接依旧会有原始文件的数据。因为硬链接是原始文件的镜像副本。

在这里插入图片描述

2.1 软链接

在 Windows 中有一个文件快捷方式功能,用于给文件创建快捷方式,如下所示:

在这里插入图片描述
软链接类似于上图中的快捷方式。每个软链接文件都有自己的 inode 值,该值引用原始文件。

对一个文件中信息的任何更改都会反映到另外一个文件中。可以跨不同的文件系统连接软链接,如果源文件被删除或传输,软链接文件将无法正常工作。这种链接被称为悬挂链接。删除软链接没有效果,但如果删除原始文件,可能会导致链接停止工作。🎯

可以通过以下命令创建文件的软链接:

[hyr@centos-hyr linux15]$ ln -s d1/d2/d3/test test.c.soft
                         // d1/d2/d3/test : 表示原始文件
                         // test.c.soft : 生成软链接的名称

通过以下代码我们发现,创建的软链接类似于 Windows 中的快捷方式,可在常用路径下创建路径较深可执行程序的快捷方式,便于快捷的执行程序。

在这里插入图片描述

在 shell 下执行 ll -i 命令查看文件的 inode 号,可以看到,软链接文件与原始文件的 inode 号是不同的,说明软链接相对于原始文件是一个独立文件,软链接文件里面实际存储的是原始文件的路径(该文件所在路径到原始文件所在路径的路径),而不是其内容。所以相对于原始文件要小很多。

在这里插入图片描述

关于软链接:

  • 可以遍历文件系统
  • 允许跨越目录去连接
  • 权限将不会被修改
  • 具有与原始文件不同的我呢见权限和 inode
  • 只是原始文件的路径,而不是其内容
  • 如果我们改变了原始文件的名称,那么该文件所有的软链接都变成了悬空,即它们变得毫无意义

2.2 硬链接

Linux 中的硬链接相当于保存在磁盘驱动器上的文件 - 它实际上是指里链接到磁盘上的某个位置。硬链接的本质是原始文件的镜像。硬连接和软链接之间的区别就在于,删除了原始文件对硬链接是没有影响的,但是删除原始文件对软链接是有影响。因此,硬链接最大的好处是,即使你删除了原始文件,你依旧可以通过硬链接来访问文件。🎯

可以通过以下命令来创建文件的硬链接:

[hyr@centos-hyr linux15]$ ln test.txt test.txt.hard
                          // test.txt : 原始文件
                          // test.txt.hard : 创建的硬链接文件

在这里插入图片描述

通过命令 ll -i 命令查看文件的 inode 号,如下:软链接文件与硬链接文件的 inode 号是一样的,且硬链接文件的大小与源文件的大小也是相同的。在建立硬链接之后,原始文件和硬链接文件的链接数都变为了 2 (为什么?)。

如下所示,若创建一个普通文件,则文件初始的硬链接数为1;若创建一个目录,则文件的硬链接数为2(why?)。

在这里插入图片描述

当我们创建目录时,该目录下会生成两个隐藏文件 .... 表示当前目录,.. 表示上级目录。因此,.dir 都表示同一个文件(它们的 inode 都是一样的),因此目录生成时硬链接数就是2。

在这里插入图片描述

关于硬链接:

  • 不能链接目录
  • 每个硬链接文件都被分配了与原始文件相同的 inode 值,因为它们引用相同的物理文件位置。硬链接更加灵活,即使原始文件或被链接的文件在整个文件系统中移动也能保持链接,尽管硬链接不能跨不同的文件系统。
  • 任何硬链接文件的大小都与原始文件相同,如果我们改变了任何硬链接的内容,那么所有硬链接文件的大小都会更新
  • 即使我们改变了原始文件的文件名,硬链接也可以正常工作
  • 不能为目录创建硬链接以避免递归循环
  • 硬链接的缺点是不能为不同文件系统上的文件创建硬链接,也不能为特殊文件或目录创建硬链接

软链接和硬链接之间的差异:

参数软链接硬链接
inode 值与原始文件的 inode 值不同与原始文件的 inode 值相同
目录可以链接目录不能跨目录链接
删除原始文件若原始文件被删除,该链接将失效,因为它只是原始文件的快捷方式即使删除原始文件,硬链接也将继续运行,因为它访问的数据与原始文件相同
速度较慢较快
内存消耗

总结:硬链接占用的空间更少,工作速度更快,但对它的修改会反映到原始文件中。而软链接需要更多的空间,对软链接的任何更改都不会对原始文件产生影响。

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

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

相关文章

JavaSE学习进阶day06_01 数据结构(进阶)

第一章 数据结构(温习数据结构的内容) 1.1 树基本结构介绍 树具有的特点: 每一个节点有零个或者多个子节点 没有父节点的节点称之为根节点,一个树最多有一个根节点。 每一个非根节点有且只有一个父节点 名词含义节点指树中的…

第二届“威固新能源 GO野”,威固重塑新能源出行不凡体验

中国,上海,近日——全球特种材料公司伊士曼旗下汽车膜品牌威固(V-KOOL),于近日开启了第二届“威固新能源 GO野”不凡之旅,通过专为新能源而来的创新产品与服务,引领高端新能源车主驶出城市生活的…

晨控可视化标签在资产管理上的应用及优势

晨控可视化标签在资产管理上的应用及优势 资产是企业功能的核心组成部分,是企业重要的基础设施建设。资产存在的形式各种各样,不仅具有价值高、流动性强、安全管理困难的特点,而且成为资产管理的重要环境之一。通过射频识别技术,…

【00-Java Web先导课】-如何进行IDEA的安装

前沿 Pycharm与IDEA激活教程一样,本篇以IDEA激活教程为例进行保姆级教学 文章目录 前沿一、支持系统二、软件版本1.引入库 三、软件下载教程1、点击网址进入jetbrains官网2、按照下图选择相应下载的软件3、按照如图选择需要下载的版本4、按照如下方式进行下载软件 四…

Web服务器

目录 什么是Web服务器? Web容器 Servlet Servlet 规范 Servlet 的API结构 编写Servlet servlet生命周期(产生到销毁的过程) 服务器产生响应信息的两种格式 什么是Web服务器? Web服务器是一个程序,用于接收客户…

【LeetCode: 718. 最长重复子数组 | 暴力递归=>记忆化搜索=>动态规划】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Scillus | 来吧!它可以大大简化你的Seurat分析流程哦!~(一)(数据预处理)

1写在前面 太久没更了,真是累到极致,每天回到家都只想睡觉。😭 今天介绍一下Scillus包,是一个基于Seurat和ggplot2的R包,用于增强scRNA-seq数据的处理和可视化。🧐 它可以对Seurat对象进行多种类型的图形展…

多重背包问题的三种解法(转化为01背包、二进制拆分、单调队列优化)

多重背包问题的三种解法 转化为01背包二进制拆分优化单调队列优化 转化为01背包 题目链接:acwing4. 多重背包问题 I 题目描述 数据范围 思路: 可以转化为01背包问题求解,将s个物品都看作单独的一个物品,时间复杂度为 O ( N ∗ V ∗ S ) O(…

【一】MATLAB基础知识

【一】MATLAB基础知识 1 数值数据类型的分类 整型 无符号整数:无符号8位整数、无符号16位整数、无符号32位整数、 无符号64位整数。 带符号整数:带符号8位整数、带符号16位整数、带符号32位整数、 带符号64位整数。 无符号8位整数数据范围&#xff…

树和二叉树(概念及其结构)

1.树概念及结构(了解)‘ 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它 叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶…

php+vue+mysql校园大学生兼职信息网站系统

商家功能模块 商家通过点击后台管理,进入页面可以进行首页、个人中心、热门兼职管理、兼职接单管理、学生咨询管理、兼职任务管理、完成评价管理等功能模块,进行相对应操作 兼职接单管理:通过兼职接单管理可以进行获取兼职名称、专业、分类、…

佳电股份:智能互联 绿色驱动 拥抱未来

4月 13—15 日,2023年易派客工业品展览会、石油石化工业展览会、第七届中国石油和化工行业采购年会,在苏州国际博览中心举行。在本次展会上,佳电股份展出了超高速永磁电机、超高效高压三相异步电动机、智慧电机以及配套服务等主要产品。 哈尔…

linux 下 mysql 平滑升级,不暴力

只适合版本跨越较小的,如果从5到8这种不支持 查看当前版本5.6.40,升级到5.6.50(因为一些漏洞的原因) 1:下载需要升级的版本 2:解压 3:停止当前的mysql服务 service mysql stop 4:备份原先系…

Spring Boot的基础使用和< artifactId>spring-boot-maven-plugin</ artifactId>爆红的处理

Spring Boot的基础使用和< artifactId>spring-boot-maven-plugin</ artifactId>爆红的处理 Spring Boot概述 微服务概述 微服务Microservices是一种软件架构风格&#xff0c;他是以专注于单一责任与功能的小型功能区块Small Building Blocks 为基础&#xff0c;…

FL Studio21安装体验试用下载fl水果支持最新中文语言功能

FL Studio是什么&#xff1f;如果你打算将来朝着艺术和音乐方向发展&#xff0c;那么学习音乐理论和音乐制作就是一门基础了。FL Studio 21还提供了几十个内置的音乐和声音样本库&#xff0c;以及多种音频效果处理器和虚拟乐器&#xff0c;包括合成器、鼓机、效果器等。这些插件…

【C++初阶】:类与对象(上)

类与对象 一.面向对象的初步认识二.初步认识类三.类的权限四.类的声明和定义五.封装六.类的实例化七.类的大小 一.面向对象的初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 例如洗衣服 而C是基于…

GFD233A 3BHE022294R0103

GFD233A 3BHE022294R0103 ABB KUC321AE PLC模块 HIEE300698R0001 KU C321 AE01 ABB KUC711 3BHB004661R0001 高压变频模块 KUC711AE ABB KUC755AE105 3BHB005243R0105 驱动控制系统模块 KUC755 ABB KUC755AE106 3BH005243R006 控制系统模块 KU C755 AE 106 ABB LDGRB-01 3BSE01…

react-10 函数式写法rsf,配合HOOKS钩子函数

函数式跨组件通信&#xff1a; useContext 实现跨组件传值&#xff0c;内层组件获取context中的值 用来解决同一个父组件的后代组件之间的数据共享问题, 同一个父组件的所有后代组件都可以用 useContext() 从最近的 context 中获取. 性能优化&#xff1a;useMemo &#xff1a…

cv2 五边形矫正,python ,多边形透视变换

#图像透视变换--矫正 #根据最大的5边形进行透视变换 #获取最大和最次长 周长对应的轮廓 #该轮廓进行5边形拟合逼近 #进行透视变换&#xff1a;应用两线交点 import numpy as np import cv2#大津阈值法 OSTU def myApprox(con,pointnum5):# con为预先得到的最大轮廓num 0.001…

2023年CDGA/CDGP数据治理工程师认证报名需要什么条件?

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…