1.理解文件系统&&inode

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

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

文件 = 属性+内容。属性和内容在磁盘上是分开保存的。如上图所示,我们在创建一个文件的时候,过程是这样的:
- 遍历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.软硬链接

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


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

本文深入讲解了Linux文件系统的inode机制,包括inode如何存储文件属性及内容,并解释了硬链接与软链接的区别及其工作原理。

1286

被折叠的 条评论
为什么被折叠?



