在linux下,我们使用ls -l的时候,总是能看到如下信息:
这些信息都属于文件的属性信息,而只要是信息,就需要被管理起来,要管理,就得先描述,后组织,因此就有了一个描述文件属性的结构体---inode,也就是说inode是用来保存文件属性的结构。有些人一听到inode可能觉得很陌生,但是inode实际上就是硬盘上的一段内存区域,只不过命名为inode而已,有一个文件,就有一个inode,一个inode号;10个文件,就是10个inode。
有了inode,我们查看一个文件就很方便:
linux中,操作任意一个文件,都是在特定目录下操作的,目录也是文件,目录文件里面的内容包含当前目录下的文件名和inode的映射关系。
为了更好的理解inode,我们还要了解一下文件系统:
首先理解一下管理文件系统的思想:
文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。所以我们管理文件系统,只要管好期中一个分区就行,其它分区复制管理好的分区的管理方法就行,要管理好分区,又得管理好块组,这些块组里面描述的就是文件系统本身的信息
- Boot Block:是启动分区,记录操作系统的启动信息
- Super Block:存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,整个文件系统结构就被破坏了
- Group Descriptor table:块组描述符,描述块组属性信息
- Block Bitmap: 块位图
- inode Bitmap: inode位图,每个bit表示一个inode是否空闲可用
- inolde Table: 存放文件属性 如 文件大小,所有者,最近修改时间等
- Data Block: 存放文件内容
软硬链接
建立软连接的命令:
打印一下test-s,发现打印的内容跟test里面的内容一样:
查看他们的inode时,发现他们两的inode不一样:
这就说明:test生成的软连接是一个独立的文件,有独立的inode号。
建立硬连接的命令:
查看test和创建的硬链接的inode时,发现他们两的inode是一样的:
这就说明test文件和它的硬链接共享一个inode。
软连接和硬链接的区别:
软连接是一个独立的文件,软连接有独立的inode号,它类似于windows里面的快捷方式,硬链接就是文件名和inode的映射关系,硬链接没有独立的inode号,它和目标文件共享一个inode。软硬链接的最大区别是有无inode。
硬链接数:
我们都知道,查看一个文件时,属性的第二列是硬链接的个数,如果删除上面创建的硬链接时,test的硬链接数会由2变为1:
如果我们创建一个文件,硬链接数是1,是当前文件名和inode的映射关系:
但是如果我们创建的是一个目录,此时的硬链接数为2,一个是目录名和inode的映射关系,另一个是目录里面的当前目录文件和inode的映射关系:
而且此时,当前目录的上级目录的硬链接数就会+1.