了解inode,软链接和硬链接

Posted 两片空白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了了解inode,软链接和硬链接相关的知识,希望对你有一定的参考价值。

目录

一.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与链接文件名的对应关系。

以上是关于了解inode,软链接和硬链接的主要内容,如果未能解决你的问题,请参考以下文章

软链接和硬链接

Linux文件系统中硬链接和软链接的区别

理解inode 以及 软链接和硬链接概念区分

Linux中的链接文件_软链接和硬链接

软链接和硬链接

linux中软链接和硬链接的区别与小结