文件系统

文件系统

       当我们在linux下使用 ls -l 命令时,除了文件名,还能看到文件的其他信息

       这些信息称为文件的元信息,是唯一表示这个文件的信息,它们分别是:文件的权限,硬链接数,文件所有者,文件所有者的所属组,文件的大小,最后修改日期以及文件名。

       下面我们来看看linux下文件在磁盘中是如何存储的。

       在linux下,文件的元信息和内容是分开存放的,元信息和数据的位置存放在 inode 节点中,文件的内容存放在数据区。而在数据区中,有许多的 block 块,文件的内容是分块存储在数据区的,这样的设计是为了尽可能的减少内存碎片,可以储存更多的文件,因此 inode 节点中存的数据的位置实际就是文件内容所在的 block 块的位置。

       一个文件的 i 节点号和文件名是存储在目录项里的,通过 ls -i 文件名 可以查看一个文件的 i 节点号,i 节点号实际就是 inode 节点在 i 节点表的下标,通过这个下标就可以找到对应文件的 inode 节点,获取到文件的信息。

       文件在磁盘中进行存储的流程:通过 data bit_map 找到空闲的block块,将文件数据存储到 block 块中,并且记录 block 块的地址到 inode 节点中,这个 inode 节点也是通过 inode bit_map 在 i 节点表中找到空闲的 inode 节点。

       文件读取的流程:通过目录项中的文件名找到对应的inode节点号--->通过inode节点号就可以在inode区域找到inode节点,通过inode节点可以得到文件元信息以及文件数据在磁盘中的存储位置,通过位置可以找到文件数据。

硬链接和软链接

硬链接

       我们知道,真正能找到文件的不是文件名,而是文件的 inode 节点,那么我们可以让多个文件名对应同一个 inode 节点。

       可以看到,abc 和 hello 的元信息完全相同,他们被称为指向文件的硬链接,也就是说硬链接是文件的别名,能够和原来的文件名引用同一个文件。当多个文件名引用到同一个 inode 时,把有多少个文件对应到 inode,该数字称为引用计数(硬链接数),解决磁盘块以及 inode 何时释放的问题,每删除一个硬链接文件,引用计数 -1,因此当我们删除一个文件时做了两件事:1. 在目录中将对应的目录项删除,2. 将对应文件的硬链接数 -1 ,只有当一个文件的引用计数为0,那么这个文件才会真正的从磁盘上被删除。

软链接

       软链接也叫符号链接,可以看做是 Windows 下的快捷方式。

       可以看到,软链接文件的元信息和它所链接的文件是没有任何关系的,文件大小也比原文件小很多。因此,软链接文件其实是一个新的文件,它存储的是源文件的位置信息,当它链接的文件被删除时,这个软链接文件就会失效。

       在 Windows 下软链接文件中存储的是源文件的路径信息,因为在 linux 下实际是通过 inode 节点来找到文件的,因此软链接文件中存储的有可能是源文件的 inode 节点,但这也只是我的一个猜测。

软链接和硬链接的区别:

  • 软连接是一个单独的文件,硬链接是一个文件别名(目录项)
  • 删除源文件,软链接失败,但硬链接仅仅链接数 -1
  • 软链接可以跨分区,硬链接不可以
  • 软链接可以针对目录项创建,硬链接不可以
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值