软链接、硬链接的本质与区别

简介: 软链接、硬链接的本质与区别

1 文件系统的寻址过程——以cat命令是如何读出文件内容、文件的删除过程为例

在操作系统级别看存储空间的话,是分为很多的block块,这些block块是分为很多种类的

当我们使用cat命令查看文件的时候,比如 cat /1.txt ,那么首先会去寻找根目录/,Linux一切皆文件,目录也是文件,根据目录名找到inode编号,然后查看归属信息和权限,是否拥有cat权限,如果有的话再根据指针寻找指向的内容,/的inode block的指针应该是指向/目录的目录块directiry block。然后在/目录的directiry block块中搜索1.txt文件,如果有,找到它的inode号,然后根据1.txt的inode编号找到该文件的inode block,检测归属和权限,如果有权限,则根据指针寻找指针指向,该指针指向的就是文件1.txt的具体内容所在的数据块。这样就可以把文件内容读出来了。

如果我们要删除一个文件的时候,比如删除1.txt,首先在super block中,会把1.txt的inode编号标记为free(自由的),也就是可用的。然后再去该文件所在的目录块(比如/目录)中把a.txt和inode编号1111的映射关系删掉。最后一步,把1.txt的数据所在的数据块标记为free,也就是可用的,如果有其它数据要存储,那么这个block是可以分配的。但是,实际上,block里面的内容还没有被抹去,删除只是删除了寻址的方式和映射关系,真正的文件数据还是保存在block中的。

所以,删除的数据是可以恢复的,首先在super block中把inode1111重新标记为不可分配,然后在directory block中把1.txt和inode1111的映射关系重新建立起来,那么数据就恢复成功了。数据恢复就是一个重新建立关系,打通寻址路径的过程。

文件只有在被覆盖的时候,才算是真正的删除了,也就是有当其他数据正好存在1.txt数据所用的block中时,把原来1.txt文件的内容覆盖掉,这才算是真正的删除。所以说,没有真正的删除,我们没有办法直接把物理硬盘的数据抹去,只能通过删除映射关系,覆盖原数据的方式去删除。(我们看到的磁盘还有多少G空间都是一个逻辑的概念,实际上你的硬盘可能已经全是数据了,只不过有的空间不可用,它保存了你需要的数据,而那些被标记为free状态的block是可用的,即使它上面有数据也是你已经删除不需要的数据,当你保存新数据的时候就会分配一些被标记为free状态的block给你,你的新数据会覆盖掉原来的数据,这样新数据就被保存了。所以,一定要分清楚逻辑的可用空间概念和物理硬盘的概念)

综上,磁盘没有真正的删除操作,只能覆盖。而格式化的过程就是建立文件系统的过程,也就是把各种block块划分出来的过程。

如图,我们用ll命令查看到的信息就是存在18653这个inode block中的

所以,即便是建新文件,磁盘空间也会被占用(虽然没有实际数据,但是会有inode中的信息)

不管是新建还是删除文件,第一步都是找super block,分配编号或者把编号标记为free,第二步去目录中增加或删除映射关系,第三步给文件的inode块关联一个数据块或把关联的数据块标记free。

2 深入探析软链接和硬链接本质

软链接相当于Windows下的快捷方式,修改软链接文件,源文件内容也会改变,修改源文件内容,软链接文件内容随之改变。删除软链接不影响源文件,删除源文件软链接文件失效。

修改硬链接文件,源文件内容也会改变,修改源文件内容,硬链接文件内容随之改变。删除硬链接文件,源文件无影响;删除源文件,硬链接文件无影响。

那么软链接和硬链接这些特性是怎么来的呢?首先我们知道,文件存储分为两部分,一部分是inode block,另一部分是数据block。

软链接是指向文件名的

硬链接是指向inode的

一个分区就是一个文件系统,软链接可以跨分区而硬链接不可以跨分区。

这是因为不同分区可以有相同的文件名,但是inode唯一标识一块block。硬链接是指向inode编号的,假如说我现在有一个1.txt的inode编号为12345,该文件在磁盘分区1上面。我现在在磁盘分区2中创建一个指向inode12345的硬链接文件,这两个12345inode编号指向的是自己分区的block块,这两个block根本就不是同一块磁盘空间。

在操作系统级别,维护的都是inode编号,也就是说操作系统不认文件名,只认inode编号。我们知道,在文件系统中,inode block中有一个指针,软链接的指针就是指向源文件的文件名的。

实际上,在每个目录中都有两个隐藏文件,.是当前目录的硬链接,…是上一级目录的硬链接。

相关文章
|
数据可视化 Swift 开发者
零一万物开源Yi系列“理科状元”Yi-9B,消费级显卡可跑,魔搭社区最佳实践
零一万物发布并开源了Yi系列中的“理科状元”——Yi-9B,可在魔搭体验
|
机器学习/深度学习 人工智能 测试技术
【自定义插件系列】0基础在阿里云百炼上玩转大模型自定义插件
本文介绍了如何在阿里云百炼平台上创建大模型自定义插件,以增强AI模型功能或适配特定需求。通过编程接口(API)或框架设计外部扩展模块,开发者可在不修改底层参数的情况下扩展模型能力。文章以万相文生图V2版模型为例,详细说明了创建自定义插件的五个步骤:新建插件、创建工具、测试工具、复制第二个工具及最终测试发布。同时,提供了官方文档参考链接和具体参数设置指导,帮助用户轻松实现插件开发与应用,推动AI技术在各行业的广泛应用。
1984 0
|
存储 机器学习/深度学习 人工智能
【AI系统】昇腾 AI 处理器
本文介绍华为昇腾AI处理器的架构与卷积加速原理,基于达芬奇架构设计,支持云边端一体化解决方案,具备高能效比和强大的3D Cube矩阵计算单元。文章详细解析了昇腾AI处理器的核心组件及其高效的数据处理机制,旨在通过软硬件优化实现高效的卷积计算加速。
1519 2
|
存储 人工智能 安全
人工智能管理体系解读(六)
ISO/IEC 42001:2023 是一项国际标准,旨在为组织建立、实施、维护和持续改进人工智能管理体系(AIMS)提供框架。该标准强调绩效评价的重要性,包括监视、测量、分析和评审,确保人工智能系统符合道德、法律及运行参数。通过内部审核和管理评审,组织可以识别改进机会,推动持续优化,确保与战略目标一致。认证有助于提升组织声誉,展示其对负责任的人工智能管理的承诺。
606 7
|
XML Java 数据格式
【Spring】全面讲解IOC、AOP、注入方式、bean的生命周期、aop通知应用 spring与web容器整合
Spring是一个开源的轻量级Java应用开发框架,它提供了一种简单、高效、灵活的方式来构建企业级应用程序。Spring框架的核心特点是依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming),它通过一组模块化的组件提供全面的支持,使开发人员能够快速搭建可扩展、可维护的应用。
|
弹性计算 大数据 测试技术
2024年阿里云服务器新购、续费、升级优惠信息整理汇总
随着云计算技术的深入普及,越来越多的企业和个人选择阿里云作为他们的云服务提供商。然而,续费成本往往成为用户考虑的重要因素。为了帮助用户更经济地续费,阿里云推出了一系列优惠活动和代金券。2024年阿里云服务器优惠活动,轻量2核2G3M服务器61元一年、2核4G4M带宽165元1年,云服务器4核16G10M带宽26元1个月、149元半年,阿里云ECS云服务器2核2G3M新老用户均可99元一年续费不涨价,企业用户2核4G5M带宽199元一年
3219 2
|
存储 编解码 安全
图片处理与静态网站托管 | 学习笔记
快速学习图片处理与静态网站托管
图片处理与静态网站托管 | 学习笔记
|
Oracle 关系型数据库 OLAP
Oracle 11.2.0.4数据泵expdp导出报DBMS_AW_EXP等信息
Oracle 11.2.0.4数据泵expdp导出报DBMS_AW_EXP等信息
665 0
|
机器学习/深度学习 编解码 缓存
阿里云服务器付费模式、地域、实例规格和配置怎么选(新手教程)
选择好适合自己的阿里云服务器配置,不仅能保障自己的网站或APP等应用在云服务器上的顺利运行,还能节约购买成本,不照成云服务器资源和资金的浪费
1015 0

热门文章

最新文章