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 创建快捷方式的操作吗!!!

相关推荐
Sean‘5 分钟前
在隔离内网机器上使用 Filebeat 全量采集日志并推送到 ELK 的实战
运维·服务器·elk
Promise微笑11 分钟前
精准微阻测量:微欧计的分类、场景应用与高效选型决策指南
大数据·运维·网络·人工智能
MageGojo18 分钟前
R-Shell开源项目实战解析:用Rust打造命令行SSH工具,支持连接管理、远程执行、SFTP与MCP
运维·rust·开源项目·命令行工具·ssh客户端·mcp
云飞云共享云桌面21 分钟前
非标设计工厂8-10个SolidWorks研发共享一台高性能工作站
运维·服务器·自动化·电脑·制造
墨痕诉清风29 分钟前
Linux系统设置上海时间(24小时制)
linux·运维·服务器
utf8mb4安全女神32 分钟前
脚本模块化
linux·运维·服务器
daad77735 分钟前
纪录无人机PID参数配置
linux
数智化精益手记局38 分钟前
拆解项目管理平台核心功能:看项目管理平台如何解决跨部门协作难题与多项目并行场景
大数据·运维·数据库·人工智能·产品运营
noipp42 分钟前
推荐题目:洛谷 P1737 [NOI2016] 旷野大计算
linux·数据结构·算法
MAXrxc43 分钟前
BGP策略
运维·网络