硬链接和软链接以及inode的简述【Linux】

简介: 硬链接和软链接以及inode的简述【Linux】


inode是什么?

  认识inode之前,先来看一下一个文件在磁盘里面是怎么存储的。

  首先一个物理的圆盘形状且多层的一个磁盘会被逻辑化成为一个数组,找到一个文件在这个数组里面叫做LBA寻址。

  这个数组会被划分为一个一个的block,所以磁盘也会被称为块设备。一个个的block的大小是在格式化的时候就确定好了的,并且不能更改。一般来说,初次使用磁盘的时候就会格式化磁盘。

  一个文件系统会包含多个block。

如下:

  上面这个图片叫做块组(Block group)。里面有一部分叫做inode Table.里面存放着一个个的inode,一个inode里面包含一个文件的属性,每一个inode都有一个inode编号。另外,Data blocks 里面有一部分叫做数据项,其中包含了 文件名和inode的一一对应的映射关系。并且,每一个文件独有一个自己的目录项

  所以同一个目录下不可以有相同的文件名,不同目录下可以有相同的文件名。

找文件的步骤:

  1. 读取根目录:首先,操作系统会读取磁盘的根目录。根目录是文件系统的顶层目录,它包含了文件系统中所有文件和目录的信息。

  2. 遍历目录结构:操作系统会通过根目录开始遍历文件系统的目录结构。它会逐级进入子目录,读取每个目录中的目录项信息。

  3. 匹配文件名:操作系统会比对目录项中的文件名与待查找文件的文件名是否匹配。如果匹配成功,则找到了目标文件的inode号码。

  4. 获取inode信息:根据inode号码,操作系统会通过inode表或其他数据结构获取与该inode相关联的元数据信息,如文件大小、权限、所有者等。

  5. 定位数据块:一旦获取了inode信息,操作系统就知道了文件实际存储在哪些数据块中。通过inode中的指针或引用,操作系统可以定位到文件的数据块。

  6. 读取文件内容:最后,操作系统会读取文件数据块中存储的实际文件内容,并将其提供给用户进行读取或处理。

面试题

问:系统里还有空间,为何创建文件或写入文件会失败?

答:因为inode和Data blocks的空间是固定的,不能保证两个同时有空间,若inode满了,Data blocks有空间,还是会失败。

硬链接

  我们看到,真正找到磁盘上文件的并不是文件名,而是inode。 其实在linux中可以让多个文件名对应于同一个inode。

  创建硬链接是在文件系统中创建一个指向目标文件的硬链接,硬链接与目标文件共享相同的 inode 和数据块,它们在文件系统中被视为同一实体,即使使用不同的文件名。硬链接就相当于给文件起别名

使用的命令如下:

         ln <目标文件> <链接名>

  可以看出来多个文件名共用一个inode

  上图可以看出来,使用任意一个文件名来改变文件内容,所有文件名中的内容都会改变。

  可以看出来,随着硬链接的增加,这个字段的数字大小也会增加。这个字段代表硬链接数。

  当创建出来一个文件时,这个硬链接数都是为1的。所以我们在删除文件时干了两件事情:

  1. 在目录中将对应的记录删除。
  2. 将硬连接数置为0,对应的磁盘释放。
  3. 需要注意的是,即使一个文件有多个硬链接,只要所有硬链接都被删除,文件的数据才会真正被删除。在最后一个硬链接被删除之前,其他硬链接仍然可以访问和使用文件的内容。

软链接

  • 软链接(Symbolic Link),也被称为符号链接或软连接,是一种特殊类型的文件,它指向另一个文件或目录。
  • 软链接是通过路径名来引用的,类似于一个快捷方式或别名。它允许将一个文件或目录链接到另一个位置,而无需复制或移动实际的数据。
  • 软链接与硬链接不同,软链接是一个独立的文件,它包含了指向目标文件或目录的路径信息。这意味着当访问软链接时,操作系统会解析软链接并跟踪到目标文件或目录,然后访问真正的数据。
    使用这个命令来建立软链接:
          ln -s <目标文件或目录> <链接名>

      可以看出来,硬链接数还是1,因为软链接拥有独立的一个inode,每一个文件都是独立的,所以u和t是两个文件,只不过u指向了t,且u的文件大小也不是t的文件大小。
      需要注意的是,软链接有可能形成循环链接,即链接链条上存在循环引用。这种情况下,操作系统可能无法正确解析链接关系,导致访问错误或死循环。因此,在创建软链接时应注意避免循环链接。

    😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄

相关文章
|
6月前
|
存储 安全 Linux
【看表情包学Linux】磁盘基础知识 | CHS 寻址 | 逻辑扇区 LBA | 索引节点 inode | 伪删除 inode bitmap 1→0
【看表情包学Linux】磁盘基础知识 | CHS 寻址 | 逻辑扇区 LBA | 索引节点 inode | 伪删除 inode bitmap 1→0
80 0
|
9月前
|
前端开发 Linux
7.1.3 Linux的EXT2文件系统(inode)
7.1.3 Linux的EXT2文件系统(inode)
77 0
|
11月前
|
存储 Linux 索引
Linux文件系统inode的作用
前面学习了磁盘管理中的磁盘分区,以及逻辑卷,交换分区的创建,这篇文章将介绍一下我们在分区以及格式化时候用到的ext4文件系统,本盘文章的学习内容包括了解索引(index)和块(block)的作用。
80 0
|
11月前
|
存储 缓存 算法
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(下)
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(下)
139 1
|
11月前
|
存储 Linux 编译器
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(上)
【Linux】基础IO(二)--- 理解内核级和用户级缓冲区、磁盘与ext系列文件系统、inode与软硬连接(上)
152 0
|
存储 前端开发 Linux
为学习pnpm了解一点基础:linux的文件存储 inode
本来我想去了解一下硬连接和软连接的,但是发现简单的了解一下后,还是需要进一步的了解 Inode。所以再来学学Inode。
85 0
|
机器学习/深度学习 存储 编译器
Linux——文件操作和inode
再一个进程task_struct中,会有一个files* 类型的指针,其指向的正是以恶搞file_struct的结构体。而在这么一个结构体里面,又存在着一个存储着file*的指针数组,数组的下标从0开始,一直到n(n实际上也是有上限的)。每打开一个新的文件之后。
150 1
Linux——文件操作和inode
|
运维 Linux 应用服务中间件
Linux高薪必备-软硬链接及文件系统inode| 学习笔记
快速学习Linux高薪必备-软硬链接及文件系统inode
103 0
 Linux高薪必备-软硬链接及文件系统inode| 学习笔记
|
存储 固态存储 Linux
【Linux】基础IO —— 系统文件IO | 文件描述符fd | inode | 重定向原理 | 缓冲区 | 软硬链接
如果学习文件操作,只停留在语言层面,很难对文件有深刻理解。这也是一定程度导致我对它印象不深刻,每次写都要回看文档,现在要站在系统角度重新理解。的确,学了这儿我写文件操作自信多了。 本文重点:深入理解文件描述符`fd`;理解文件系统中`inode`的概念;软硬链接。
360 0
【Linux】基础IO —— 系统文件IO | 文件描述符fd | inode | 重定向原理 | 缓冲区 | 软硬链接