linux文件系统

linux文件系统

文件系统简单了解

文件系统可分为几个部分:

  1. 超级块——记录了一些当前文件系统的总体信息,一个超级块对应一个文件系统
  2. inode节点表——存储了inode节点,每个节点存储了许多关于文件的信息,包括文件大小、上次修改时间、所有者等,但不包括数据
  3. 数据区——数据存储的区域
    文件系统

Inode节点

Inode节点包括以下的内容(来自维基百科),可以用stat命令查看相关的内容

  • 以字节为单位表示的文件大小。
  • 设备ID,标识容纳该文件的设备。
  • 文件所有者的User ID。
  • 文件的Group ID
  • 文件的模式(mode),确定了文件的类型,以及它的所有者、它的group、其它用户访问此文件的权限。
  • 额外的系统与用户标志(flag),用来保护该文件。
  • 3个时间戳,记录了inode自身被修改(ctime, inode change time)、文件内容被修改(mtime, modification time)、最后一次访问(atime, access time)的时间。
  • 1个链接数,表示有多少个硬链接指向此inode。
  • 到文件系统存储位置的指针。通常是1K字节或者2K字节的存储容量为基本单位。

创建文件的四个步骤

linux中创建一个文件可以分为下面四个步骤:

  1. 存储属性
    存储文件时内核先通过Inode bitmap快速找到 一个空的Inode节点,把文件信息记录到其中
  2. 存储数据
    然后在data bitmap找到空闲的数据块,这里我们假设数据块需要12KB也就是3个,然后系统找了几个数据块,比如100、200、250三个块(这里可以不连续),然后依次复制缓存中的内容到块中,先复制100、再复制200,最后复制250
  3. 记录分配信息
    将刚才的三个块信息100、200、250存储到Inode节点中,按照记录的顺序存
  4. 添加文件名到目录
    新文件名叫tmp.txt,内核将文件名写入目录文件,并将Inode节点号和该文件名连接到一起,构成目录项,一个文件就创建完成了

linux下如何找到一个文件

linux系统是如何通过文件名找到一个文件的???

每个文件对应一个目录项,首先系统找到这个目录项,里面记录了inode节点的节点号,然后再找到inode节点,inode节点中记录了该文件在数据块中的存储位置,这个位置可能并不是连续的,找到这些块放到一起就构成了我们的文件。
文件
为什么数据块的存储位置可能不连续呢?因为文件有大有小,肯定需要一个大小划分,存储时数据会被划分为多块,linux中数据划分以4K为一个块,100K的文件就是由25个块构成,在磁盘中由于有删除新建操作,很多空出来的块可能并没有25个连续的块,所以这25个块可能会分散开来。

为什么以4KB为大小划分?其实在硬件中最小的划分是扇区,一个扇区512B,如果一个扇区一个扇区读取,那么一个大文件存储地比较分散读取就会影响速度,因此需要一个合适的大小划分,在文件系统中划分为了4096B也就是4KB,因此最小分配4KB。

如何证明文件最小大小为4KB来分配???首先最直观的便是ls -l命令了,我们平时创建一个空文件,他的大小就是4096,尽管我们什么都没存。除ls之外就是命令stat filename查看文件信息,这里我创建了一个文本文件来看命令效果,可以看到尽管Size只有33,但是IO Block依旧是有4096,所以在linux中即使文件只有一点点大小,但是仍要分配4个KB,其余的便浪费掉了。
stat命令

硬链接和软链接

软链接和硬链接则是linux系统中的一种特殊的文件。
创建硬链接命令则是ln filename hardlink
创建软链接则是加一个-s选项ln -s filename softlink
首先创建软硬链接各一个,然后打印,其中内容是相同的,那么他们之间区别是什么。
软硬连接

硬链接

硬链接像是对源文件的一个备份,硬链接通过新增inode节点中的链接数来达到链接文件的目的。

这里就不得不提这个链接数是什么东西了,每一个目录项都会链接唯一的一个inode节点,但是一个inode节点可以由多个目录项链接,在linux中删除一个文件可不是删除数据块那么简单,删除是对inode节点中的链接数减1,只有当这个inode节点中的链接数为0时,数据才会被彻底丢弃。

这个硬链接数可以通过ls -l查看列出的属性第二列表示硬链接数,也可以用stat查看其中的Links属性。

而硬链接就是通过链接数+1来达到链接目的,他与原文件操纵的是同一个文件,即使原文件被删除,硬链接也不会受影响,这也是我们为什么说硬链接像是对原文件的一个备份。
硬链接

软链接

软链接又是什么?软链接说白了更像是windows系统下面的快捷方式,既然是快捷方式,那么也就是说如果原文件被删除,那么软链接也就失效了。软链接有自己的inode节点,有自己的数据块,也就是说软链接其实是创建一个新文件,这个文件与原文件之间独立,软链接中存的数据则是原文件的路径。

那么软链接是如何找到原文件的呢?
软链接其实在他的数据块中存储的是原文件的存储路径,软链接查找原文件的过程比硬链接稍复杂,首先则是通过目录项找到自己的inode节点,然后找到数据块,通过数据块的原文件存储路径找到原文件的目录项,之后再找到原文件的inode节点,找到原文件的数据块。这也就很好理解为什么原文件删除,软链接失效了,因为这个路径失效了,怎么找到文件呢。

如果以上软链接的解释引起你的强烈不适,绕晕了,那么请看下图。
软链接

硬链接和软链接的区别

  1. 硬链接和原文件共享inode节点,一个inode有两个或多个目录项与之链接,相当于有多个别名
    软链接有自己的inode节点,有自己的数据区域,里面存储了原文件存储路径
  2. 硬链接只能对非目录文件进行操作(如果在目录内备份该目录,岂不是要引起无限递归了)
    软链接可以对目录操作,如果链接目录,cd命令相当于进入目录,而且递归亦不会存在,毕竟我只存了目标目录的路径,又不是备份
  3. 删除原文件对硬链接没有影响,只不过是inode链接数-1
    删除原文件软链接将无法使用,因为原路径已经消失
  4. 硬链接无法跨分区建立,因为每一块分区中的inode节点指向的数据都是当前分区的数据块,不能指向别的数据块,而硬链接则是需要指向同一个inode节点的,跨分区做不到
    软链接可以跨分区,因为只是存储路径而已,通过路径访问另一个分区是合理的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值