代码编织梦想

什么是inode?

​ 理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

​ 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中

​ 那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

inode的内容(inode是一个结构体)

我们可以通过stat指令查看一个文件的inode信息

在这里插入图片描述

inode中的内容:

  • 文件的字节数,块数
  • 文件的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:ctime、mtime、atime
  • 链接数,即有多少文件名指向这个inode
  • 文件数据block的位置
  • inode编号(对应数组的下标)

block区和inode区的理解

​ 硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区(block区),存放文件数据;另一个是inode区,存放inode所包含的信息。inode区是以数组的形式存储的,对应的数组下标就是inode编码,每个元素就是一个结构体(结构体内容在上面已说),inode结构体中会有一个指针,指向block区也就是存放的文件内容。
​ 我们可以通过指令df查看每个硬盘分区的inode总数和已经使用的数量.

在这里插入图片描述

inode编号

inode编号是很重要的,当系统在找一个文件时,步骤如下:

  • 通过文件名先找到文件的inode编号
  • 通过inode编号找到文件inode信息
  • 通过inode信息中的block指针找到文件内容

我们可以通过ls -i查看文件的inode编号

软链接与硬链接

  在linux系统中,硬链接 (hard link) 和软链接 (symbolic link) 是两个非常重要的概念

  可以用ln命令建立硬链接,加上-s选项建立软链接

luzelin@DESKTOP-5VT4IIQ Link % touch source                                                                 
luzelin@DESKTOP-5VT4IIQ Link % ln -s source S1                                                               
luzelin@DESKTOP-5VT4IIQ Link % ln source H1                                                                 
luzelin@DESKTOP-5VT4IIQ Link % ln source H2                                                                 
luzelin@DESKTOP-5VT4IIQ Link % ll -i                                                                        
total 0
6755399441374992 -rw-r--r-- 3 luzelin luzelin 0 Jul 28 09:37 H1
6755399441374992 -rw-r--r-- 3 luzelin luzelin 0 Jul 28 09:37 H2
3940649674055655 lrwxrwxrwx 1 luzelin luzelin 6 Jul 28 09:37 S1 -> source
6755399441374992 -rw-r--r-- 3 luzelin luzelin 0 Jul 28 09:37 source

  我们仔细观察一下发现,source、H1、H2拥有一样的i结点(显示结果的第一列,即6755399441374992),甚至于连权限属性都一模一样。而S2拥有另外一个独立的i结点。我们在前面曾经说过,每一个i结点对应一个实际的文件。所以,我们可以发现,建立的硬链接实际上跟我们的源文件是一样的。而软链接则是重新建立了一个独立的文件。

  事实上,硬链接的本质就是一条文件名和i结点的关联记录而已(i节点的引用次数+1),作用是容许一个文件拥有多个有效路径名,这样用户就能够创建硬链接到重要文件,以防止“误删”的功能。

  另外,我们观察一下这几个文件的大小,由于我们的源文件是空文件,所以大小是0。那为什么两个硬链接也是0?而软链接却是6呢?

  因为硬链接关联着我们的源文件,所以源文件的大小是多大,它们就是多大。至于软链接的大小为什么是6,这个就比较有趣了,大家观察一下软链接指向的源文件名(“source”)的长度,是不是6?对了,我们的软链接会写上链接文件的文件名。一个字母一个字节,所以是6个字节,所以软链接的大小是6。

  可能有人对于上面的说法有怀疑,别慌,我们接着测试一下。我们往空的源文件里写入一些东西。

luzelin@DESKTOP-5VT4IIQ Link % vim source     //添加内容                                                     
luzelin@DESKTOP-5VT4IIQ Link % ll -i                                                                        
total 0
6755399441374992 -rw-r--r-- 3 luzelin luzelin 122 Jul 28 09:49 H1
6755399441374992 -rw-r--r-- 3 luzelin luzelin 122 Jul 28 09:49 H2
3940649674055655 lrwxrwxrwx 1 luzelin luzelin   6 Jul 28 09:37 S1 -> source
6755399441374992 -rw-r--r-- 3 luzelin luzelin 122 Jul 28 09:49 source
luzelin@DESKTOP-5VT4IIQ Link % cat source                                                                   
aaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccdddddddddddddddddddddddddeeeeeeeeeeeeeeeee
luzelin@DESKTOP-5VT4IIQ Link % cat H1                                                                       
aaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccdddddddddddddddddddddddddeeeeeeeeeeeeeeeee
luzelin@DESKTOP-5VT4IIQ Link % cat H2                                                                       
aaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccdddddddddddddddddddddddddeeeeeeeeeeeeeeeee
luzelin@DESKTOP-5VT4IIQ Link % cat S1                                                                       
aaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccdddddddddddddddddddddddddeeeeeeeeeeeeeeeee

修改完源文件后,硬链接文件的大小和所有链接文件的内容也跟着修改了,印证了刚才的说法。

当我们删除了源文件之后,发现硬链接还能正常显示原本的内容,而软链接则提示文件不存在,这是怎么回事?

  我们刚才说过,软链接是建立了另一个新的独立的文件,它指向源文件,因为源文件没了,所以它就不能正常指向了;而硬链接为什么依旧能显示原来的内容呢?回到我们一开始的解释,硬链接实际是一条文件名与i结点的记录。所以,在删除源文件的时候,系统则将链接数减1,当链接数为0的时候,inode就会被系统回收,文件的内容才会被删除。

luzelin@DESKTOP-5VT4IIQ Link % ll -i                                                                         
total 0
6755399441374992 -rw-r--r-- 3 luzelin luzelin 122 Jul 28 09:50 H1
6755399441374992 -rw-r--r-- 3 luzelin luzelin 122 Jul 28 09:50 H2
3940649674055655 lrwxrwxrwx 1 luzelin luzelin   6 Jul 28 09:37 S1 -> source
6755399441374992 -rw-r--r-- 3 luzelin luzelin 122 Jul 28 09:50 source

luzelin@DESKTOP-5VT4IIQ Link % rm source                                                                     
luzelin@DESKTOP-5VT4IIQ Link % ll -i                                                                         
total 0
6755399441374992 -rw-r--r-- 2 luzelin luzelin 122 Jul 28 09:50 H1
6755399441374992 -rw-r--r-- 2 luzelin luzelin 122 Jul 28 09:50 H2
3940649674055655 lrwxrwxrwx 1 luzelin luzelin   6 Jul 28 09:37 S1 -> source   //爆红错误

链接数看第3

总结:

  • 硬链接记录的是目标的inode,软链接记录的是目标的路径(分绝对路径和相对路径)。
  • 软链接就像是快捷方式,而硬链接就像是备份。
  • 软链接可以做跨分区的链接,而硬链接由于inode的缘故,只能在本分区中做链接。所以,软链接的使用频率要高很多。

为什么目录不支持硬链接

  那么为什么目录不支持硬链接呢?原因就是允许目录的硬链接可能会打破文件系统目录的有向无环图结构,这可能会导致一些遍历文件树的程序出错。出现子目录是父目录的情况,造成无限循环,比如ls -r, pwd

  为什么软链接(符号链接)没有这样的限制呢?可以理解为符号链接是一个独立文件,有自己的inode,在遍历到符号链接时,得到的是它本身的信息,而不是链接的那个文件

  当然如果一定要实现目录的链接,可以考虑软链接的方式或者挂载

  
  
参考:

inode详解

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

linux的文件目录-inode、软链接与硬链接理解_潇潇方远的博客-爱代码爱编程

一、inode 理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。   操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位

硬链接与软链接-爱代码爱编程

硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。 链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。 通过文件名打开文件 若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名(见 图 2.h

软链接与inode小结-爱代码爱编程

inode是什么 1.inode是描述文件的元数据,包括文件大小、属主、权限、时间、对应的blocks等; 2.inode在磁盘特定区域,格式化时就分配好了。 3.inode值:是inode信息的一条记录,代表某个具体的记录。 inode为什么 1.检索文件内容:inode保存了文件对应的block。检索文件的过程,根据文件目录找对应的inode值,

inode 与 block和硬链接与软链接的分析详解-爱代码爱编程

inode 与 block和硬链接与软链接的分析详解 一、inode 与 block1、inode 和 block 概述2.inode 的内容3、inode的大小二、硬链接与软链接1、硬链接2、软链接3、软连接与硬链接的区别 一、inode 与 block 操作系统的文件数据除了实际内容之外,通常含有非常多的属性,例如 Linux 操作系统的

linux硬链接指向inode,linux中的软链接、硬链接和inode(索引节点)-爱代码爱编程

linux系统有两种链接: 一种被称为硬链接(Hard Link),相当于一个人有多个名字。 另一种被称为符号链接(Symbolic Link)符合链接也称为软链接,相当于windows系统中的快捷方式(LNK)。 创建硬链接的方法 ln file1 file2 image.png *硬链接次数由原来1变成变成2 符合链接的创建方法

linux创建a1的硬链接a2,详解 inode节点、软链接以及硬链接-爱代码爱编程

inode table  索引节点表 要理解inode,要从文件存储说起,文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最

了解inode,软链接和硬链接-爱代码爱编程

目录 一.inode 1.1 什么是inode 1.2 简单了解文件系统 1.2.1 硬盘硬件结构 1.2.2 简单了解文件系统  1.2.3 目录文件 2. 总结 二.硬链接 三.软链接 一.inode 1.1 什么是inode         文件包含属性和数据。inode是文件一个文件的属性集合,它和文件的关系是1对1的关

Linux学习之inode和软链接、硬链接-爱代码爱编程

文章目录 1.inode学习2.硬链接和软链接3.硬链接和软链接的创建语法3.1.创建硬链接3.2.创建软链接3.2.1.目标使用绝对路径3.2.2.目标使用相对路径 1.inode学习 参考: 理解inode 这个博客里面也包含了对下面的软链接和硬链接的讲解,但是下面软链接和硬链接的博客里的图很好,更加形象。 2.硬链接和软链接 参考:

软链接和硬链接区别(附inode)-爱代码爱编程

一.建立 软链接:ln -s oldfile(源文件) newfile(新文件) 硬链接:ln oldfile(源文件) newfile(新文件)       或     link oldfile(源文件) newfile(目标文件) 你要对源文件建立链接 二.理解 1.软链接理解成Windows的快捷方式,可通过快捷方式进入文件  

文件系统2:软链接、硬链接与inode-爱代码爱编程

在之前的文章中已经介绍了磁盘、文件系统与inode的关系,没看过的同学可以先看一下这篇文章。 什么是文件系统?什么是文件系统?我们都知道,数据是存储在硬盘、u盘等存储设备中的,数据在这些物理设备中的最终形态,都是0和1。而我们平时在windows或linux操作系统中,都是以文件夹、目录的形式存放各种文件的。https://mp.weixin.q

inode、软链接、硬链接_小小酥诶的博客-爱代码爱编程

文件 = 文件内容 + 文件属性。 它保存在磁盘上。 磁盘的使用单位为扇区,一个扇区的大小为512字节。通过其所在盘面,所在扇区,所在磁道,就可以定位文件。 磁盘的盘片可以抽象成线性的。好比磁带。 这是Linux ext2文件系统的典型磁盘文件系统图。分区划分的block大小在格式化的时候确定,并且不可修改。 文件的属性存放在inodeTable中