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共享 路径引用 文件系统映射
相关推荐
L1624762 小时前
Nginx+Keepalived 高可用集群实战笔记
运维·笔记·nginx
_李小白2 小时前
【OSG学习笔记】Day 3: OSG 实用工具
笔记·图形渲染
郭庆汝2 小时前
Ubuntu安装Node.js
linux·ubuntu·node.js
我去流水了2 小时前
【独家免费】【亲测】在linux下嵌入式linux的web http服务【Get、Post】,移植mongoose,post上传文件
linux·运维·前端
无籽西瓜a2 小时前
Linux 文件权限与 chmod 详解
linux·服务器·后端
攻城狮在此2 小时前
Rufus使用教程:Windows/Linux 系统启动盘制作
linux·服务器·windows
尽兴-2 小时前
Elasticsearch 8.14.3 安装部署实战:Windows/Linux + Kibana + 常用插件
linux·windows·elasticsearch·kinana·es 浏览器插件
DARLING Zero two♡2 小时前
CentOS 部署 Teemii:打造专属私人漫画阅读库
linux·运维·centos
WHD3062 小时前
苏州服务器维修哪家好/公司推荐
linux·ubuntu·centos·计算机外设·电脑·unix·安全架构