【Linux】文件系统软硬链接的那些事儿

这篇具有很好参考价值的文章主要介绍了【Linux】文件系统软硬链接的那些事儿。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:理解什么是软硬链接,并且能创建软硬链接。

> 毒鸡汤:再小的事,别人做了是情分,不做是本分。可是有些人,永远只要求他人付出,不懂得感恩。

> 专栏选自:Linux初阶

> 望小伙伴们点赞👍收藏✨加关注哟💕💕

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

🌟前言

我们已经知道了简单的文件知识,文件的读写呀,管理文件呀等等等,那我们来想我们学习的文件都时独立,两个文件不能相互沟通,就好像需要过一条河,需要一座桥,使两岸可以来往,那文件的来往那又该如何呢?这里不得不提出软硬链接了。

⭐主体

 学习【Linux】文件系统软硬链接咱们按照下面的图解:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

🌙 了解磁盘

磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。下面,我们来简单了解一下磁盘的结构。

💫 磁盘的物理结构

结构:

磁盘是外设并且是我们计算机中唯一的机械结构(机械结构相对较慢)。

概念:

磁盘的盘片/盘面就像光盘一样(盘面上存储数据),两面都有。而像刀子一样的是磁头(每一面都有一个磁头),磁头和盘面并没有接触,磁盘必须防止抖动。中间有马达,一旦盘片加电之后,盘片旋转,磁头摆动,马达可以控制磁头摆动,控制盘片旋转。对应的磁盘也有自己的硬件电路,通过硬件电路+伺服系统,给磁盘发二进制指令,让磁盘定位寻址某个区域。

图解:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

解释:

  • 这个磁盘的盘片就像光盘一样,数据就在盘片上放着,只不过光盘是只读的,磁盘是可读可写的
  • 盘面上要存储数据!(二进制) -> 但计算机只认识二进制 -> 二进制是两态 —> 我们想到磁铁也是两态的

💫 磁盘的存储结构

结构:

机械硬盘的寻址的工作方式:盘片不断旋转,磁头不断摆动,定位到特定的扇区(面 — 磁道 — 扇区),通过柱面Cylinder —— 磁头Head —— 扇区Sector 的寻址方法为CHS寻址,扇区的大小:512字节是硬件上的要求(外磁道和内磁道都是一样大小,密度不一样)

分析:

在单面上定位扇区:通过确认磁道,最终确定在对应磁道的哪一个扇区。确认磁道:每个磁道都有自己的编号,磁道周长不一样,但是存储大小是一样的,因为扇区大小一样,一个磁道有多少扇区也是固定的,所以每个磁道的扇区也有编址。所以定位到某个磁道上就能够找到。

机械硬盘的寻址方式:盘片不断旋转,磁头不断摆动,就是在确认在哪一个磁道,如何确认在哪个扇区?盘片也在旋转,就是让磁头定位扇区。

柱面:把一系列同心的磁道压在一起,宏观上看成一个整体。一般定位的时候:磁头、柱面、扇区====(磁头、磁道、扇区),这两个是等价的。柱面相当于磁头一起指向的位置就是柱面的边界位置。

在磁盘中定位任何一个扇区:先定位在哪一个磁道(哪个柱面),磁道确定,所有磁头共进退,此时磁头不动,在去定位磁头(定位盘面),最后在定位哪一个扇区。

图解:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

总结:

磁盘中定位任何一个扇区,采用的硬件级别定位方式(CHS定位法):柱面Cylinder——磁头Head——扇区Sector

💫 磁盘的逻辑结构

概念:

类比于磁带,卷起来是圆形的,扯开是线性结构的。所以我们可以把磁盘盘片想象成线性结构。以OS为角度,则认为磁盘是线性结构,要访问某个扇区,只需要定位数组下标,也就是说知道这个扇区的下标就算定位了一个扇区。在操作系统内部,我们称这种地址为LBA(Logic Block Address)地址!而要写到物理磁盘上,我们就要把LBA地址转换成对应磁盘的三维地址CHS地址。总结来说,OS的地址为LBA地址,而对应的磁盘为CHS地址。

图解:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

总结:

OS要进行逻辑抽象,不直接使用CHS:1.便于管理,管理数组与管理三维立体结构,数组比较好管理;2.不想让OS的代码和硬件强耦合!比如磁盘的基本大小改变,OS的源码有必要跟着变。

🌙 文件系统与inode

概念:

文件在磁盘中是如何存储:文件是在磁盘中的,而逻辑结构是线性结构。磁盘的空间很大,虽然对应的磁盘的访问的基本单位是512字节,但是依旧很小,OS内的文件系统会定制的多个扇区的读取,以1KB,2KB,4KB为基本单位,所以即使读取/修改1bit,也必须将4KB加载到内存,进行读取或修改,在将其写回磁盘。我们采用分治的思想,来管理磁盘空间进行分区:大的磁盘空间->小空间,大事化小,给每个分区写入不同的文件系统。

图解:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

分析:

boot block 存在于每个分区的开头,备份文件,是与启动相关的,供启动时查找分区,我们再把剩下的空间继续拆解分组,Block group 0 ,Block group 1 … 那么问题就又变成了如果我能管理好Block Group 0,就能管好1~n这些,因此研究文件系统又缩小范围了,就变成研究这一个Block Group 0。

这里我们逐个分析:

  •  Super Block:文件系统的属性信息,整个分区属性的属性集(每个块组都有 防止磁盘被刮伤而找不到 文件属性)
  •  Data blocks:多个4KB(扇区*8)大小的集合,保存的都是特定文件的内容
  •  inode Table:inode是一个大小为128字节的空间,保存的是对应文件的属性,该块组内,所有文件的inode空间的集合,需要标识唯一性,每一个inode块都要有一个inode编号!(一般而言,一个文件,一个inode,一个inode编号)
  •  BlockBitmap(位图):统计block的使用情况。假设有10000+个blocks,就有一一对应的比特位。其中比特位为1,代表该block被占用,否则表示可用
  •  inode Bitmap:统计inode的使用情况,假设有10000+个inode,就有一一对应的比特位。其中比特位为1,代表该inode被占用,否则表示可用
  •  GDT:块组描述符,已经使用了多少,有多少个inode,已经被占用了多少个,还剩下多少个,使用了多少

分析问题:

众所周知,文件 = 文件内容 + 文件属性,其中文件内容放在Data blocks中:

内容放在data blocks中,属性在inode table中,而inode内部保存了一个数组,保存对应块的编号,二者就联系起来了:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

但是如果文件特别大?并不是所有的data block只能存放文件的数据,也可以存放其他块的块号,所以最终指向更多的block来存储。

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

 总结:

  • 创建一个文件:在位图的比特位由0置为1,找到其inode table,属性填进去,文件的数据写到block里,在inode和block建立映射关系,最后返回inode编号,创建成功
  • 查找一个文件:拿到inode找到inode table,在根据inode table找到对应的数据块,内容加属性就全找到了
  • 删除一个文件:删除文件也需要用到inode,实际上删除一个文件时,我们只需要找到inode在inode bitmap当中的比特位,把比特位由1置为0就删除了。

所以删除一个文件根本不需要把数据属性和内容清空,只要把inode bitmap的1置为0,属性就删除了,这个文件也占着数据块,也把block的比特位也置为0。所以把文件删除是能够恢复的,一旦删除只是把bit位清掉了,想要恢复只要得到inode的编号,然后把inode bitmap里的比特位由0置为1,在去inode table对应的映射表,在block bitmap的0置为1。

如果在Linux中误删除一个文件,还是能恢复的,但是前提必须是inode和data block没有被占用,所以当误删除一个文件时,最好的办法就是什么都不做。而我们在Windows中删除文件到回收站,只是转移了目录,在回收站中删除才是真正的删除。

可是我们在查找一个文件的时候,用的不是inode,而是文件名?

  1. 任何一个文件都在一个目录下,但是这些文件并没有重复的文件名
  2. 目录是一个文件,也有自己的inode,有对应自己的data block,目录的数据块存放的是当前目录下的文件名和inode的映射关系,所以inode并不需要保存文件名。
  3. 所以我们在一个目录下新增一个文件,必须得有写入权限,新增一个文件的时候,要向当前目录的内容里去写文件名和inode的映射关系,所以必须得有写入权限。罗列当前的文件,要有读权限,想读的时候要根据文件名找到inode读取底下的所有文件的属性,读的是拿到文件名,必须得去访问数据块,所以要有读权限

🌙 软硬链接

💫 软链接

建立软链接:

ln -s myfile.txt soft_file.link

举个栗子:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

分析:

有自己独立的inode的称为软链接,即软链接是独立的文件,独立的文件有独立的inode和对应的文件内容。所谓的软连接标定文件并不是用inode来标记的,我们删除myfile.txt,然后再去cat soft_file.link:这个软链接并没有用目标文件对应的inode,而是用目标文件的文件名,把文件删了找不到,软链接的数据块里保存的是所指向的目标文件的路径,所以目标文件一删,软链接也就失效了。

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux


删除链接,可以rm,但是更建议

unlink soft_file.link

分析:

软链接相当于快捷方式。软链接的作用:当执行路径非常的深,导致路径非常的长,我们可能会忘记路径,所以我们可以通过软链接不用每次都输入长长的路径,可以通过软链接而快速找到:

举个栗子:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

分析:

这就相当于Windows的快捷方式了。

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

💫 硬链接

创建硬链接:不带上s就是硬链接了。

ln myfile.txt hard_file.link

举个栗子:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

分析:

软硬链接最重要的区别在于是否具有独立的inode,硬链接没有独立的inode,指向到其他文件的inode,不是独立的文件,**建立一个硬链接是在做什么?**当硬链接其中一个文件的大小、内容等发生变化,那硬链接的文件都会发生相应的变化,所以建立硬链接根本没有新增文件,因为没有给硬链接分配独立的inode,既然没有创建文件那么就没有自己的属性集合和内容集合,用的是别人的inode和内容。创建硬链接本质就是在指定的路径下,新增文件名和inode编号的映射关系!

图解:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

说明:

inode可能会被多个文件指向,所以inode有一个计算器,count的引用计数,把引用计数称为硬链接数:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

这也是我们为什么能看到1变为2的原因,因为有了新的文件名,inode被两个文件所指向,硬链接数变为2了:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

硬链接的作用:

为什么创建一个普通文件的时候,硬链接数是1?

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

首先目录和本身的inode就是一组映射关系了,另外,第二个是目录内部的.(.表示当前目录,也是文件名。inode是一样的)和inode也是一组映射,所以是硬链接数是2

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

现在在empty目录下在创建一个目录dir,此时empty目录的硬链接数变为了3:

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

因为此时dir的…文件指向上级的目录empty,所以硬链接数为3

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux

🌙 总结

我们大致了解磁盘的物理结构、存储结构、逻辑结构;然后就是文件系统与inode的认识。

最后是软硬链接,软硬链接本质区别就是有无独立的inode.

🌟结束语 

       今天内容就到这里啦,时间过得很快,大家沉下心来好好学习,会有一定的收获的,大家多多坚持,嘻嘻,成功路上注定孤独,因为坚持的人不多。那请大家举起自己的小手给博主一键三连,有你们的支持是我最大的动力💞💞💞,回见。

【Linux】文件系统软硬链接的那些事儿,Linux的世界也很美,linux文章来源地址https://www.toymoban.com/news/detail-855091.html

到了这里,关于【Linux】文件系统软硬链接的那些事儿的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】什么是文件系统及inode?如何创建软硬链接?软硬链接有什么作用?

    了解一下文件系统: Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被 划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设 定block大小为1024、2048或4096字节。而

    2024年02月11日
    浏览(36)
  • 【Linux】-文件系统的详解以及软硬链接

    💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法🎄 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 今天我们开始讲解文件系统,上一篇我们通过文件操作,

    2024年02月04日
    浏览(27)
  • 【Linux】基础 IO(文件系统 & inode & 软硬链接)-- 详解

    1、前言 我们一直都在说打开的文件,磁盘中包含了上百万个文件,肯定不可能都是以打开的方式存在。其实文件包含打开的文件和普通的未打开的文件,下面重点谈谈未打开的文件。 我们知道打开的文件是通过操作系统被进程打开,一旦打开,操作系统就要维护多个文件,

    2024年03月21日
    浏览(35)
  • 【Linux】基础IO——文件系统|软硬链接|动静态库

    基于上篇博客所写到的文件各种操作都是基于被打开文件所进行操作的,那么如果一个文件没有被打开它存在哪里呢?这个答案毫无疑问肯定是存在于磁盘上的。那么,对于一个没有打开的文件(也就是磁盘文件)我们应该如何理解呢? 这里我们所要讲的磁盘是机械硬盘、即

    2024年02月04日
    浏览(33)
  • 【Linux】文件系统中inode与软硬链接以及读写权限问题

    我们接下来以磁盘举例: 文件=文件内容+文件属性 Linux中文件内容与属性是分开存储的。 文件内容:在数据块中存着 文件属性:在inode中存着 Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子 超级块(

    2024年02月05日
    浏览(60)
  • 【探索Linux】—— 强大的命令行工具 P.13(文件系统 | 软硬链接 | 动态库和静态库)

    在计算机科学领域中,Linux 系统一直以来都是备受推崇的操作系统之一。其中,文件系统、软硬链接、动态库和静态库是 Linux 系统中非常重要的概念,在实际应用中扮演着不可或缺的角色。 在上一篇文章中,我们了解了 Linux 系统中文件描述符、重定向以及基础 IO 操作的相关

    2024年02月04日
    浏览(37)
  • [Linux]理解文件系统!动静态库详细制作使用!(缓冲区、inode、软硬链接、动静态库)

            hello,大家好,这里是bang___bang_,今天来谈谈的文件系统知识,包含有缓冲区、inode、软硬链接、动静态库。本篇旨在分享记录知识,如有需要,希望能有所帮助。 目录 1️⃣缓冲区 🍙缓冲区的意义 🍙常见缓冲区刷新策略 🍙缓冲区位置猜想 🍥现象猜测 🍥现象解

    2024年02月13日
    浏览(31)
  • 文件系统和软硬链接

    文件操作就是进程和被打开文件之间的关系,但是操作系统不可能同时将磁盘中的所有文件打开。被打开的文件要被管理起来,没有被打开的文件为了方便我们随时去读取也要被管理起来。 1.了解磁盘的物理结构 磁盘是计算机中几乎唯一 一个机械设备并且是一个外设,它的

    2024年02月01日
    浏览(24)
  • 【linux】文件系统+软硬连接+动静态库

    自我名言 : 只有努力,才能追逐梦想,只有努力,才不会欺骗自己。 喜欢的点赞,收藏,关注一下把! 文件分为:被打开的文件和没被打开的文件,前面两篇博文主要讲解的是进程与被打开文件的关系。今天这篇博客讲的是没被打开的文件如何在磁盘上存放,文件系统如何

    2024年02月07日
    浏览(25)
  • 【Linux】—— 详解软硬链接

    前言: 本期,我将要给大家讲解的是有关 Linux下 软硬链接 的相关知识!!! 目录 前言 (一)理解硬链接 1.什么是硬链接 2.创建硬链接  3.硬链接的使用场景 (二)理解软链接 1.什么是软链接 2.创建软链接 3.软链接使用场景 (三)硬链接和软链接的对比 总结 文件共享可以

    2024年02月03日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包