Linux系列04:简单理解inode、硬链接、软链接、挂载的概念

目录

  • [Linux文件 = 文件名 + inode](#Linux文件 = 文件名 + inode)
  • [引用计数(link count)机制](#引用计数(link count)机制)
  • [硬链接(Hard Link) 一般只针对文件](#硬链接(Hard Link) 一般只针对文件)
  • [软链接/符号链接(Symbolic Link) 针对目录和文件](#软链接/符号链接(Symbolic Link) 针对目录和文件)
  • 挂载(Mount)
  • 总结

Linux文件 = 文件名 + inode

在Linux里 一个文件由两部分组成

①文件名 比如fileA.txt 它只是一个"名字标签"

②inode文件身份证 它记录了文件真实数据存放位置;文件大小;权限;创建时间;数据块指针

每个inode都会记录:有多少个文件名指向我 可以用命令ls -l查看
-rw-r--r-- 2 user user 文件大小 fileA.txt

-表示fileA.txt是文件;2表示链接数是2

第一个符号是- 则2就表明有2个硬链接指向这个文件(如果第一个符号是d 链接数2指的是子文件夹个数是2)

删一个硬链接就变1 再删一个才变0 → 真实数据块才删除

硬链接(Hard Link) 一般只针对文件

本质:多个文件名指向同一个 真实文件数据 一个文件有多个"名字" 但内容只有一份

特点:删除原文件不影响使用(删掉的"原文件" 只是删了"文件名" 不是删数据本体);不占额外磁盘空间

缺点:不能跨分区;只能链接文件 不能链接目录
假设有文件fileA.txt 创建硬链接ln fileA.txt fileB.txt 此时:

创建一个新文件名fileB.txt 让它指向和fileA同一个inode

fileA.txt ─┐

├──> inode #12345 ──> 真实数据 数据只有一份;inode只有一个;但是"名字"变多了

fileB.txt ─┘

fileA.txt和fileB.txt内容完全一样 修改任意一个 另一个也会变

删除一个(只是删了个名字) 另一个还能用 因为它们共用同一个inode
执行rm fileA.txt 实际发生的是:

删除文件名fileA.txt 实际只是少了一个名字 但还有别的名字在用这个数据

fileB.txt ───> inode #12345 ──> 真实数据 inode还在;数据还在;fileB.txt仍然指向inode

当最后一个硬链接被删除时 rm fileB.txt

没有任何文件名指向inode (inode引用计数 = 0) 系统才会真正释放数据块

软链接/符号链接(Symbolic Link) 针对目录和文件

本质:创建一个"指向原文件路径"的快捷方式 类似于 Windows 的快捷方式

特点:可以跨分区;可以对文件夹创建 ;类似快捷方式 灵活

缺点:原文件删除就失效;占用少量空间用于存放原文件的路径(软连接有自己的数据块 主要存放了链接其他文件的路径)
假设ln -s fileA.txt linkA.txt 此时:

linkA.txt 只是一个"指路牌" 里面记录着fileA.txt的路径

如果原文件被删除 快捷方式就失效了(因为找不到路了)

挂载(Mount)

链接是文件 ↔ 文件的关系

挂载是外部文件系统 ↔ Linux文件树的关系

在Linux里 一切存储设备都必须"挂载"到目录树上才能访问

挂载是把某个存储设备如U盘/虚拟磁盘的文件系统 接入到Linux文件树中的某一个目录作为挂载点

在Linux中对挂载点这个目录的访问 实际上是在访问它对应存储设备的文件系统中的数据

假设插入一个U盘 在Linux中它可能是:/dev/sdb1(Linux一切皆文件 U盘被解析成sdb1这个文件 )

然后执行mount /dev/sdb1 /mnt/usb

就把U盘的文件系统挂载映射到/mnt/usb这个目录(挂载点)了 以后访问cd /mnt/usb 实际上是在访问U盘里的内容

总结

软链接和硬链接都会与原文件保持数据同步
软链接依赖原文件路径;硬链接共享原文件的inode数据块

硬链接针对文件 ;软链接针对目录和文件

对比 硬链接(共享inode) 软连接 挂载
本质 同一个文件多个名字 文件的快捷方式 路径引用 接入一个文件系统
类似 文件"别名" Windows快捷方式 插U盘
是否占新空间 ❌ 不占(共享inode) ✅ 占少量 ❌ 无关
删除源文件 ✅ 不影响 ❌ 失效 ❌ 无关
跨分区 ❌ 不行 ✅ 可以 ✅ 可以
可链接文件夹 ❌ 不行 ✅ 可以 ❌ 无关
底层原理 inode共享 路径引用 文件系统映射
相关推荐
希和20278 分钟前
免费AI视频生成工具汇总(国内优先,适合做漫剧、短视频,Obsidian笔记版)
人工智能·笔记·音视频
且从容.22 分钟前
ubuntu安装flink
linux·ubuntu·flink
蒸蒸yyyyzwd1 小时前
秋招学习笔记 day109
笔记·八股
爱和冰阔落2 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨2 小时前
WSL2的安装与使用
linux·wsl
微小的鱼2 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng2 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮3 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
只愿云淡风清4 小时前
正则表达式学习笔记 02:基础语法
笔记·学习·正则表达式
希和202714 小时前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研