当前位置: 首页 > article >正文

Linux:软硬链接

目录

一、概念

软链接

硬链接

二、原理

硬链接

软链接

三、使用场景

硬链接

软链接 


一、概念

  • 软链接

在当前目录下,有一个普通文件a.txt

ln -s a.txt a_soft.link

结论:

软链接是一个文件。

观察inode_id,发现软链接有着独立的inode_id,说明a.txt和它对应的软链接是两个文件。 

  • 硬链接

在当前目录下,有一个普通文件b.txt

ln b.txt b_ln.hard

 结论:

硬链接没有独立的inode_id,因此硬链接不是一个独立的文件。此外,在ls的打印信息中,还有一列是数字的信息是什么属性?

二、原理

  • 硬链接

现在,向b.txt文件添加内容"bbb",再删除b.txt,然后打印它的硬链接b_ln.hard,发现原来的内容还在,并且那列未知的属性由2变为了1

因此,建立硬链接,本质是新建了一个文件名,即在所在目录的data block中新加了一条''文件名-inode_id''的映射关系,并且让对应inode结构体中的引用计数加1。

那么,这列未知属性的数字,这个数字表示的就是有几条这样的映射关系,其实是在inode结构体中有一个名称为引用计数的变量,有几条"文件名-inode_id"的映射关系,引用计数的值就为几,当删除一个文件的时候,其实是先把引用计数的值减一,如果减一后为零,则再做位图操作

  • 软链接

软链接的内容,存放的是被链接文件的路径

三、使用场景

  • 硬链接

新建一个目录test1,解释一下为什么这个目录的引用计数是2。

首先,"路径/test1 —— inode_id"这是一条映射关系,存储在当前目录的data block中,此外,在test1目录下,还有两个文件,其中 "路径/test1/. —— inode_id"这也是一条映射关系,于是此时的test1目录是有两个引用计数。

 再在test1目录下新建一个目录a,此时的test1目录的引用计数变成了3

原因就是a目录下的'' .. —— inode_id"这也是一条映射关系。

 于是,可以得到一个结论,一个目录有多少个子目录,就等于硬链接数减二。

        Linux中,不允许用户(包括root用户)给目录创建硬链接,原因就是给目录创建硬链接,会造成环路问题,但是允许操作系统给目录创建硬链接,比如 . .. 就是某个目录的硬链接。

        环路问题:

        系统层面上有.和…硬链接指向目录。假设我们是超级用户,允许给目录建立硬链接,给根目录建立硬链接,从根目录开始查找,当查找硬链接的时候就又是根目录,这时候则变成递归式查找,形成了环路查找,最后导致软件无法正常进行查找工作!所以不允许用户给目录建立硬链接。

  • 软链接 

软链接往往被用来作快捷方式。 


http://www.kler.cn/a/428405.html

相关文章:

  • 2025最新 Docker 国内可用镜像源仓库地址(01月02日更新)
  • 【LeetCode】--- MySQL刷题集合
  • Ansible fetch模块详解:轻松从远程主机抓取文件
  • Java 生成 PDF 文档 如此简单
  • C语言初阶牛客网刷题——HJ73 计算日期到天数转换【难度:简单】
  • 局域网中 Windows 与 Mac 互相远程连接的最佳方案
  • 认识自定义协议
  • 英语写作中“错误”mistake error的用法
  • 企业级包管理器之 npm 回顾 (2)
  • 微信小程序,引用字体图标的渲染问题
  • 【SKFramework框架核心模块】3-6、FSM有限状态机模块
  • 菜鸟每日刷牛客NP39
  • mysql怎么获取当前日期
  • 101种美食-图像分类数据集
  • 电源的串并联
  • 【MsSQL】数据库基础 库的基本操作
  • Unity热更新 之 Addressables(1) 资源基础加载
  • Vue CLI的作用
  • 关于HTTP DEBUGGER PRO的DURATION列一点理解
  • 在Linux(ubuntu22.04)搭建rust开发环境
  • Java-19 深入浅出 MyBatis - 用到的设计模式 源码剖析 代理设计模式
  • 【数据库】复习
  • import是如何“占领满屏“
  • QT模型/视图结构:ListModel与TableModel
  • 前端工程化面试题(一)
  • Apache AGE:基于PostgreSQL的图数据库