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

Linux基础IO(八)之硬链接

文章目录

      • 硬链接
        • 如何理解硬链接?
        • 硬链接应用场景

硬链接

ln a b	建立硬链接,后者指向前者b->a

硬链接不是一个独立的文件,因为他不是独立的inode

真正找到磁盘上文件的并不是文件名,而是inode

其实在linux中可以让多个文件名对应于同一个inode

如何理解硬链接?

test.txthard-linkinode是一样的,所以两者的文件属性和文件内容都是一样的。

所以,我们可以更加确定文件名不在inode里,因为两者文件名不一样

(如果在inode里,文件名应该一样)。

所谓的建立硬链接,本质就是

在特定目录的数据块中

新增 文件名 和 指向文件的inode编号 的映射关系!

也就是取别名。

inode在,文件就在,数据块就在。

任意一个文件,无论是目录,还是普通文件,都有inode

每个inode内部,都有一个叫引用计数的计数器。

目录里面保存的是 文件名:inode编号 的映射关系。

文件名1:inode1234

文件名2:inode1234

文件名3:inode1234

文件名4:inode1234

每个文件名都可以指向同一个inode(指针)

引用计数表明有多少个文件指向这个inode

image-20250402083302422

image-20250402083316079

删掉test.txt,硬连接数就变成了1

image-20250402085808787

我们在删除文件时干了两件事情:

1.在目录中将对应的映射关系的记录删除

2.将硬连接数--,如果为0,则将对应的文件删除。

硬链接应用场景

–> 为什么要用硬链接?

通常用来进行路径定位。

采用硬链接可以进行目录间的切换。

普通文件默认硬链接数是1(一个文件名对应一个inode

image-20250402104047564

但是目录文件默认的链接数是2,why?

.表示当前目录,.. 表示上级目录

dirinode是50452655,进入 dir 之后,.inode也是50452655

所以.dir的一个硬链接。

image-20250402104337995

..inodelesson22inode 一样,所以 .. 指向上级目录。

根据inode就可以找到该目录文件的路径。

image-20250402105113256

image-20250402105455965

dir的引用计数变成了3,是因为dir自己是1,在dir里面的. 是2,然后在dir1里面的..是3

根目录的引用计数是18,那么根目录里面就有16个有效目录。(软链接不算)

image-20250402105737924

image-20250402105950377


硬链接不允许给目录定义

可以给目录建立软链接,但是不允许建立硬链接

给目录建立软链接就是为了cd方便,所有的软连接都是为了方便操作。

image-20250402110723885

给目录建立硬链接会造成环路问题,出现系统级bug

image-20250402111634599

目录内部有./..就是当前目录和上级目录的硬链接。

用户不允许给目录建立硬链接,但是操作系统可以。

系统在进行搜索的时候不会对...这两个隐藏目录进行搜索。

./..只是在路径定位的时候使用,不在搜索的时候使用。

所以./..为了可以使用相对路径,就不用用长长的绝对路径了。

http://www.xdnf.cn/news/30061.html

相关文章:

  • 完整游戏排行榜系统实现
  • Redux Promise 中间件
  • C++ 数组 array ™实现动画效果全解析⚡YQW · Studio ⚡
  • Http基础
  • QML中的3D功能--自定义着色器开发
  • 硬件操作指南——ATK-MD0430 V20
  • 什么是超类实体和派生属性
  • JavaScript 变量语法扩展
  • C 语言联合与枚举:自定义类型的核心解析
  • Scade 语言词法介绍
  • 游戏引擎学习第235天:在 Windows 上初始化 OpenGL
  • 4N60-ASEMI开关电源与适配器专用4N60
  • 6.7 ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南
  • android测试依赖
  • Python番外——常用的包功能讲解和分类组合
  • GD32H7单片机使用segger_rtt,rtt-viewer看不到输出的问题,怎样解决?
  • 使用docker在manjaro linux系统上运行windows和ubuntu
  • 在统信UOS1060上新增备份到U盘
  • 【java实现+4种变体完整例子】排序算法中【基数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • Python----深度学习(全连接与链式求导法则)
  • Java中常见的锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock
  • MainActivity与RecActivity之间的双向数据传递详解
  • 从 0~1 保姆级 详细版 PostgreSQL 数据库安装教程
  • 数据库备份-docker配置主从数据库
  • k8s安装kubeadm
  • 探索大语言模型(LLM):Transformer 与 BERT从原理到实践
  • 回溯算法(2):全排列问题
  • 基于DeepSeek与Excel的动态图表构建:技术融合与实践应用
  • WebSocket介绍
  • 二级评论列表-Java实现