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

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

inode是什么?

  认识inode之前,先来看一下一个文件在磁盘里面是怎么存储的。
  首先一个物理的圆盘形状且多层的一个磁盘会被逻辑化成为一个数组,找到一个文件在这个数组里面叫做LBA寻址。
  这个数组会被划分为一个一个的block,所以磁盘也会被称为块设备。一个个的block的大小是在格式化的时候就确定好了的,并且不能更改。一般来说,初次使用磁盘的时候就会格式化磁盘。
  一个文件系统会包含多个block。
如下:
硬链接和软链接以及inode的简述【Linux】,系统编程,linux,运维,服务器,c++,学习方法
  上面这个图片叫做块组(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的简述【Linux】,系统编程,linux,运维,服务器,c++,学习方法
  可以看出来多个文件名共用一个inode
硬链接和软链接以及inode的简述【Linux】,系统编程,linux,运维,服务器,c++,学习方法
  上图可以看出来,使用任意一个文件名来改变文件内容,所有文件名中的内容都会改变。
硬链接和软链接以及inode的简述【Linux】,系统编程,linux,运维,服务器,c++,学习方法
  可以看出来,随着硬链接的增加,这个字段的数字大小也会增加。这个字段代表硬链接数。

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

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

软链接

  • 软链接(Symbolic Link),也被称为符号链接或软连接,是一种特殊类型的文件,它指向另一个文件或目录。
  • 软链接是通过路径名来引用的,类似于一个快捷方式或别名。它允许将一个文件或目录链接到另一个位置,而无需复制或移动实际的数据。
  • 软链接与硬链接不同,软链接是一个独立的文件,它包含了指向目标文件或目录的路径信息。这意味着当访问软链接时,操作系统会解析软链接并跟踪到目标文件或目录,然后访问真正的数据。
    使用这个命令来建立软链接:
          ln -s <目标文件或目录> <链接名>
    硬链接和软链接以及inode的简述【Linux】,系统编程,linux,运维,服务器,c++,学习方法
      可以看出来,硬链接数还是1,因为软链接拥有独立的一个inode,每一个文件都是独立的,所以u和t是两个文件,只不过u指向了t,且u的文件大小也不是t的文件大小。
      需要注意的是,软链接有可能形成循环链接,即链接链条上存在循环引用。这种情况下,操作系统可能无法正确解析链接关系,导致访问错误或死循环。因此,在创建软链接时应注意避免循环链接。

    😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄文章来源地址https://www.toymoban.com/news/detail-823241.html

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

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

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

相关文章

  • Linux系统编程:文件系统和inode

    目录 一. 磁盘的结构和读写数据的方式 1.1 磁盘级文件和内存级文件 1.2 磁盘的物理结构 1.3 访问磁盘数据的方式 二. 磁盘文件系统 2.1 磁盘的分区管理方法 2.2 文件名和inode的关系 三. 结合文件系统对文件创建和删除的相关问题的理解 3.1 文件创建时操作系统进行的工作

    2024年02月16日
    浏览(39)
  • Linux硬链接和软连接

    硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inod

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

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

    2024年02月13日
    浏览(48)
  • Linux教程——深度剖析Linux硬链接和软链接,直击它们的本质!

    在Linux系统中, 硬链接(Hard Link)和软链接(Symbolic Link,也称为符号链接或软连接) 是两种常用的文件链接方式。它们都用于创建指向其他文件的链接,但它们的实现和特性有所不同。下面将详细深度剖析硬链接和软链接,并解释一下它们的本质。 硬链接是通过文件系统中

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

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

    2024年02月04日
    浏览(40)
  • linux之文件系统、inode和动静态库制作和发布

    1.没有被打开的文件都在磁盘上  --- 磁盘级文件 2.对磁盘级别的文件,我们的侧重点 单个文件角度 -- 这个文件在哪里,有多大,其他属性是什么? 站在系统角度 --  一共有多少文件?各自属性在哪里?如何快速找到?可以存储多少个文件?如何快速找到指定文件?如何对此

    2024年04月10日
    浏览(44)
  • c语言的链接(静态链接和动态链接)以及a.out的简述

           链接过程分类两种,动态链接和静态链接。如果函数库的一份拷贝是可执行文件的物理组成部分,则为静态链接,动态链接生成的可执行文件只包含了文件名,在运行时,程序会自动寻找所需要的函数库。函数只有在运行的时候才会被解析调用,它是在main函数之前

    2024年02月07日
    浏览(37)
  • Linux系统编程学习 NO.5 ——shell命令行的概念以及原理、权限的概念

    首先,用户下达指令需求。此时Linux操作系统的内核kernel,并不会直接接收用户下达的指令,因为操作系统不擅长跟用户打交道。那么指令要如何下达呢?这就命令行解释器来对用户的指令进行处理。 shell对于Linux主要是对指令进行解析,解析指令给Linux内核。反馈结果在通过内

    2024年02月06日
    浏览(50)
  • linux系统nginx主配置和日志简述

    变量 说明 $remote_addr 远程地址:记录客户端ip $remote_user 远程客户:记录客户端用户名称 [$time_local] 本地时间:服务器自身时间 $request 请求:记录请求的URL和HTTP协议 $status 状态:记录请求状态 $body_bytes_sent 发送给客户端的字节数,不包括影响头的大小 $http_referer 引用:记录从

    2024年02月02日
    浏览(40)
  • 《Linux操作系统编程》 第六章 Linux中的进程监控: fork函数的使用,以及父子进程间的关系,掌握exec系列函数

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月11日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包