Linux:文件系统&软硬链接文件

文件系统

一个磁盘通常在安装操作系统时,至少有两个分区

  • 交换分区:物理内存不够用时,作为交换内存,将物理内存上的数据放在交换分区中
  • 文件系统分区:就是电脑上存储文件的分区
    假设一个文件在磁盘上要占据一块连续的空间,这样就会造成大量的空间碎片问题

解决内存碎片:进行分块存储
存储分为两个区域,一个是数据区,一个是inode区
数据区

  • 将数据区分成一个个小块(一块4kb,4096字节),
  • 如果存4097字节大小的数据,就将数据存入不同的空闲块
    用了哪些块,哪些块在前还是在后得描述起来

inode区域:文件描述节点

  • inode其实就是一共文件的描述结构节点,描述了文件有多大,时间,属性,访问权限等信息,以及数据在哪些数据块中存储的

在这里插入图片描述
BootBlock:机器的开启信息,OS在启动后读取这块数据

1GB空间的管理

  • 文件=内容+属性,这俩都要存储
    Linux采用的是将内容和属性分开的存储方案
  • 文件的内容放在block中(4kb,4096字节)
  • 文件的属性放在inode中(就是磁盘上的另一块空间,128字节)
  • 文件的内容是不断增多,属性值是稳定的
  • Date blocks(数据块):以4kb为单位,有数千个,每个都有编号
    作用:以块为单位进行内容保存,如果是4097,多的一个字节也是分配一个块
  • inode table:以128字节为单位,进行inode属性的保存,里面会包含大量inode空间
    每个inode块保存文件的属性
  • inode块:inode块的属性中有一个inode编号
    一般而言,一个文件一个inode,也就只有一个inode号
  • block_bitmap:以位图结构记录数据块的使用情况
    超级块记录了文件系统信息以及各个区域的地址,两个map的位置,data和inode区域的地址
  • inde_bitmap:记录inode使用情况
    一个文件有多个数据块,一个文件会对应一个inode
    比特位的位置代表第几个inode,比特位的内容表示对应的inode是否被占用
  • 存储一个文件时,通过这俩就可以快速知道哪个数据块和inode没有被使用
  • GDT:块组描述符
    存储的信息:有多少inode,起始inode编号,有多少inode被使用,有多少block被使用

  • SB:文件系统中的顶层数据结构
    表示整个分区有多少个Block group

SB管理宏观上的整个分区,GDT管理分区内的一个组,剩下的字段管理组内的文件属性和内容

inode内部属性

  • 一个inode对应一个文件,一个文件如何和自己的内容关联起来
  • inode结构体中有一个block[15]数组
  • [0,11],直接保存该文件对应的blocks编号
  • data_block中也能保存其它数据块
    [12,15]指向一个data块,但是这个块中不保存有效数据,而是保存文件所使用的其它块的编号

文件名是文件属性吗

  • 算,但是inode中并不保存文件名
  • 所以,Linux底层都是通过inode编号标识文件的

要找到文件,就得找到文件的inode编号
谁来找inode编号

  • 目录是文件,它也有自己的inode,
    目录中的内容(数据块):存放的是文件名和inode编号的映射关系

Linux同一个目录下,可以创建多个同名文件吗

  • 文件名本身是一个具有key值的东西

进入目录需要x权限
创建文件需要w权限
查看文件名需要r权限

创建文件,OS所做的事情

创建文件:

  • 创建文件,先查找iode_bitemap,
  • 找到一个未使用的inode节点,将map的对应位置置1,将属性信息写入对应的inode中
  • 同时将数据写入数据块中,修改对应的block_bitmap,并且建议block和inode的映射关系,
  • 并返回inode

目录的理解

  • 创建一个文件,一定是在某个目录下,文件创建好后,拿到的新建文件的inode,
  • 该文件找到自己所处的目录,找目录的data_block
    写入文件名和inode编号的映射关系

删除文件:

删除一个文件其实未真正清除数据
删除的文件的inode编号在日志文件中
inode一旦被覆盖就g了

知道自己所处的目录,是不知道自己的inode

软硬链接的区别

软链接是新inode,硬链接是同样的inode
软连接是独立的文件,有独立的inode和inode编号

硬链接不是一个独立文件,它和目标文件使用的是同一个inode

软链接:

link简称,soft软,hard硬

通过ln -s命令生成软链接文件

  • 先创建一个普通文件1.txt,内容是hahaha;
  • 使用命令ln –s 1.txt 1.txtln 给1.txt文件创建一个软连接文件;
    在这里插入图片描述

查看文件特征:

  • 使用ll –i命令,前面会有一串inode节点号;
  • 原文件和软链接的inode号不同,但是这两个节点号里面的内容一样
    在这里插入图片描述
    inode本质上对应的是文件系统当中的概念,inode是描述文件在磁盘里的存储位置;
    文件在存储时不是连续存储,而是分成不同的block进行存储,inode节点描述了当前文件存在磁盘中哪些block中

软连接文件特点

  1. 软链接文件(文件前为l),本质上是原文件创建的一个快捷方式,可以通过其操作原文件;
  2. 删除原文件而不删软链接文件,再次对软链接文件进行一些操作时,操作系统会自动生成新的原文件,并且inode号也和旧原文件相同;
  • 所以在删除软链接对应的原文件时,要将两个文件都删除
    在这里插入图片描述

硬链接:

通过ln 1.txt 1.txtln命令生成,比软链接命令少-s

  • 硬链接文件是一个普通文件,用ll –I 命令查看时,inode节点号相同,硬链接文件是原文件的一个拷贝
    在这里插入图片描述

删除其中一个文件时,删除方法引用计数:

  • inode里也有引用计数,创建一个硬链接文件时,就会+1,第一次删除原文件或者硬链接文件,系统都不真正删除,只是给引用计数-1
  • 最后,软链接应用较多
  • C++中解决浅拷贝的方式一样:
  • 计算指向同一动态内存的指针数目,调用一次free就对引用计数减1,如果结果>0则不真正释放,=0才释放
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值