Linux:文件系统(软硬链接)
目录
inode
ext2文件系统
Block Group
超级块(Super Block)
GDT(Group Descriptor Table)
块位图(Block Bitmap)
inode位图(Inode Bitmap)
i节点表(inode Table)
数据区(Data Blocks)
软硬链接
硬链接
软链接
软硬链接的对比
软硬链接的用途
inode
文件 = 内容 + 属性
而这个属性是存储在inode结构中的
文件的数据都存储在“块”中,在Linux系统中还需要找一块地方来存储这个文件的信息(属性),这种存储文件信息的区域叫做inode,中文名为“索引节点”
inode是保存文件属性的集合,一个文件只有一个inode
ls -l命令可以看到文件的详细属性,这些属性就是从inode中获取的

inode内有一个唯一的标识符,叫做inode号,我们可以通过ls -i命令查看inode号
![]()
文件名属性并未被纳入inode中,而是存储在当前文件所在的文件夹的数据结构中
inode的大小一般是128字节或者256字节,文件内容大小可以不同,属性大小一定相同
ext2文件系统
我们想要在硬盘上存储文件,必须先把硬盘格式化为某种格式的文件系统,才能存储文件,文件系统的目的就是组织和管理硬盘上的文件
ext2文件系统将整个分区划分为若干个同样大小的块组(Block Group),只要能管理一个分区,就能管理所有的分区,也就能管理所有的磁盘文件

Block Group
ext2文件系统会根据分区的大小划分为若干个Block Group,而每个Block Group都有着相同的结构组成
超级块(Super Block)
存放着文件系统本身的结构信息,描述着整个分区文件系统的信息。主要有block和inode的总量,未使用block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息
Super Block若是被破坏,可以说整个文件系统结构就被破坏了
GDT(Group Descriptor Table)
块组描述符表,描述块组属性信息,每个块组描述符存储一个块组的描述信息。如在这个块组中从哪里开始是inode Table,从哪里开始是Data Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有一份拷贝
块位图(Block Bitmap)
Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
inode位图(Inode Bitmap)
每个bit表示一个inode是否空闲可用
i节点表(inode Table)
存放文件属性。如文件大小,所有者,最近修改时间等
是当前分组所有inode属性的集合
inode编号以分区为单位整体划分,不可跨分区
数据区(Data Blocks)
存放文件的内容,也就是一个个的Block
对于普通文件,文件的数据存储在数据块中
对于目录,该目录下所有的文件名和目录名存储在所在目录的数据块中
Block号按照分区划分,不可跨分区
软硬链接
硬链接
ln 被链接的文件 新文件
真正找到磁盘上文件的并不是文件名,而是inode
Linux中可以让多个文件名对应于同一个inode

test1和test2的链接状态完全相同,他们被称为指向文件的硬链接,从上图可以看出它们的inode是相同的,2表示的是inode526302的链接数为2,若是删除其一,则链接数-1

软链接
ln -s 被链接的文件 新文件
软链接是通过名字引用另外一个文件
但实际上,新引用的文件和被引用的文件inode不同

软硬链接的对比
软链接是独立的文件
硬链接只是文件名和目标文件inode的映射关系
软硬链接的用途
硬链接:
- 目录中的 . 和 .. 就是硬链接
- 文件备份
软链接:
- 快捷方式
完
相关文章:
Linux:文件系统(软硬链接)
目录 inode ext2文件系统 Block Group 超级块(Super Block) GDT(Group Descriptor Table) 块位图(Block Bitmap) inode位图(Inode Bitmap) i节点表(inode Tabl…...
在Spring Cloud中将Redis共用到Common模块
前言 在分布式系统中,共用组件的设计可以极大地提升代码复用性和维护性。Spring Cloud中将Redis共用到一个公共模块(common模块)是一个常见的设计实践,这样可以让多个微服务共享相同的Redis配置和操作逻辑。本文将详细介绍如何在…...
如何解决 Vue 应用中的内存泄漏
如何解决 Vue 应用中的内存泄漏 如何解决 Vue 应用中的内存泄漏常见的内存泄漏原因1. 组件生命周期管理不善2. 闭包引起的引用3. 数据订阅与发布系统4. 第三方库的内存泄漏5. 路由缓存和组件实例堆积排查内存泄漏的工具1. **Chrome DevTools**2. **Firefox Developer Tools**3.…...
什么是物理地址,什么是虚拟地址?
摘要 什么是物理地址,什么是虚拟地址? 如果处理器没有MMU或未启用,CPU执行单元发出的内存地址直接传到芯片引脚上,被内存芯片接受,这称为物理地址(Physical Addraress) 如果处理器启用了MMU&a…...
find 和 filter 都是 JavaScript 数组的常用方法
find 和 filter 都是 JavaScript 数组的常用方法,用来查找符合条件的元素,但它们有一些关键的区别: 1. find 方法 返回值:find 方法返回数组中 第一个符合条件的元素,如果没有找到符合条件的元素,返回 un…...
MVC、MVP和MVVM模式
MVC模式中,视图和模型之间直接交互,而MVP模式下,视图与模型通过Presenter进行通信,MVVM则采用双向绑定,减少手动同步视图和模型的工作。每种模式都有其优缺点,适合不同规模和类型的项目。 ### MVVM 与 MVP…...
基于RTOS的STM32游戏机
1.游戏机的主要功能 所有游戏都来着B站JL单片机博主开源 这款游戏机具备存档与继续游戏功能,允许玩家在任何时候退出当前游戏并保存进度,以便日后随时并继续之前的冒险。不仅如此,游戏机还支持多任务处理,玩家可以在退出当前游戏…...
【CPP】CPP经典面试题
文章目录 引言1. C 基础1.1 C 中的 const 关键字1.2 C 中的 static 关键字 2. 内存管理2.1 C 中的 new 和 delete2.2 内存泄漏 3. 面向对象编程3.1 继承和多态3.2 多重继承 4. 模板和泛型编程4.1 函数模板4.2 类模板 5. STL 和标准库5.1 容器5.2 迭代器 6. 高级特性6.1 移动语义…...
WPF基础03——InitializeComponent()函数解释
总述 InitializeComponent(),是MainWindow中的构造函数,实际写项目过程中,多多少少都会碰到该函数报错的情况,现在对InitializeComponent()做一些理解和说明。 在 WPF 中,XAML 文件和代码后台…...
如何在自己mac电脑上私有化部署deep seek
在 Mac 电脑上私有化部署 DeepSeek 的步骤如下: 1. 环境准备 安装 Homebrew(如果尚未安装): Homebrew 是 macOS 上的包管理工具,用于安装依赖。 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com…...
iOS 老项目适配 #Preview 预览功能
前言 iOS 开发者 最憋屈的就是UI 布局慢,一直以来没有实时预览功能,虽然swiftUI 早就支持了,但是目前主流还是使用UIKit在布局,iOS 17 苹果推出了 #Preview 可以支持UIKit 实时预览,但是仅仅是 iOS 17,老项目怎么办呢?于是就有了这篇 老项目适配 #Preview 预览 的文章,…...
7 与mint库对象互转宏(macros.rs)
macros.rs代码定义了一个Rust宏mint_vec,它用于在启用mint特性时,为特定的向量类型实现与mint库中对应类型的相互转换。mint库是一个提供基本数学类型(如点、向量、矩阵等)的Rust库,旨在与多个图形和数学库兼容。这个宏…...
pytorch实现变分自编码器
人工智能例子汇总:AI常见的算法和例子-CSDN博客 变分自编码器(Variational Autoencoder, VAE)是一种生成模型,属于深度学习中的无监督学习方法。它通过学习输入数据的潜在分布(Latent Distribution)&…...
Node.js与嵌入式开发:打破界限的创新结合
文章目录 一、Node.js的本质与核心优势1.1 什么是Node.js?1.2 嵌入式开发的范式转变二、Node.js与嵌入式结合的四大技术路径2.1 硬件交互层2.2 物联网协议栈2.3 边缘计算架构2.4 轻量化运行时方案三、实战案例:智能农业监测系统3.1 硬件配置3.2 软件架构3.3 核心代码片段四、…...
Noise Conditional Score Network
NCSN p σ ( x ~ ∣ x ) : N ( x ~ ; x , σ 2 I ) p_\sigma(\tilde{\mathrm{x}}|\mathrm{x}) : \mathcal{N}(\tilde{\mathrm{x}}; \mathrm{x}, \sigma^2\mathbf{I}) pσ(x~∣x):N(x~;x,σ2I) p σ ( x ~ ) : ∫ p d a t a ( x ) p σ ( x ~ ∣ x ) d x p_\sigma(\mathrm…...
低代码系统-产品架构案例介绍、蓝凌(十三)
蓝凌低代码系统,依旧是从下到上,从左至右的顺序。 技术平台h/iPaas 指低层使用了哪些技术,例如:微服务架构,MySql数据库。个人认为,如果是市场的主流,就没必要赘述了。 新一代门户 门户设计器&a…...
51单片机 02 独立按键
一、独立按键控制LED亮灭 轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 #include <STC89C5xRC.H> void main() { // P20xFE;while(1){…...
2021.3.1的android studio版本就很好用
使用最新版的studio有个问题就是gradle版本也比较高,这样就容易出现之前项目不兼容问题,配置gradle可能会出现很多问题比较烦,所以干脆就用老版本的studio...
CSV数据分析智能工具(基于OpenAI API和streamlit)
utils.py: from langchain_openai import ChatOpenAI from langchain_experimental.agents.agent_toolkits import create_csv_agent import jsonPROMPT_TEMPLATE """你是一位数据分析助手,你的回应内容取决于用户的请求内容。1. 对于文…...
移除元素-双指针(下标)
题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:…...
基于MCP协议构建个人AI工作流:模块化套件配置与隐私优先实践
1. 项目概述:一个为个人工作流注入AI智能的MCP套件 最近在折腾AI Agent和自动化工作流的朋友,应该都绕不开一个词: MCP 。全称是Model Context Protocol,你可以把它理解成AI模型(比如Claude、ChatGPT)和外…...
企业级应用如何通过 Taotoken 统一管理多个团队的模型调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用如何通过 Taotoken 统一管理多个团队的模型调用 在中大型企业的技术实践中,多个项目组或产品线同时接入和使…...
别再只怪USB线了!i.MX6Q用Mfgtools烧录rootfs.tar.bz2报错的深层硬件排查指南
i.MX6Q烧录故障的硬件级诊断:从USB OTG冲突到电源完整性排查 当Mfgtools在rootfs.tar.bz2传输阶段突然报错"Push error"或"No Device Connected"时,多数开发者会本能地检查USB线缆或驱动配置。但真正棘手的故障往往潜伏在硬件交互层…...
顶伯 + 微软 TTS,3 分钟生成专业级解说配音
🎯 顶伯 微软 TTS,3 分钟生成专业级解说配音告别繁琐录音,用顶伯文字转语音工具快速打造高品质配音。✨ 一、为什么选择顶伯与微软 TTS 的组合?在视频制作、课程讲解或产品演示中,配音质量直接影响观众体验。 顶伯文字…...
在Unity中实现四旋翼飞行器的串级PID姿态控制
1. 为什么需要串级PID控制 四旋翼飞行器的姿态控制一直是无人机开发中的核心难题。我刚开始用Unity做飞行器仿真时,发现简单的单级PID控制器在应对突发气流扰动时,飞行器总是会出现明显的振荡和超调。有一次测试中,飞行器甚至因为过度修正导致…...
量子计算优化Benders分解:减少量子比特与提升收敛效率
1. 量子辅助Benders分解框架概述混合整数线性规划(MILP)在供应链管理、金融优化和资源调度等领域有着广泛应用。传统Benders分解算法通过将原问题拆分为处理整数变量的主问题(MP)和处理连续变量的子问题(SP)进行迭代求解。然而,随着问题规模扩大,主问题的…...
Outfit字体技术实现:9种字重的几何无衬线字体架构设计与应用实践
Outfit字体技术实现:9种字重的几何无衬线字体架构设计与应用实践 【免费下载链接】Outfit-Fonts The most on-brand typeface 项目地址: https://gitcode.com/gh_mirrors/ou/Outfit-Fonts 在现代数字产品设计中,字体选择往往决定了界面的视觉层次…...
Gitee领跑本土化开发体验:深度解析国内代码托管平台的选择之道
在数字化转型浪潮中,代码托管平台已成为开发者团队不可或缺的基础设施。国内市场经过多年发展,已经从单一的海外平台依赖,逐步形成了多元化的平台选择生态。其中,Gitee凭借其本土化优势脱颖而出,成为众多国内开发团队的…...
从‘一核有难,多核围观’到雨露均沾:深入Linux内核看网卡中断与RSS/RPS
从“一核有难,多核围观”到雨露均沾:Linux内核网络中断负载均衡实战解析 当服务器网卡吞吐量突然暴跌时,很多工程师的第一反应是检查带宽和协议栈参数,却忽略了最底层的CPU中断分配机制。我曾处理过一台数据库服务器,在…...
【技术拆解】从EAIDK-610到SCARA机械臂:一个象棋机器人如何实现“眼、脑、手”协同对弈
1. 象棋机器人的“眼”:OpenCV视觉识别系统 象棋机器人的视觉系统就像人类的眼睛,它需要准确识别棋盘状态和棋子位置。我们选用OpenCV作为核心图像处理库,配合EAIDK-610开发板的摄像头模块,实现了毫米级精度的棋子定位。 在实际…...
