理解Linux中inode索引节点、软链接、硬链接

目录

一 、关于inode索引节点

二、执行cp、rm、mv操作时对inode的影响

二、硬链接

三、软链接

四、软链接和硬链接区别 



一 、关于inode索引节点

inode,中文译名叫“索引节点”,是依附于文件系统的存在而存在的。在计算机的硬盘上,最小的存储单位是“扇区”,也就是说,硬盘是由一个一个很小的“扇区”组成的。当我们操作计算机去读取硬盘上的某个文件时,系统如果一个扇区一个扇区的去读取,那么无疑会大大降低计算机的读取效率。实际上,系统在读取硬盘时,会同时读取多个扇区,相当于将多个扇区组合成一个小块,那么这个“块 ”,就是计算机中文件存取的最小单位。我们所有的文件数据,都是存放在这样的“块”中。

这时候会出现一个问题,那就是当我们使用操作系统查找文件是,系统是如何在海量的数据当中找到我们想要得到的文件呢?

想象一下我们去图书馆借阅书籍,图书馆内会有一个地方放置了好多卡片,上面记录了每本书的编号、名字、作者、出版日期等信息,那我们就可以凭借卡片上的编号去 对应的分类区找到我想要的书。同样的,在计算机内,也存在这样一个地方,放置了好多“卡片”,这些卡片上记录了每个文件的 作者、文件创建日期、文件的大小等等 。那么计算机就可凭借这些“卡片”,找到我们想要的文件。这些“卡片”,就是“索引节点”,即inode。每个文件都有一个对应的inode,其中记录了该文件的元信息 (不包括文件名)。

查看文件inode的方法 :stat  + 文件名

理解Linux中inode索引节点、软链接、硬链接

文件的元信息中主要信息包括:

文件字节数:size

文件拥有者:Uid

文件所属组:Gid

文件 链接数:Links

文件的读、写、执行权限:Access

文件的索引节点编号:Inode

文件的时间戳:mtime 记录文件内容修改时间(元数据)、ctime 记录文件属性修改时间、atime 读取文件时间

inode大小

查看各个磁盘分区的inode节点总数和已使用数量方法:df  -i

理解Linux中inode索引节点、软链接、硬链接

由上图可以看到,每个磁盘分区的inode节点数量是一定的 ,因此有事会出现磁盘还有好多剩余空间,但是创建新文件时提示磁盘空间已满。下方实验:

在此我使用/boot做实验,创建了大量的空文件夹,将该磁盘带的inode节点编号耗尽,之后再次新建文件时发现会报错,提示磁盘空间不足。

理解Linux中inode索引节点、软链接、硬链接

 使用df命令查看各个磁盘的空间使用率,发现/boot只使用了43%,还有一大半空间是未被使用的。

理解Linux中inode索引节点、软链接、硬链接

 使用df  -i 查看磁盘节点数量使用情况,发现/boot中的inode节点编号使用率已达100%。

理解Linux中inode索引节点、软链接、硬链接

用户通过文件名打开文件时,系统的内部过程:

这个过程大致分为三步:

第一步、系统通过文件名找到对应的inode节点编号。

第二步、通过inode编号获取对应的inode信息。

第三步、根据inode信息,找到文件所在的位置,读出数据。


二、执行cp、rm、mv操作时对inode的影响

cp命令:

分配一个空闲的inode号,在inode表中生成新条目

在目录中创建一个目录项,将名称与inode编号关联

拷贝数据生成新的文件。

rm命令:
链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

mv命令:

如果mv命令的目标和源在相同的文件系统,作为mv 命令,用新的文件名创建对应新的目录项,删除旧目录条目对应的旧的文件名。
不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!
 


二、硬链接

了解了inode的概念,我们知道,文件和inode是一一对应的,一个inode对应一个文件名。

但是在Linux中,允许多个文件名指向同一个inode。这意味着可以使用多个不同的文件名访问同一个文件,同时对文件内容进行修改,会影响到所有的文件名,但是,删除其中的一个文件名,对其他文件名不产生影响,其他文件名可以正常访问文件。这种情况就被成为硬链接。

创建硬链接的方法:     ln   filename   [linkname ]
例如下图,为issue.q创建硬链接test.txt,可以看到两个文件名的元信息完全相同。

理解Linux中inode索引节点、软链接、硬链接

理解Linux中inode索引节点、软链接、硬链接

inode中,有一项是链接数Link,它显示的是指向该文件的硬链接数量,每增加一个文件名指向该inode,那么Link会加一。如上图中,issue.q拥有两个硬链接 。

当我们删除其中一个硬链接文件名是,对其他硬链接文件名没有影响,但是Link数量会减一,一直到Link减小到零,表明没有文件名指向该inode,那么意味着这个文件真正被删除,系统会收回inode以及对应的数据块(数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖)。

关于目录文件的链接数说明

当我们创建一个新的目录时,会发现这个刚刚创建的目录链接数为2,这是因为这个目录下还有目录项“.”,它的inode节点编号相当于当前目录的inode节点编号。

理解Linux中inode索引节点、软链接、硬链接

 理解Linux中inode索引节点、软链接、硬链接


三、软链接

创建软链接的方法:ln -s filename ​​ [linkname]

理解Linux中inode索引节点、软链接、硬链接

软链接也叫符号链接,它相当于windows中的快捷方式。

当我们需要在不同目录用到相同的文件时,我们不需要在每个目录下都放置一个相同的文件,而只需要在某个固定的目录下放置该文件,然后创建软链接,软链接指向这个文件,软链接的内容是它指向的这个文件的路径,从而避免了重复占用磁盘空间。

软链接有着自己的 inode 号以及用户数据块。

软链接可以对目录进行,并且可以跨分区。软链接指向的是另一个文件的路径,其大小为指向的路径字符串的长度,不增加或者减少目标文件inode的引用计数。


四、软链接和硬链接区别 

软链接:

  1. 软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
  2. 软链接可以 跨文件系统 ,硬链接不可以
  3. 软链接可以对一个不存在的文件名进行链接
  4. 软链接可以对目录进行链接

硬链接:

  1. 硬链接,以文件副本的形式存在。但不占用实际空间。
  2. 不允许给目录创建硬链接
  3. 硬链接只有在同一个文件系统中才能创建