知识补充:1、软链接

软链接又叫符号链接,和原文件不是一个文件,类似Windows的快捷方式,如果原始文件被删除,所有指向它的符号链接也就都被破坏了

软链接有自己的inode,是linux特殊文件的一种,作为一个文件, 它的数据是它所连接的文件的路径

符号链接可以跨越文件系统,也可以为目录建立

2、硬链接

只能引用同一文件系统中的文件,它引用的是文件的inode

当移动或者删除原始文件时,硬链接不会被破坏

硬链接不允许链接目录文件

示例图如下:




软硬链接的作业_运维


inode Table和Data Blocks

磁盘中文件=文件属性+文件数据。那么inode Table存放的是文件的属性,Data Blocks存放的就是文件的数据。我们可以把Data Blocks想象成一个大空间,它的空间包含很多数据块,每个数据块都是一个block,每个数据块都有自己的编号;inode Table想象成一个表,里面也有数据块,它包含的是文件属性,每个小块都是一个inode。

inode

当我们创建一个file.txt文件,我们找到一个空inode将file.txt文件属性填进去,当我们往file.txt中写入一个hello world数据,我们再找到一个空block将数据填进去,此时文件就被创建好了。创建好文件后,要将inode和block关联起来,方便查找,那么现在我怎么知道inode和哪一个数据块关联 呢?

Linux中文件名在系统层面没有意义,文件名是给用户使用的。Linux中真正标识一个文件的,是通过文件的inode编号的。它都有一个为一个编号,一个文件一个inode。

在inode Table中每一个inode都会存放一个文件属性,这些属性是一个结构体,里面包含了文件的所有属性,还有数据int inode_number(inode在inode Table的位置)。然后当我们创建文件后找到对应的inode,向文件中写入内容,会给你分配一个block,它是整存整取的,一次就给你一块block。所以inode的结构体中还包括一个int blocks[]的数组,用来存储与inode关联的block的编号,一个inode可能包含很多block块,所以用数组。但是这个数组并不是固定大小,如果这个数组有32个空间,当这个空间被占满,如果还想再加入其它block数据块,可以将数组和之后的block链接起来,当然这个内部细节就比较复杂了。

当我们访问文件时,我们先根据inode编号,找到对应的文件属性结构体,然后通过结构体中block数组,找到inode和block的映射关系,然后找到对应block块,然后找到文件的内容。

示例图如下:


软硬链接的作业_服务器_02


作业要求:

完成软硬链接的实验(创建test目录,在test下创建原文件a,软链接a.soft,硬链接a.hard,观察文件的区别;再分别修改三个文件的内容,观察文件之间内容的区别。删除a文件,在原路径下创建新的a文件,观察三个文件的区别后再修改文件内容,再观察内容的变化)

截图如下(分步作答):


软硬链接的作业_服务器_03


软硬链接的作业_运维_04


软硬链接的作业_linux_05


软硬链接的作业_linux_06