Linux篇12文件系统inode和软硬链接

1.理解文件系统&&inode

image-20220704182758688

当我们使用ls-i指令查看文件信息时,会发现文件名前面有一个数字,这个数字是inode。我们也可以使用stat指令查看文件的详细信息,如下

Linux篇12文件系统inode和软硬链接_第1张图片

为了讲清楚inode,我们从磁盘开始说起

Linux篇12文件系统inode和软硬链接_第2张图片

文件 = 属性+内容。属性和内容在磁盘上是分开保存的。如上图所示,我们在创建一个文件的时候,过程是这样的:

  • 遍历inode bitmap,找到一个空的位置。比如第三位是空的,那么我们就将文件属性保存到inode table 中的第三个inode里面。
  • struct inode里面有一个数组,记录了文件内容需要存储到几个数据块。比如该文件内容需要存储到3个数据块,那么遍历Block bitmap,找到3个空的数据块比如1,5,7。那么就将文件内容存到这三个磁盘块上面。并且将1,5,7放进数组int block[]里面
  • 添加文件名到目录

删除一个文件的时候,只要根据inode将对应的inode bitmap和Block Bitmap置为0,不需要管数据块上面的内容,所以删除很快,写入较慢

我们知道,Linux下一切皆文件,目录也可以看做一个文件。那么我们再来理解一下创建目录的过程。既然目录也是文件,那么他就一定也有属性和内容。创建方式同上

  • 目录的内容放的是文件名和对应文件的inode号。由此我们知道文件名不在inode里面,而是放在所处目录的文件内容里面。

2.软硬链接

Linux篇12文件系统inode和软硬链接_第3张图片

上图中的数字就是硬链接数。当我们创建一个空目录发现硬链接数是2,创建一个文件硬链接数是1。这是由于当我们进入dir1,会有一个“.”指的是当前目录。可以说这个".“是dir1的别名,而如果我们在dir1里面再创建一个dir2之后我们发现dir1的硬链接数变为2,这是因为我们进入dir2,之后有一个”…",他也是dir1的别名。并且他们三个的inode号是相同的,本质上没有创建新文件。所有当我们看到一个目录的硬链接数n,就可以知道该目录里面有(n-2)个子目录。所以我们在删除硬链接文件的时候,硬链接数–,当硬链接数为0时才删除数据块中保存的内容

创建软连接方法如下

image-20220704195449708

Linux篇12文件系统inode和软硬链接_第4张图片

创建之后我们发现他们两个的inode号不一样,所以软链接出来的文件与原文件是不同的文件,是一个独立的文件。该文件的内容是test.c的路径,这就像我们Windows下的快捷方式

创建硬链接方法如下

st.c的路径,这就像我们Windows下的快捷方式

创建硬链接方法如下

Linux篇12文件系统inode和软硬链接_第5张图片

你可能感兴趣的:(Linux,linux,运维,服务器)