Linux 文件知识 补充

目录与文件

路径解析

目录亦是文件,存文件与 inode 号的映射关系所以,访问文件,需打开当前目录。

但是,我们要访问当前目录,去哪找?也就是说,当前工作目录的 inode 去哪找?想向上想,我们打开当前目录,要从上级目录找,那又如何找?

实际上,我们打开一个文件,要把路径中所有目录全部解析,从根目录开始,这个过程叫做 Linux 路径解析访问文件,本质是进程访问,进程的 CWD 提供路径。

最开始的路径从哪来?根目录,其下又有许多缺省目录,所以,你新建的任何文件,都是在系统指定目录下新建的,由系统和用户共同构建 Linux 路径结构。

路径缓存

每次访问文件,都从头开始,未免太慢!所以 Linux 会缓存历史路径结构有个维护树状路径结构的内核结构体叫:struct dentry 。

所以当你打开一个目录,第一次会比较慢,后面就会变快。

挂载分区

我们通过 inode 号在指定分区找文件,但是我们知道 inode 是不能跨分区的,那我们怎么知道我们在哪个分区呢?

路径解析过程中,内核会通过挂载点切换文件系统(分区),inode 只在当前文件系统内有效,无需跨分区识别

什么意思呢?我们假设一个一个分区是一栋栋由 "连廊"(挂载点)连接的的 "楼",inode 是楼里面的房间号。根目录永远属于系统的主分区(我们假设叫 A 楼),当内核根据用户需求行动,在该分区中找到了 home 目录,发现它是一个挂载点,也就是说:home 是 A 楼到 B 楼之间的连廊。所以内核在接下来的操作,就来到了另一个分区进行。

所以,inode 只在 "当前这栋楼" 里是唯一的,内核永远是先确定 "在哪栋楼",再用 inode 找房间,自然就不存在跨分区的问题了!

软硬链接

硬链接

在 Linux 中,其实可以让多个文件名对应同一个 inode ,这种操作叫做硬链接

我们使用 ln 命令可以将两个文件硬链接起来,当我们查看它们的 inode 号,就会发现完全一样:

从硬链接的规则其实不难想到一种情况:创建硬链接时,目标文件不能预先存在

所以硬链接其实是一种备份操作。

内核会记录一个文件的硬链接数:

所以删除一个文件时会干两件事:1.在目录中将对于的记录删除。2.将硬链接数 -1 ,之后如果为 0 ,则释放对应磁盘空间。

当我们创建一个空目录,会看到:

我们以前就知道,. 表示当前目录,. . 表示上级目录。现在再看它们的硬链接数,你能想到什么呢?. 在上级目录有一份,在自己里面有一份,所以硬链接数为 2,而**. .**相同,但是多了其下级目录里面的一份,所以硬链接数为 3。

软链接

硬链接是通过 inode 引用另一个文件,而软链接是通过名字引用另一个文件。

软链接产生的新文件和被引用文件的 inode 是不一样的,我们用一个例子来搞清楚软链接的作用:

code.exe 是 code.c 形成的可执行文件,运行之后打印:hello I'm code.c 。

通过 code 引用 code.exe ,当我们运行 code ,结果和运行 code.exe 完全一样!

可能到这还有点难以理解,但是,联想一下我们的 Windows 电脑,电脑的桌面上有很多软件的图标,当我们双击图标,就可以打开对应的文件。但是我们删除图标,真正的文件并不会被删除,因为那只是一种快捷方式。那么,软链接,不就是 Linux 创建快捷方式的操作吗!!!

相关推荐
落羽的落羽4 小时前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划
Mortalbreeze4 小时前
深度理解文件系统 ---- 从磁盘存储到内核存储
大数据·linux·数据库
сокол5 小时前
【网安-Web渗透测试-内网渗透】域环境权限维持
服务器·windows·网络安全·系统安全
十六年开源服务商5 小时前
2026服务器配置优化与WordPress运维实战指南
android·运维·服务器
LN花开富贵7 小时前
Ubuntu aarch64 架构安装 NoMachine 远程控制 避坑与实战
linux·运维·笔记·学习·ubuntu·嵌入式
取经蜗牛7 小时前
Windows 11 WSL + Ubuntu 24.04 安装指南
linux·windows·ubuntu
杨云龙UP7 小时前
Oracle RAC/ODA环境下如何准确查询PDB表空间已分配大小?一次说清Oracle表空间逻辑大小和ASM三副本实际占用_2026-05-19
linux·运维·数据库·sql·oracle·ffmpeg
东湖山上7 小时前
GTAC: A Generative Transformer for Approximate Circuits
服务器·人工智能·深度学习·transformer·gpu算力
2023自学中7 小时前
imx6ull开发板,Linux-c编程,识别 键盘、鼠标、触摸屏坐标
linux·嵌入式·开发板·应用编程