Linux之文件系统与软硬链接

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

目录

一、磁盘

1、磁盘的物理结构

2、磁盘的存储结构

3、磁盘的抽象结构

二、文件系统与inode

1、初识inode

2、文件系统

3、用inode编号找文件属性和内容

4、inode和文件名的关系

5、创建一个文件

6、查看一个文件

7、删除一个文件

三、软硬链接

1、软连接

2、硬链接


一、磁盘

磁盘可以存储大量的二进制数据,并且断电后也能保持数据不丢失。因此磁盘是一种永久性存储介质,在计算机中,磁盘是一个外设,也是唯一的机械设备。既然磁盘是一个外设,那么就意味着,磁盘和内存(掉电易失存储介质)相比就比较慢了。

目前所有的普通文件都是在磁盘中存储的。磁盘在冯诺依曼体系结构当中既可以充当输入设备,又可以充当输出设备。

1、磁盘的物理结构

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

磁盘的盘片/盘面是用来存储数据的,两面都有。磁头(每一面都有一个磁头)和盘面并没有接触。中间有音圈马达,一旦磁盘通电之后,盘片旋转,磁头摆动,马达可以控制磁头摆动,控制盘片旋转,通过磁头将二进制数据写到磁盘上。

因为磁盘上存储的是二进制数据,数据是两态的,而磁盘上有许多小的磁铁颗粒,所以磁头是通过改变磁盘上的正负性来写入数据的。

2、磁盘的存储结构

我们在知道了磁盘的物理结构后,知道盘片是用来存储数据的。那么磁盘是怎么通过磁头将数据存储到某一位置,然后又能重新找到呢?这就和磁盘的存储方法有关了。

如下图:

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

扇区:一块绿色的部分就是扇区。磁盘存储数据的基本单位。扇区大小512字节,512字节是硬件要求。

磁道:左图中,一圈一圈的灰色的同心圆就是磁道。磁盘上只有磁道位置能够存储数据,其他位置则不能存储数据。

柱面:多个半径相同的圆构成柱面。如右图紫色的部分。

如何将数据写到指定的扇区上:1、首先确认写到哪一个面上(用哪一个磁头去写入) 2、在哪一个磁道上   3、最后找到在哪一个扇区。

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

3、磁盘的抽象结构

由于操作系统并不认识磁盘的物理结构,因此操作系统在访问磁盘时必须使用自己的方式将磁盘的数据管理起来。我们可以把磁盘盘片想象成线性结构。在操作系统的角度,磁盘就是一个线性结构。我们使用数组来表示一个磁盘。要访问某个扇区,只需要找到数组下标,也就是说知道这个扇区的下标就算定位了一个扇区。

在操作系统中,我们称这种地址为LBA(Logic Block Address)地址。而要写到物理磁盘上,我们就要把LBA地址转换成对应磁盘的三维地址CHS地址。

于是在操作系统中,对于磁盘的管理,就变成了对于该数组的管理。操作系统能够通过某种方法,将LBA地址转换成CHS地址,进而可以访问磁盘数据。

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

二、文件系统与inode

1、初识inode

如下图:我们使用 ls -li 命令后,发现除了文件的名称、类型、权限、拥有者、所属组、大小最近修改时间这些内容,每个文件的最开始会有一串数字。那么这个数字是什么呢?其实这个数字就是该文件的inode编号。

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

那么inode编号代表着什么意思呢?我们接着往下看。 

2、文件系统

在操作系统中,对于磁盘的管理,本质上就是对于磁盘抽象成的数组的管理。而我们知道,如果一个磁盘的空间是很大的,所以抽象出的数组也一定是很大的,那么操作系统如何管理这么大的数组的呢?

我们假设一个磁盘有500GB的大小。如果直接对这500GB进行管理,那是十分麻烦的。所以我们可以将磁盘分成多个小的分区。对一个小的分区进行管理。我们如果将所有小的分区管理好了,那么整个磁盘就管理好了。如果一个分区还是比较大,那么我们可以继续划分,最后,我们得到一个便于管理的块组。把一个块组管理好,这个分区就管理好了,分区管理好了,整个磁盘就管理好了。

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

下面我们对一个块组中的内容进行解释:

Boot Block:一个分区的最前面,有一个区域叫做boot block。它是启动块,存在每个分区的开头,备份文件与启动相关的。

Super Block:保存的是整个文件系统的属性信息。Super Block保存在各个块组里意味着备份,如果某个块组的 Super Block损坏,便可以通过拷贝其他块组的Super Block。

Data blocks:保存特定文件的内容。虽然磁盘存储数据的基本单位是扇区(512字节),但是操作系统(文件系统)和磁盘进行IO的基本单位是4KB。data blocks相当于多个4KB大小的空间的集合。Linux的文件=内容+属性,而Linux在磁盘上存储文件是将内容和属性是分开存储的。

inode table:inode是一个大小为128字节的空间,保存对应文件的属性。inode table 则是多个inode空间的集合,所以为了区别,每一个inode空间对应一个inode编号。即:一般而言,一个文件,一个inode空间,一个inode编号。

data blocks和inode tables都是由许多个小的空间组成的,那么我们在向磁盘写入数据时,我们怎么知道哪些空间被占用了,哪些空间没有被占用呢?我们可以使用block bitmap和inode bitmap来标注这些空间的占用情况。

block bitmap:data blocks对应的位图结构,位图中的比特位位置和当前data block对应的数据块位置是一一对应的。比特位为1,代表block被占用,否则表示可用。

inode bitmap:inode对应的位图结构,统计inode的使用情况,位图中比特位的位置和当前文件对应的inode的位置是一样对应的,比特位为1,代表inode被占用,否则表示可用。

GDT(group descripteor table):块组描述符,表示该块组的属性信息,如已经使用多少,inode有多少个,已经被占用了多少个,还剩下多少个。

格式化:当磁盘完成分区后,我们还需要对磁盘进行格式化。磁盘格式化就是对磁盘中的分区进行初始化的一种操作,即:磁盘格式化就是对分区后的各个区域写入对应的管理信息,如block bitmap和inode bitmap全部初始化成为0。所以格式化通常会导致现有的磁盘或分区中所有的文件被清除。

所以,一个块组的前四个部分被我们称为文件系统信息,后面两个部分就是文件的相关内容信息。

3、用inode编号找文件属性和内容

既然文件的属性和内容是分开存储的,那么我们要怎么通过inode编号去找到它呢?

首先,属性是很容易就可以找到的,因为我们只要知道了inode编号,就可以直接找到文件的属性。但是,想要找到文件的内容就不是那么容易了。第一点,我们无法通过某种方式直接找到,而且一个文件的大小是可以很大的,这就说明了一个文件的内容会被存储在多个 data blocks中,我们必须将所有的data blocks找到,才是找到了文件的内容,但是我们怎么知道哪些data blocks属于同一个文件。

那么我们应该怎么寻找文件的内容呢?在Data blocks中,每个data block都会有一个编号。而inode其实是一个结构体,它的里面除了文件的各种属性信息外,还有一个int blocks数组,该数组里保存的数字,就是对应的data block的编号,通过这个数组,我们就可以找到属于该文件的所有内容。

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

但是,这里就又有一个疑问了, blocks数组一般只能存15个编号,可是如果文件内容的data block个数多于数组大小呢?这当然是有解决办法的。

并不是所有的data block只能存放文件的内容,也可以存放其他块的编号,所以最终指向更多的data block来存储。如下图:

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

4、inode和文件名的关系

首先,我们要知道的是,在Linux中,inode属性里面并没有文件名的概念。但是,用户使用时使用的却是文件名,而不是系统认识的inode,这是为什么呢?

在一个目录下,可以保存很多的文件,且同一个目录下文件名是没有重复的。其实,目录也是一个文件,它也有自己的inode和data block。目录的data block中保存的就是该目录下的文件的文件名与其inode编号的映射关系。

5、创建一个文件

在inode bitmap中对应的比特位由0置为1,找到其inode table,把属性填进去,文件的数据写到block里,再inode和block建立映射关系,然后block bitmap中对应的比特位由0变为1,接着文件名和inode编号建立映射关系,最后返回inode编号,创建成功。

所以我们在一个目录下创建一个新的文件,必须有写的权限,新建一个文件的时候,要向当前目录的内容里去写文件名和inode的映射关系,所以必须得有写入权限。

6、查看一个文件

拿到inode找到inode table,在根据inode table找到对应的数据块,内容加属性就全找到了。

7、删除一个文件

实际上删除一个文件时,我们只需要找到inode在inode bitmap当中的比特位和block bitmap中的比特位,把比特位由1置为0,然后解除文件名和inode编号的映射关系。

所以把文件删除是能够恢复的,因为删除只是把比特位清掉了,想要恢复只要得到inode的编号,然后把inode bitmap里的比特位由0置为1,在去inode table对应的映射表,在block bitmap的0置为1。所以如果在Linux中误删除一个文件,还是能恢复的,但是前提必须是inode和data block没有被新的内容占用,所以当误删除一个文件时,最好的办法就是什么都不做。

三、软硬链接

1、软连接

我们先来看一看下面的问题:在 bin/exe 路径下有一个可执行程序 test,如果我们要在最开始的目录下执行它的话,我们要使用完整的路径。如果可执行程序在一个路径下藏得非常深,那么即使是使用相对路径,也比较麻烦。

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

所以,我们可以使用软连接来帮助我们快速找到可执行程序

ln -s myfile.txt soft_file.link

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

软连接就相当于Windows下的快捷方式:在我的电脑上,桌面上的微信指向的就是一个长路径下微信的可执行程序。

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

有自己独立的inode的称为软链接,即软链接是独立的文件,独立的文件有独立的inode和对应的文件内容。 

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

2、硬链接

创建硬链接:

ln myfile.txt hard_file.link

 Linux之文件系统与软硬链接,Linux,linux,运维,服务器

软硬链接最重要的区别在于是否具有独立的inode,硬链接没有独立的inode,它的inode是与其链接文件的inode相同。

建立硬链接根本没有新增文件,因为没有给硬链接的文件分配独立的inode,所以创建硬链接本质就是在指定的路径下,新增文件名和inode编号的映射关系!相当于给文件取了一个别名。

我们再仔细观察,发现建立了硬链接后,数字变成了2,删除硬链接后,数字又重新变成了1。这个数字就叫做硬链接数。也就是这个文件有几个名字。

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

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

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

因为一个普通文件在创建时用户是一定要取名的,因此文件本身就有一个自己文件名和自己的inode,具有一个映射关系。

~ 为什么创建一个空目录的时候,默认硬链接数是2? 

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

首先目录和本身的inode就是一组映射关系了,第二,目录中还有一个目录 . 表示当前目录,该文件和inode也是一组映射关系,所以是硬链接数是2。

~ 现在在空目录dir下创建一个新的目录d1,此时dir的硬链接数就变成了3,为什么?

Linux之文件系统与软硬链接,Linux,linux,运维,服务器

因为d1目录下有一个目录 .. 表示上级目录,也就是dir,所以硬链接数为3。 文章来源地址https://www.toymoban.com/news/detail-776951.html

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

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

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

相关文章

  • 【Linux】-文件系统的详解以及软硬链接

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

    2024年02月04日
    浏览(40)
  • 【Linux】什么是文件系统及inode?如何创建软硬链接?软硬链接有什么作用?

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

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

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

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

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

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

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

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

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

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

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

    2024年02月13日
    浏览(50)
  • 【运维】Linux 跨服务器复制文件文件夹

    如果是云服务 建议用内网ip scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来

    2024年02月08日
    浏览(74)
  • 运维 | 如何在 Linux 系统中删除软链接 | Linux

    在 Linux 中, 符号链接 (symbolic link,或者symlink)也称为 软链接 ,是一种特殊类型的文件,用作指向另一个文件的快捷方式。 我们可以使用 ln 命令来创建软连接,那么怎样删除呢? Linux 中没有用于删除符号链接的特殊命令,不过可以使用 rm 命令,该命令主要用于删除文件

    2024年04月14日
    浏览(56)
  • 华为云云耀云服务器L实例评测 | Linux系统宝塔运维部署H5游戏

    本章节内容,我们主要介绍华为云耀服务器L实例,从云服务的优势讲起,然后讲解华为云耀服务器L实例资源面板如何操作,如何使用宝塔运维服务,如何使用运维工具可视化安装nginx,最后部署一个自研的H5的小游戏(6岁的小朋友玩的很开心😁)。 前端的同学如果想把自己

    2024年02月07日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包