【hello Linux】理解文件系统

目录

创建文件的过程:

删除文件的过程:

创建目录的过程:

查看inode编号:

硬链接

软链接



【hello Linux】理解文件系统_第1张图片

Linux 

我们知道文件所有数据 = 文件内容 + 文件属性信息;

未打开的文件是被存放到磁盘/固态硬盘中的;

【hello Linux】理解文件系统_第2张图片

 在这里是以磁盘为例进行说明:

【hello Linux】理解文件系统_第3张图片

磁盘是以扇区为单位进行读写的;

确定磁盘具体写入位置要知道:盘面(磁头)、磁道、扇区;

我们试着可以将磁盘想象成线性的结构:

【hello Linux】理解文件系统_第4张图片

【hello Linux】理解文件系统_第5张图片

要确定磁盘位置:盘面、磁道、扇区;

线性结构:类似数组下标;

因此我们在这要进行地址转化,类似于虚拟地址和物理地址的转换;

磁盘太大,为了方便管理;

1. 分区:将磁盘划分为几个小的区域;

2. 格式化:如果进行格式化,相当于给分区中写入了文件系统(原来的数据不存在);

【hello Linux】理解文件系统_第6张图片

为了更加方便管理,我们将分区更细小化;

 【hello Linux】理解文件系统_第7张图片

创建文件的过程:

一个文件与一个inode编号相对应,首先在inode位图中找到第一个为0的,将其修改为1,在block位图中找到第一个为0的,将其修改为1,在inode块中写入文件所有信息,并且记录对应block块的位置,此后便可以进行数据写入操作。

删除文件的过程:

删除文件很简单,将文件对应inode的位图位置修改为0即可。

我们可以使用debugfs进行文件的恢复功能。

如果想要恢复最好不要在进行操作,避免将该文件inode位图分配给其他文件。

创建目录的过程:

目录也是文件,创建目录也如上述创建文件过程一般,不过目录的数据块中存放的是:

文件名与inode编号的映射关系!

查看inode编号:

【hello Linux】理解文件系统_第8张图片

ls命令中加上-i选项则可以查看文件inode编号;上述红色框框起来的便是文件inode编号;

Linux中:

文件名在系统层面是没有意义的 ,是给用户使用的。

Linux中真正标识一个文件,是通过文件的inode编号识别的!

一个文件一个inode!

硬链接:

OS找磁盘上的文件并不是通过文件名,而是inode编号

其实在linux中可以让多个文件名对应于同一个inode。

这便是使用硬链接的方法。

ln 源文件名 目标文件名

【hello Linux】理解文件系统_第9张图片

【hello Linux】理解文件系统_第10张图片

hard  和 myfile.c  的链接状态完全相同,他们被称为指向文件的硬链接。
内核记录了这个连接数, inode 655831 的硬连接数为 2
硬链接的本质:
在文件所在的目录中添加:新文件名和inode编号的映射关系;
我们在删除文件时干了两件事情:
1. 在目录中将对应的记录删除(文件名和inode编号的映射关系);
2. 将硬连接数 -1 ,如果为 0 ,则将对应的磁盘释放。

软链接:

ln -s 要链接的文件名 链接之后的文件名

【hello Linux】理解文件系统_第11张图片

软链接的使用场景:

如果在当前目录下访问一个文件特别麻烦,我们便可以建立软链接;

相当于Windows中的快捷方式。

经过查看,我们发现软链接是有自己独立的inode的!因此软链接是一个文件,数据块里面存储

(指向文件的所在路径 + 文件名)。 

补充:

【hello Linux】理解文件系统_第12张图片

我们新创建了一个文件,发现该文件的硬链接数为1;

新创建了一个目录,发现该目录的硬链接数为2 ;

这是因为该目录中的 . 文件也表示该目录;

它们的 inode 编号是一样的。

【hello Linux】理解文件系统_第13张图片

在mydir的当前目录下创建了tmp目录,mydir的链接数变为了 3;

光数该文件的别名便可知道;

1. mydir

2. mydir目录下的 . 

3. mydir目录下的tmp目录下的 ..

总共三个!!!

坚持打卡!

你可能感兴趣的:(Linux,linux)