代码编织梦想

目录

一.inode

1.1 什么是inode

1.2 简单了解文件系统

1.2.1 硬盘硬件结构

1.2.2 简单了解文件系统 

1.2.3 目录文件

2. 总结

二.硬链接

三.软链接


一.inode

1.1 什么是inode

        文件包含属性和数据。inode是文件一个文件的属性集合,它和文件的关系是1对1的关系。一个文件只有一个inode。

        文件的数据,保存在数据块中,文件数据和文件的关心是多对1的关系。一个文件可以有很多内容。

1.2 简单了解文件系统

1.2.1 硬盘硬件结构

        文件保存在硬盘中,为了理解首先我们先来了解一下硬盘的物理结构。

一个磁盘具有两个磁盘面,每个磁盘面都可以保存数据。磁盘读写的最小单位为扇区,一般含有512字节。很明显,如果每次读写都以这么小为单位,那这读写的效率会非常低。

所以,文件系统把多个扇区组成了一个逻辑块,每次读写的最小单位就是逻辑块(数据块),Linux 中的逻辑块大小为 4KB,也就是一次性读写 8 个扇区,这将大大提高了磁盘的读写的效率。

读写磁盘数据时,首先由先确定好数据在哪个磁盘面,每一个磁盘面都有一个磁头,使用哪一个磁头确定了哪个磁盘面。

然后确定好柱面,在磁盘面上可以形成很多同心圆。每一个磁盘同一个位置的同心圆确定一个柱面。

最后确定数据在哪个扇区,即找到数据。 

1.2.2 简单了解文件系统 

        为了很好的管理硬盘上的文件。我们可以将硬盘抽象成一个逻辑结构,抽象成一个数组。数组元素的大小为512字节。我们知道一个硬盘大小很大,为了更好管理硬盘,我们将硬盘进行了分区。但是,一个分区的大小还是太大了,于是在分区里,还需要进行分块组。

  •  boot blocks(启动块):大小是确定的,占据一个扇区,512字节。它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用 446 字节,分区表为 64 字节,结束符占用 2 字节。其中分区表每记录一个分区信息就需要 16 字节,这样一来,最多就只有4个分区信息可以写到第一扇区中,这4个分区就是4个主分区。

块组:

  • super block(超级块):存放文件系统本身的信息。与文件系统有关。记录的信息由block和inode的总数等。每一个块组都由一份super block,备份。防止一份损坏后,导致其它块组也不能使用。super block里的信息被破坏,整个文件系统结构就被破坏了。
  • Group Descriptor Table(块组描述符):简称GDT,描述块组的属性信息。有多少inode被使用了和没被使用,有多少数据块被使用和没被使用等。
  • block bitmap(块位图):记录data blocks中哪个数据块被使用,哪个数据块没被使用。
  • inode bitmap(inode 位图):记录inode table中哪个被使用,哪个没被使用。

位图:用每一位的0或者1状态表示未使用和使用。

  • inode table(i结点表):存放文件属性。
  • data blocks(数据区):存放文件内容。
  • 文件与inode和data block的关系

  • 通过什么找到一个文件

注意:inode 名称是存在inode里的。一个inode就会有一个数组,与数据块产生对应关系。

如果想知道inode table和data blocks中有多少使用了,有多少没有使用,可以遍历对应位图,找有多少0,多少1。但是在块组中,也可以通过GDT得到。

1.2.3 目录文件

一个目录也是文件。是文件就会有inode和数据。

目录的属性保存的是目录船舰时间,修改时间等。

目录的数据保存的是目录里的文件的文件名和对应文件inode 名称的一种对应关系。

2. 总结

  • 如何让在目录下建立一个文件

找到该目录所在的分区和块组。

1.在inode bitmap中找到一未使用的位,将该位置1。在inode table中找到对应位的空间,保存要创建文件的属性。

2.在block bitmap中找到一个或者多个未使用的位,将该位置1。在data blocks中找到对应数据块,保存要创建文件的内容。

3.在inode table新创建文件的inode的数组中填入数据块信息,建立映射关系。

4.将inode 名称和文件名对应关系保存到目录的数据块中。

  • 如何找到文件

找到该目录所在的分区和块组。

1.在找到目录的inode 名称,通过inode 名称找到inode table目录的inode,通过里面的数组,找到目录的数据。目录的数据保存的是文件名和对应文件名inode 名称的对应关系。

2.我们知道文件名后,通过目录数据找到文件的inode 名称,就可以找到文件inode,通过文件inode里的数据,可以找到文件数据。

  • 如何删除文件

知道文件的inode,就可以得到数据块。只需要将inode bitmap对应位置0,将blocks bitmap对应位置0,即可。删除文件并未将数据真正删除。

  • 恢复一个文件

需要得到文件的inode id,就可以找到inode和数据块,找到块位图和inode位图对应位置为1,即可。

二.硬链接

Linux系统允许多个文件指向一个inode 名称。可以用不同的名称访问同一文件的内容,这种方式叫做硬链接。硬链接和指向的文件共享一个inode,没有独立的inode,不是一个独立的文件。

怎么实现硬链接?

通过命令 " ln  指向文件  链接文件 "

目录里面数据块保存的是文件名和inode的对应关系,增加一个硬链接,说明在该目录的数据块中,该inode同时对应了另外一个文件名。意思就是一个inode,对应两个文件名。(文件名并不代表真正的文件,inode才代表真正的文件)。这说明文件系统中只有一个文件,只是在目录的数据块中增加了一层对应关系。

将硬链接中的某个文件内容改变,硬链接的所有文件内容都会改变。但是删除一个硬链接中的文件,并不会对其它文件产生影响。

 我们平时使用的"ls  -l"命令

 从上图中我们发现,创建一个目录后,硬链接数为2,这是因为,目录里有两个隐藏文件,分别是"."和"..",分别标识当前目录和上一级目录。"."增加了一个当前目录的硬链接数,所以为2。

三.软链接

硬链接是通过inode引用另外一个文件,软连接是通过文件名引用另外一个文件。

软连接具有独立的inode,说明是一个独立的文件。

实现软连接:ln -s 指向的文件 链接文件 

 

 软连接文件具有独立的inode,是一个独立的文件。说明在文件系统中,增加了一个文件。

假设文件A是软连接文件,文件B是连接的对象文件。

文件A的内容是文件B的路径,读取文件A时,会直接读取到文件B。

 如果删除文件B,读取文件A时会报错

文件A引用的是文件B的文件名,并不是文件B的inode,所以文件B的链接数不变。 

软链接的应用场景:当一个可执行程序的路径很深,但是你想在当前目录下执行那个可执行程序,可以使用软链接。这个相当于windows下的快捷方式。

软硬链接的区别:

软连接是一个单独的文件,具有独立的inode,实际是在文件系统中增加了一个文件。

硬链接不是一个独立的文件,实际是在存在的目录的数据块中,增加了链接文件的inode与链接文件名的对应关系。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_57023347/article/details/119883952

操作系统 — 浅析硬链接和软链接_dawn_sf的博客-爱代码爱编程_操作系统硬链接和软链接

 浅析硬链接和软链接 上一篇我们了解到文件系统,我们了解到文件系统的结构包括超级块,inode节点,以及数据块, 其中inode节点包含了inode数组,数组 当中存在许 多的inode节点.然后每一个文件或者目录都有自己对应的inode,其中我们又引出了其中每一个inode的节点当中有一个链接

linux的硬链接和软链接——从inode了解linux文件系统_electrocrazy的博客-爱代码爱编程

1 Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交

理解文件系统----inode与软硬链接_honeycr的博客-爱代码爱编程

在之前一篇文章里,我们讲了文件的部分属性,现在我们来了解一下文件系统。 点击打开链接 一、inode 1、什么是inode 理解inode,要从文件存储说起。 文件储存在硬盘上,硬盘的最小存储单位叫做“

在linux中inode和软链接与硬链接的联系_经纬7度的博客-爱代码爱编程

 Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程创建信息的逻辑单元可被多个进程并发使用。在 UNIX 系统中,操作系统为磁盘上的文本与图像、鼠标与键盘等输入设备及网络交互等 I/O 操作设计了一组通用 API,使他们被处理时均可统一使用字节流方式。换言之,UNIX 系统中除进程之外的一切皆是文件

理解linux中inode索引节点、软链接、硬链接_emotionalx*的博客-爱代码爱编程

目录 一 、关于inode索引节点 二、执行cp、rm、mv操作时对inode的影响 二、硬链接 三、软链接 四、软链接和硬链接区别  一 、关于inode索引节点 inode,中文译名叫“索引节点”,是依附于文件系统的存在而存在的。在计算机的硬盘上,最小的存储单位是“扇区”,也就是说,硬盘是由一个一个很小的“扇区”组成的。当我们操作计算

linux中的软链接和硬链接-爱代码爱编程

在linux系统中,硬链接(hard link)和软链接(symbolic link)是两个非常重要的概念,而很多朋友在学习的时候,通常不容易区分这两个概念,所以在这里做一些记录,大家共同进步。 在正式开始说明前,先讲一些不算是题外话的题外话。 对于linux有一定了解的朋友都知道linux里面有一个重要的概念叫做i结点,即inode。 如果有人问你

软连接和硬链接(linux中ln命令)_kid怪盗基德1412的博客-爱代码爱编程

如果要想说清楚 ln 命令,则必须先解释下 ext 文件系统是如何工作的。我们在前面讲解了分区的格式化就是写入文件系统,而我们的 Linux 目前使用的是 ext4 文件系统。如果用一张示意图来描述 ext4 文件系统,则可以参考图 1。                                                           

ln - 软链接与硬链接区别_ilpanda的博客-爱代码爱编程_ln硬链接

引言 在介绍硬链接和软链接之前,首先介绍下硬盘相关的知识,主要是了解下 inode 。 硬盘 硬盘设备是由大量的扇区组成的。以 MBR 分区为例。每个扇区的容量为 512 字节。其中第一个扇区最重要。它里面保存着主

硬链接与软链接 (符号链接)的区别与联系_saturnus.的博客-爱代码爱编程_符号链接是软链接什么关系?

在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link)。 硬链接与软链接 是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux 虚拟文件系统 (VFS) 的四个基本概念之一。通过剖析硬链接

Linux - 通过软硬链接学习inode-爱代码爱编程

​ 说到软硬链接,首先要了解inode是什么,了解了inode的结构,会有助于区分软硬链接 inode inode 内容 在Linux系统中,每个文件都有对应的inode,而inode作为数据索引的标识符,其中包含了一个文件的基本信息,如inode编号,修改时间,文件的位置等。所以linux中不使用文件名,而是使用inode号来识别文件。 通常打开

php 硬链接,Linux硬链接和软链接详解(深度剖析)-爱代码爱编程

通过学习《Linux ln 命令》一节可以看到,使用 ln 命令建立硬链接和软链接非常简单,那这两种链接有什么区别,它们各自的作用和特点又是什么?为了解开这些疑问,本节将对硬链接和软链接做深度剖析。 对硬链接的深度剖析 首先,我们再来建立一个硬链接文件,然后看看这两个文件的特点。 [root@localhost ~]# touch test #

linux怎么查看文件软连接,如何辨别Linux软链接和硬链接-爱代码爱编程

Linux系统中什么是软链接,什么是硬链接,两者之间又有哪些区别?下面小编给大家做个Linux系统的软链接和硬链接的比较,以便你有更深入的了解。 我自己做的图片大家参考下: 软链接硬链接的区别: 硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode

linux软硬链接 计数,深入理解Linux的软链接和硬链接-爱代码爱编程

一直没有深入了解过链接这块的知识,昨晚有个朋友问我这问题,一下子激发了我的兴趣。今天早上过来看了看鸟哥的书然后在stackoverflow上找了一番,感觉自己现在的理解到位了,起码这样理解容易记忆。先来做个实验,在我们的用户目录下,建立一个测试文件夹,然后新建一个文件,并创建这个文件的软链接和硬链接。如下: vim file1 #新建文件 ln -

linux硬链接是干嘛的,linux 硬链接和软链接深入了解-爱代码爱编程

linux 硬链接和软链接深入了解 在学习linux的过程中,我经常把软硬链接,所以今天专门查了一些资料,然后整合在自己的博客中,方便以后复习,查看。 一方面也是因为看了vamei的linux的概念与体系系列文章,感觉不全的做些补充。 软链接相当于windows中的快捷方式。硬链接相当于一个灾备系统,数据存放在两处,与复制不同的是两处之间存在同步

linux下软链接与硬链接的区别_linux下软链接和硬链接的区别-爱代码爱编程

由于下面会说到inode,所以如果没有了解过,请务必搞懂inode的真正含义,厚颜无耻的推荐我的一篇博客: Linux磁盘与文件系统管理 如果我们在系统中新建一个文件,我们看到的文件名实际上只是表面现象,本质上会分配一个