文件系统和软硬链接

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

一.文件系统

文件操作就是进程和被打开文件之间的关系,但是操作系统不可能同时将磁盘中的所有文件打开。被打开的文件要被管理起来,没有被打开的文件为了方便我们随时去读取也要被管理起来。

1.了解磁盘的物理结构

文件系统和软硬链接

磁盘是计算机中几乎唯一 一个机械设备并且是一个外设,它的速度很慢,但它廉价且存储量大,目前仍然是企业存储设备的首选。对于磁盘我们应该有以下的认识:

1.磁盘是通过磁头充放电改变盘面南北极调换将数据写入到盘面上的

2.磁盘不止一片盘面,而是一摞,每个盘片有两面,有多少个盘面就有多少个磁头

3.磁头和盘面之间有很微小的距离,它们并没有直接触碰到一起(如果磁头碰到盘面就可能将盘面刮花导致数据的丢失)

4.所有的磁头是被连接在一起的,只能一起运动(共进退),即它们是指向不同盘面的同一个位置

2.磁盘的存储结构

文件系统和软硬链接

一块盘面是由多个磁道构成,一个磁道又被划分成多个扇区。各个盘面中半径相同的圆一起构成了一个柱面。

在读取磁盘数据的时候,是按照扇区为单位读取的。虽然越靠近圆心的磁道周长越小,但是它们存取的数据是一样多的,即每个扇区的存储能力是相同的,都是512字节。

a.磁盘读取

磁盘写入数据依靠的是磁头,读取数据依靠的仍然是磁头。当磁盘开始运作的时候,盘片在高速旋转,磁头在来回摆动。磁头摆动的过程就是在定位磁道(柱面)的过程,定位了磁道(柱面)以后,磁头就固定在那个磁道上不再发生偏转,此时再来确认是哪一个磁头,最后再确认数据在该磁道的哪一个扇区。

磁盘中有多个盘面也就有多个磁头,所以在确认磁道以后还需要确认磁头,确认磁头也是在确认数据在哪个盘面,为确认扇区也提供了前提。

这种定位方式被称为C(柱面)H(磁头)S(扇区)定位法

3.磁盘的逻辑结构

文件系统和软硬链接

如果使用CHS定位法,这是一种三维寻址方式,效率不够高,所以为了效率和方便管理,实际上操作系统在管理磁盘的时候,是将磁盘抽象成一种线性结构(数组)。此时我们需要读取某一个区域中的数据,只需要拿到这个区域的下标即可,这个下标在操作系统中就称为LBA地址。

操作系统内部也是使用的LBA地址,当我们实际要去磁盘中读取数据时就需要将LBA地址转换成CHS地址(通过计算可以得到)。

a.为什么操作系统不直接使用CHS地址?

1.为了方便管理,CHS寻址是三维的,而数组下标则是一维寻址

2.让操作系统的代码与硬件进行解耦,不让硬件的变化影响操作系统

b.实际IO一次的大小

虽然一个扇区的大小是512字节,但是对于文件来说还是太小了,毕竟我们大部分的文件文件都是几兆到几个G的。所以操作系统每次去磁盘读取数据的时候都会以1KB,2KB,4KB为基本单位(大部分都是4KB)。也就是说哪怕你只需要读取一个扇区中的一个比特位,操作系统也会加载4KB大小的数据。

也就是说操作系统将4KB数据加载进来以后,很可能不能被完全利用,但是这也不一定就意味着浪费。根据局部性原理:当我们访问了该数据以后,大概率是要访问该数据周围的数据的。所以一次性加载4KB大小的空间,在某种程度上也算是一种预加载。

在对比顺序表和链表的时候,说顺序表CPU高速缓存命中率高。不就是因为顺序表的数据存储在一块连续的空间中吗,因为一次性会加载4KB大小的空间,所以下次再去访问顺序表后续的元素就会发现它已经在内存中了。

操作系统中的内存其实是被划分成了一个一个的块,这些块的大小为4KB,这就是页框。

而磁盘中的文件,尤其是二进制可执行文件,也是被划分成了4KB大小的块,这个就是页帧。

4.磁盘的分区管理

我们的磁盘动不动就是512G,要管理这么大一块空间是一件很不容易的事。操作系统在管理磁盘的时候采取的是分治的思想,首先将磁盘进行分区(将磁盘分成C盘,D盘),然后再将区进行分组。

4.1.ext文件系统

文件系统和软硬链接

注意:Boot Block是启动块,大小为1kb,由pc标准规定的,用来存储磁盘分区信息和启动信息,任何文件系统都不能操作该块。其他的每个Block Group都具有相同的组成结构

Super Block:存放的是文件系统本身的结构信息未使用的Data Block和inode的数量、一个Data Block和inode的大小、最近一次挂载的时间、最近一次写入数据的时间、最近一次检验磁盘的时间等其他文件系统的相关信息,主要包括Date Block和inode的总量。每一个Block Group中都有一个Super Block,其中以Group0中的为主,其他的为辅;这是一种备份,因为一旦Super Block被损坏整个文件系统都会受到影响。

Group Descriptor Table:块组描述表,存放该分区中的所有块组的属性信息

Block Bitmap:是一个位图结构,用1表示该位置的Data Block被占用,用0表示没有被占用

inode Bitmap:位图结构,用1表示该inode被占用,0表示没有被占用

inode Table:inode表,存放该分组内所有可用的inode(已使用的+未使用的),每个inode的大小是128/256字节,inode和文件一 一对应,每个inode中都存放着该文件的几乎所有属性(在操作系统中,inode是文件的唯一标识)。文件名不在inode中存放

Data Blocks(数据块):存放分组内所有的Data Block,Data Block用于存放文件的数据,每个Data Block的大小是一样的。(大文件占用的数据块多,小文件占用数据块少)

通过上面的信息我们要知道这些:

1.格式化就是重写文件系统,而文件系统的恢复就是用其他没有被损害的Super Block去恢复被损坏了Super Block

2.创建新文件就是在inode Bitmap中找到一个没有被占用的inode存放该文件的属性,再去Block Bitmap中找到没有被占用的Data Block写入该文件的数据,最后建立inode和Data Block之间的映射关系

a.文件查找

inode和文件是一一对应的,inode在同一个分区是连续的,不同分区的inode是没有关联的。查找文件就是去inode Bitmap中查找该inode所对应的比特位是否为1,如果是,就说明该文件存在,而该inode在位图中对应的比特位相对于第一个比特位有一个偏移量,这个偏移量就可以作为该inode在inode Table的相对位置。这就可以得到文件的属性内容了。

在inode中存在一个block[15]数组,该数组中0-11下标存放的都是该文件使用的数据块,而block[12]对应的数据块中不存放文件的内容,而是存放其他的数据块地址,文件的数据也可以写入到数据块所存储的数据块中,数据块中存数据块,这就是二级索引。block[13]就是三级索引,block[14]就是四级索引。这样逐级展开以后就可以存放相当巨大的数据。

一个数据块的大小只有4KB,而一个数据块大小的地址可能只有4字节,通过建立索引的方式就可以解决大文件的存储和查找

b.文件删除

在文件系统中删除文件只要将该文件对应的inode在inode Bitmap中由1置0,这个文件就算是被删除了。

因为一旦一个inode在inode Bitmap中被由0置1,操作系统就会认为该inode没有被占用,会将这个inode分配一个新创建的文件并覆盖式的写入文件属性。

几乎所有在计算机中的删除都是这样的惰性删除。

在创建一个新文件时,是实实在在的要写入数据,但是要删除一个文件只要在inode Bitmap中将对应的比特位由1置0即可,这就是为什么删除文件远比下载文件要快。

因为删除文件只是在inode Bitmap中将对应的比特位由1置0,所以这也为文件恢复提供了可能性,当一个文件被误删以后最好不要做任何除了恢复文件的操作,否则就可能会有新数据覆盖之前被删掉文件的数据块(或者inode)。

4.2目录的属性和数据

虽然操作系统用inode标识文件,但用户使用的是文件名,但inode又不存储文件名。一个目录也有自己的inode和数据块,目录的inode存放的子让是目录的属性,目录的数据块中存放的就是该目录下所有文件的文件名和inode映射关系。

这就是为什么同一个目录下不能有两个同名文件,因为inode与文件是一一对应的(也就是说一个inode只能与一个文件名映射)。

在Linux权限学习时提到要在一个目录中创建新文件必须要有写入权限,这是因为在目录下创建新文件就要在该目录对应的数据块中写入新文件和其inode对应的映射关系。

二.软硬链接

软链接的建立和删除

文件系统和软硬链接

1.使用ls -li可以查看文件的inode

2.软链接是一个独立的文件,有自己的inode和数据块

3.删除软连接可以使用unlink也可以使用rm直接删除软连接文件

软链接的使用场景

软链接相当于Windows下的快捷方式:

文件系统和软硬链接

删除软链接并不会影响源文件,但源文件一旦被删除以后软链接就失效了

硬链接的建立和删除

文件系统和软硬链接

观察发现,硬链接文件的inode和源文件相同,硬链接没有自己的inode并不是一个独立的文件,它只是对应文件名和inode的一个映射关系。

文件系统和软硬链接

硬链接数代表有几个文件指向这个inode,inode中有一个ref变量,新建一个硬链接ref++,反之则ref–,只有当ref被减为0的时候这个文件才会被真正的删除。(关闭文件也是一样,只有没有任何进程使用该文件这个文件才会被关闭)这种方式被称为引用计数。

也就是说硬链接其实是给该文件取了一个别名,并让ref增加一,使得该文件再被删除以后,这个文件的数据还能被硬链接访问。

硬链接的使用场景

当我们创建一个新文件时,它的硬链接数就是1(代表它自己本身).但是我们创建一个目录时,默认的硬链接数就是2,这是因为除了目录本身,还会默认创建一个.文件代表当前目录

文件系统和软硬链接

当我们创建一个目录后,会默认生成...,其中.代表当前目录,而..代表上级目录,这就是为什么我cd ..可以退回到上级目录的原因。

如果我在dir目录下继续创建目录,那么dir的硬链接数会继续++,因为新目录下会有..指向dir目录文章来源地址https://www.toymoban.com/news/detail-429264.html

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

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

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

相关文章

  • 【Linux】磁盘结构 | 文件系统 | 软硬链接

    文件的状态有被打开和没有被打开,之前谈到一个文件被进行读写,就要打开加载到内存中,通过对应的系统调用,fd文件描述符的管理,write和read等函数的增删查改。并且借助缓冲区对文件属性和内容的修改。 大部分文件是没有被打开的(不需要访问),都在磁盘里保存的

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

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

    2024年02月04日
    浏览(27)
  • 【Linux】文件系统软硬链接的那些事儿

    作者:დ旧言~ 座右铭:松树千年终是朽,槿花一日自为荣。 目标:理解什么是软硬链接,并且能创建软硬链接。 毒鸡汤:再小的事,别人做了是情分,不做是本分。可是有些人,永远只要求他人付出,不懂得感恩。 专栏选自:Linux初阶 望小伙伴们点赞👍收藏✨加关注哟💕💕

    2024年04月22日
    浏览(31)
  • 【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)
  • 操作系统-区分文件共享的两种方式:软链接和硬链接

    软链接与硬链接是用来干什么的呢? 为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。 由于linux下的

    2023年04月12日
    浏览(28)
  • 408操作系统-区分文件共享的两种方式:软链接和硬链接

    软链接与硬链接是用来干什么的呢? 为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。 由于linux下的

    2023年04月17日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包