• [Linux]-----_inode与软硬连接



    前言


    正文开始!

    一、文件

    在这里插入图片描述

    这张图是基于我们上节课对文件系统的分区管理对应到Linux底层的实际实现的方法!

    基于这张图我来带大家了解inode。

    1. 文件= 内容 + 属性----都是数据----都要存储—Linux采用的是将内容和属性数据分开存储的方案!
    2. 内容存储在block中,大小一般是4KB,属性数据存放在inode(就是磁盘上的另一份空间—一般128字节)中。文件内容可能是增多的,但文件的属性是稳定的,
    • Boot Block:包含分区表,告诉操作系统我们的软件在什么位置,与开机有关!

    • Data block:主要以块为单位,进行文件内容的保存!

    • inode table:以128字节为单位,进行inode属性的保存!并且inode属性里面有一个inode编号!一般而言,一个文件,一个inode。一个文件,一个inode号。

    ll -i
    l

    • Block Bitmap:(位图结构)假设有1000个bits,第几个比特位代表第几个文件,比特位的内容代表该文件是否被占用,1表示被占用,0表示没有被占用。

    • inode Bitmap:表示inode块是否被占用!他表征的是inode的使用情况!

    • Group Descriptor Table(GDT):有多少inode,其实的inode的编号,有多少个inode被使用,有多少block被使用,还剩多少,你的总group大小是多少…

    • Super Block:就是我们文件系统的顶层结构了!他表示的是整个分区的一共有多少个块,每个块组的使用情况…宏观的管理整个分区。

    创建新文件

    • 存储属性:内核中先找到一个空闲的i节点(空闲编号)。内核把文件信息记录到其中。
    • 存储数据:该文件需要存储在三个磁盘块,内核找到了三个空闲块(例:300,500,800)。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推。
    • 记录分配情况:文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表。
    • 添加文件名到目录:新的文件名myfile.txt. Linux如何在当前目录中记录这个文件?内核将入口(i节点编号,myfile.txt)添加到目录文件。文件名和inode之间的对应关系将文件明和文件的内容及属性链接起来。

    文件更多属性

    stat 文件名

    在这里插入图片描述

    二、软硬连接

    在这里插入图片描述

    创建软连接

    ln -s myfile.txt myfile.txt.soft

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    所以软连接就相当于Linux下的快捷方式。
    既然是一个独立文件,inode是独立的

    那么软连接的文件内容是什么呢??

    保存的是指向文件的所在路径!!!

    创建硬连接

    ln myfile.txt myfile.txt.hard

    在这里插入图片描述

    因为硬链接后inode编号相同,所以硬连接就是单纯的在Linux指定的目录下,给指定的文件新增文件名和inode编号的映射关系!
    在这里插入图片描述
    创建硬连接后我们发现这里的数字变化了。所以我们可以证明这数字就代表这个inode编号的硬连接数。

    什么是硬连接数呢?
    inode编号,不就是一个"指针"的概念吗?本质就是该文件inode属性中的一个计数器,count,标识了有几个文件名和我的inode建立了映射关系!
    简言之,就是有几个文件名指向我的inode(文件本身)!

    硬连接的作用
    在这里插入图片描述
    有一个问题:为什么一个目录创建出来默认的硬连接数是2,一个普通文件创建出来的硬连接数是1呢??

    因为普通文件的文件名本身就和自己的inode具有映射关系,而且只有一个!

    在这里插入图片描述
    所以默认一个空目录创建后自己的文件名和.产生了硬连接。

    在这里插入图片描述
    我们还可以发现当前路径的…是mydir的上级目录。

    所以硬连接可以进行路径间切换!

    区别

    软硬链接的区别:软连接是一个独立的文件,有自己独立的inode和inode编号。而硬连接不是一个独立的文件,他和目标文件使用的是同一个inode!

    删除连接

    unlink 文件名

    在这里插入图片描述


    (本章完!)

  • 相关阅读:
    【STL】map函数
    odata expand
    Linux/Ubuntu环境搭建(二):创建添加新磁盘、搭建Samba服务器
    BSN专网+医疗保险:MediConCen与BSN达成战略合作,提升理赔效率
    支持双层PDF:IronOCR for .NET 2022.11 支持 -127+国家语言
    Markdown文件中的图片批量上传至阿里云并更新本地文件中的图片路径【Python】
    【C++】入门(二):引用、内联、auto
    利用websocket仿web端在线客服实时聊天系统
    c++基础(自用)
    JavaScript Web APIs第二天笔记
  • 原文地址:https://blog.csdn.net/m0_61560468/article/details/127792148