【linux】——文件系统

目录

📕.什么是inode

📕.目录 

📕.硬链接

 📕.软链接


📕.什么是inode

当我们创建一个文件时,我们不对文件中写入任何内容,请问该文件是否占磁盘空间?答案是肯定的,因为文件中的属性信息也占了磁盘空间。

首先我们得认清一个概念:

文件构成=文件属性信息+文件里存储的内容。

文件属性:文件的权限,文件文件里存储的内容的空间大小,文件的创建时间等等。

在linux中,文件的属性和内容是分开存储的,我们把把存储文件属性信息的结构称为inode,inode是任何一个文件的属性集合,linux中几乎每一个文件都有一个inode,在linux可能存在大量的inode,所以系统就会给inode分配一个编号,这个编号叫做inode编号

我们通常需要对一个磁盘分成若干个区域,例如我们电脑上的c盘,d盘,e盘等都是磁盘被划分的区域,每个区域的构成是类似的,只要我们知道其中一个区域怎么划分,我们就知道其他区域怎么划分,然后每个区域会分成若干个组,每个组的组成也是类似的,所以我们只要我们了解了磁盘上的一个组,我们就能理解文件系统。如下:

 1.

  • 超级区块(super block):记录此文件的系统的整体信息,包括inode与数据区块的总量,使用量,剩余量,以及文件系统的格式与相关信息等。
  • Filesystem Description(文件系统描述说明):这个区段可以描述每个群组的开始与结束的区块,以及说明每个区段(超级区块,对照表,inode对照表,数据区块)分别介于哪一个区间中。
  • inode table:当我们整个块组里面可能包括多个文件,在inode table中可以存在多个inode,在inode table中的inode数量一开始就已经被文件系统给划分好了,·当我们在块组里面创建文件test的时候,首先需要在inode table申请一个inode去记录该文件的信息。
  • 数据区块(data table):数据区块是用来放置文件数据的地方,在区块里面有若干个数据区块,每个区块都有自己的编号,以方便的记录。在etc2文件系统中所支持的数据区块大小有1k,2k及4k三种,在格式化时区块就已经确定了,常见的是4kb。分区之后,数据区块的个数是确定的。

 当我们要在往test文件中写数据的时候,我们要在块里面写,假设我们要写的内容是12kb,我们就需要在其中的三个数据区块中进行写数据,然后将在哪三个块中写的数据记录到test的inode结构去里面去。        

 每个inode里面都有一个数组,这个数组是记录文件相对应的数据区块的编号                

 

 

块位图(Block Bitmap) Block Bitmap 中记录着 Data Block 中哪个数据块已经被占用,哪个数据块没 有被占用。我们假设文件系统中划分了10000个区块,当我们的文件要写数据的时候,就得知道哪一个数据区块不被占用,块位图中就有10000个bit位去记录这10000个区块是否被占用。如果是1,代表数据区块被占用了,如果是0,则代表该数据区块没有被占用。

 Block Bitmap中的bit位置代表的是哪一个区块,内容代表的是是否被占用。

inode位图(inode Bitmap) :在创建文件之前,我们得知道哪个inode可以未被使用,所以inode也有相对应的位图,inode位图与块位图类似,bit位的位置代表的是哪一个inode,内容代表该inode是否被占用。
用我们上面所学的知识如何描述创建一个文件过程?
创建一个文件就需要去某个块组中的inode table中申请一个inode给给该文件,并将inode位图里面中相对应的bit位置为1,表示该inode空间已经被占用了,然后将文件的属性信息写入到我们的inode里面。
那么在文件中写入1kb数据过程呢?
在文件中写入1kb数据的过程是去区块中申请一个数据区块中,并在块位图中将相对应的的bit位置为1,表示该区块已被占用,然后将数据区块中。
删除一个文件是如何删除的?
先将该文件的在块位图中的相关的bit为置为0,然后将inode位图中相关的bit位置为0。这样就表示该文件已经被删除,不用清空inode和数据块中的内容,当另一个文件创建的时候分配到相对应的inode和数据块时,再清空inode和数据块再进行写数据。当我们要恢复文件时,我们只要把之前删掉的文件中位图相对应的bit位和块位图相对应的bit位给恢复出来即可。这就是为什么文件中的数据可以被恢复的原因,当我们误删了公司某个文件的时候,不要再创建文件或者写数据,我们可以需要上级汇报,也许他可以帮我们恢复数据。

当我们ll -i的时候,最前面的数字代表的时inode编号,一个inode都有一个inode编号。 

📕.目录 

文件我们讲完了,在linux中,一切皆文件,那么目录也是文件。

我们该如何理解目录呢?

我们先创建一个目录dir1,ll -i发现,目录也有一个inode编号。 

 说明创建目录的时候,文件系统会给目录申请一个inode,这个inode也是放目录的属性信息,那么目录中的内容放的是什么。

目录:放的是当前目录下的 文件名和对应的文件的inode编号(inode号)

 

ls lesson20 -i 查看lesson20目录下文件名和相对应的inode编号。 

所以当我们要查看文件里面的内容时,我们只需要拿到该文件的名字,找到该文件的当前目录,然后就找到该目录的inode,在找出相对应的数据区块,在数据区块中再通过文件名和inode映射关系找到该文件的inode编号,在找到相对应的inode,然后通过inode找到相对应的数据区块,就可以查看该文件的内容了。

 

结论:

1.inode结构中不包括文件名,包括目录本身,操作系统不认识什么文件名。操作系统要找到相对应的文件的inode,只需要知道inode编号即可。文件名是放在当前目录下的内容里。

总结:

创建一个文件,我们就需要在一个组中的inode table申请一个inode,放该文件的属性信息,然后在inode位图中相对应的bit位置为1,表示该inode已被占用,然后将inode编号和文件名放在当前目录下进行映射起来。

📕.硬链接

真正在区分磁盘的不是磁盘的文件名而是inode,因为一个文件只有只有一个inode编号文件内容是由inode记录指向的,而文件名只与目录有关,在linux下一个inode是可以对应多个文件名。当我们给文件创建另外一个名字的方式叫做硬链接

创建硬链接的方式:

ln test.c test.1 :给test.c文件进行硬链接,test.1是test.c的别名。test.1和test.c的inode编号是一样的,说明这两个文件是同一个文件。

一个文件有几个名字就有多少次硬链接。

 

 

 所以无论是test.c还是文件的test.1文件都可以找到编号为1835850的inode编号的文件。

我们在删除文件时干了两件事情: 1. 在目录中将对应的记录删除, 2. 将硬连接数 -1 ,如果为 0 ,则将对应 的磁盘释放。

 📕.软链接

创建软连接的方式:

test-s文件是test.c文件软链接生成的,我们发现它们两个的inode的编号是不同的,说明这两个文件是不同的,但是我们查看这两个文件内容时发现它们的内容时一样的。

 

软链接就是建立一个独立文件,这个文件会让数据的读取指向它链接的那个文件的文件名。 

软链接就相当于我们windows上给软件建立快捷方式。

好啦,今天的分享就到这里了,觉得有用的小伙伴们麻烦你们帮我点个赞加关注,谢谢你们~ 

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值