当前位置: 首页 > news >正文

轻松理解操作系统 - 轻松了解 inode 是如何管理文件的

Linux 由于其开源、比较稳定等特点统治了服务端领域。也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。

因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经常出现的。它的开源特性也让它适合于让对于计算机和操作系统底层原理感兴趣的人进行学习。

python入门

C++入门

开始今天的正文

一、文件系统是什么?如何让我们在其中标记一个唯一的文件?

其实文件系统这个概念没有那么神秘:其实它就是文件在储存介质(储存设备)上的组织形式。

随之而来的问题是:我们如何在它上面查找一个文件?我们如何知道某个文件就是我们要找的它自己而不是其他文件呢?

Linux 系统解决这个问题的方案采用的是 inode。

二、Linux 中的“唯一标识” - inode(索引节点)

inode 的本质是什么?

是一个数据结构,用于跟踪 Linux 或基于 UNIX 的文件系统中的所有文件和目录。每个文件和目录在文件系统中都有一个唯一的inode与之关联。

你可以使用ls -i命令来查看文件或目录的inode信息。以下是一个示例:

ls -i filename

输出信息就像是下文一样:

1234567 -rw-r--r-- 1 user user 1024 Sep 4 14:00 example.txt

其中,1234567是example.txt的inode编号

大多数的 inode 大小为 128 字节

在大多数文件系统中,inode的默认大小通常为 128 字节。

不过,这一大小并非一成不变,它可以在不同的文件系统中有所变化。例如, ext4 文件系统支持将 inode 大小设置为 128 字节或 256 字节

三、inode 实现唯一标识的奥秘在于什么?

首先我们要来了解一下 Linux 文件系统的其他三个重要结构:

超级块(Super Block):存储整个文件系统的元数据,如文件系统大小、inode和block的总量及使用量等。

inode表(Inode Table):存储所有文件和目录的inode信息。

数据块(Data Blocks):存储文件或目录的实际数据。

其中,超级块 和 inode表 起到了至关重要的作用。超级块包含了文件系统的全局信息,inode表 包含了全部 inode 的信息。

inode 表保证了 inode号 的唯一性。

图片

四、inode 有什么好处和缺点呢?

inode 的好处和用处主要有三点:除了性能优化之外,其实它还可以通过多级指针指向数据块来储存很大的文件

1、提供文件系统的性能优化:由于inode中记录了文件的元数据信息,系统可以通过读取inode来获取文件的属性,而无需读取整个文件,从而提高了文件系统的性能。

2、实现硬链接:inode中的链接数属性可以用来记录有多少个文件名指向同一个inode,从而实现了硬链接的功能。

3、管理文件的数据块:inode中还包含了指向存储文件实际数据的数据块的指针,通过这些指针,操作系统可以快速定位文件的数据块并进行读取或写入操作。

inode 其实有个缺点就是不太合适储存非常大量的小文件,因为每个文件都要占用一个 inode:

inode耗尽问题:当文件系统中的inode数量耗尽时,即使磁盘上还有可用的存储空间,也无法再创建新的文件或目录。

五、总结:inode 就像文件的身份证,包含了唯一的精确信息并适合于储存大文件

  1. 唯一性:每个文件系统中的每个文件或目录都有一个唯一的inode号码,通过这个号码可以定位到文件或目录的元数据。

  2. 元数据存储:每个inode包含了文件或目录的元数据,如文件大小、所有者、权限、时间戳等信息,但不包括文件名。这些元数据对于文件系统的管理和访问至关重要。

  3. 高效的文件访问:文件系统通过inode来管理文件,这样即使文件名被修改或文件被移动,文件系统仍然可以通过inode来准确定位文件,从而提高了文件的访问效率。

六、inode 储存大文件的特性也依赖于多级指针和数据块,那咱们下期就来讲讲数据块

相关文章:

轻松理解操作系统 - 轻松了解 inode 是如何管理文件的

Linux 由于其开源、比较稳定等特点统治了服务端领域。也因此,学习Linux 系统相关知识在后端开发等岗位中变得越来越重要,甚至可以说是必不可少的。 因为它的广泛应用,所以在程序员的日常工作和面试中,它都是经常出现的。它的开源特…...

go中Println和Printf的区别

Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 go中Println和Printf的区别 package mainimport ( "fmt" )//TIP To run your code, right-click the c…...

C++现代教程七之模块

优点 编译时间减少:模块消除了重复解析和编译头文件的需要,从而显著减少了编译时间。特别是在大型项目中,这一点尤为重要。更好的封装性:模块允许更严格的封装,可以明确地控制哪些符号对外可见。这有助于减少命名冲突和…...

AVLTree

1.AVL树的概念 二叉搜索树虽然可以提高查找的效率,但是如果数据有序或者接近有序,二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。为了解决该问题,于是就有了AVLTree。即当向二叉搜索树中插入…...

Java面向对象 C语言字符串常量

1. (1). package liujiawei;public class Phone {String brand;double price;public void call(){System.out.println("手机打电话");}public void play(){System.out.println("手机打游戏");} } public class phonetest {public…...

SpringBoot+Thymeleaf电商系统

> 这是一个基于SpringBootThymeleafBootstrap实现的简单电商系统。 > 实现了用户浏览、添加购物车、商品管理等功能,并支持响应式布局。 > 本项目适合JAVA初学者作为入门学习项目 一、部分界面演示 二、技术栈 技术栈中文描述Spring Boot快速开发框架…...

了解数据库并发产生的问题

在数据库管理系统中,并发控制是一个至关重要的方面。随着多个用户或进程同时访问和修改数据库中的数据,如果没有适当的并发控制机制,就可能导致数据不一致、丢失更新、脏读、不可重复读和幻读等问题。在单用户系统中,数据库操作是…...

openstack之guardian介绍与实例创建过程

运行特征 采集模块:扩展Ceilometer,采集存储网、业务网连通性、nova目录是否可读写; 收集模块:将采集到的数据存储到数据库中; 分析模块:根据采集的结果,分析各节点状态,并进行反向检…...

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大

新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大 时间:2023年 机构:北京邮电大学 发表在:IEEE TRANSACTIONS ON MULTIMEDIA, VOL. 25, 2023 代码源码地址: pytorch版本:https://github.com/dyh…...

SAP ABAP开发学习——RFC

目录 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接口系统 RFC的通信模式 RFC版本 RFC调用方式 Web Service接口 SAP创建Web Service示例 远程目标的维护 创建远程目标 外部系统访问设置 RFC的调用 RFC接口 定义 调用过程 RFC的通信 RFC通信情况 RFC接…...

Elasticsearch里的索引index是什么概念?(ChatGPT回答)

在 Elasticsearch(ES)中,索引(Index) 是一种数据结构,用来存储、组织和管理文档数据。它可以理解为数据库中的一张表,但有一些关键的不同之处。索引是 Elasticsearch 全文搜索引擎的核心概念之一…...

安全性测试

安全性测试评估系统在面对各种安全威胁时的防护能力和安全性的过程。以下是安全性测试的一些主要方面和方法: 1. 身份验证和授权测试 测试目标 确保系统能够正确验证用户的身份,并根据用户的权限授予相应的访问权限。测试方法 弱密码测试:尝…...

ComfyUI和Photoshop相结合,PS内实现:文生图,图生图,高清放大,局部重绘,面部修复,设计师福音

本文主要介绍:ComfyUI和Photoshop相结合,一个平台实现:图像生成,放大,局部重绘,面部修复,实时绘画 简直是设计师的福音。 主要包括: Photoshop 的安装以及插件的安装 Creative Cl…...

使用 map 和 reduce 提取对象数组中的 id 并组成新数组

在开发过程中,经常需要对 API 返回的数据进行处理,例如从对象数组中提取某些字段,并将它们组成新的数组。这里我们将介绍如何通过 JavaScript 的 map 和 reduce 方法来完成这一需求,并深入比较这两者的用法与适用场景。 需求&…...

Zero-Shot Relational Learning for Multimodal Knowledge Graphs

摘要 关系学习是知识表示领域,特别是知识图补全(KGC)领域的一项重要任务。虽然传统单模态环境下的关系学习已经得到了广泛的研究,但在多模态KGC环境下探索关系学习提出了不同的挑战和机遇。其中一个主要挑战是在没有任何相关训练…...

AUTOSAR COM 模块的主要功能导读以及示例

AUTOSAR COM 模块的主要功能 AUTOSAR COM 模块在车载系统中用于管理通信的中间层,主要功能包括: 信号传输与接收: • 提供信号打包和解包功能,将信号数据打包成协议数据单元(I-PDU)以便传输,或从接收到的…...

VMware下Centos7虚拟机数据盘/data目录(非lvm)不停机热扩容实操

实操环境 VMware:7.0 虚拟机:Centos7 (TEST-K8S-Node01) 扩容目录:/data (20G>>30G) 前置操作 注意事项:如果有条件的话,建议先做个主机的全量备份(…...

易盾增强版滑块识别/易盾识别/滑块识别/增强版滑块识别/易盾滑块本地识别

易盾增强版滑块识别 计算思路如下: 滑动条拖动距离传入 restrict 算法处理得到 初次值 J J * 率值0.309375 得到滑块偏移量。 滑块的旋转角度滑块偏移量*attrs 所以滑块偏移量滑块的旋转角度/attrs 通过滑块偏移量 求出 滑动条拖动距离 # 应用高斯模糊warped_…...

DMRl-Former用于工业过程预测建模和关键样本分析的数据模式相关可解释Transformer网络

DMRl-Former用于工业过程预测建模和关键样本分析的数据模式相关可解释Transformer网络 Liu, Diju, et al. “Data mode related interpretable transformer network for predictive modeling and key sample analysis in industrial processes.” IEEE Transactions on Indust…...

向量模型Jina Embedding: 从v1到v3论文笔记

文章目录 Jina Embedding: 从v1到v3Jina Embedding v1数据集准备训练过程 Jina Embedding v2预训练修改版BERT在文本对上微调在Hard Negatives上微调 Jina Embedding v2 双语言预训练修改版BERT在文本对上微调用多任务目标微调 Jina Embedding v3预训练在文本对上微调训练任务相…...

2026年AI写作辅助网站盘点:12款神器助你高效完成初稿生成、排版和降AI率

随着 AI 技术的持续突破,2026 年的论文写作辅助工具市场已进入“智能化、定制化、合规化”的新阶段。从本科生的课程论文到研究生的学位论文,再到科研人员的期刊投稿,AI 工具正在为不同层次的学术需求提供高效、精准的解决方案。本文基于权威…...

StreamFX终极指南:如何用免费插件让OBS直播画面秒变专业

StreamFX终极指南:如何用免费插件让OBS直播画面秒变专业 【免费下载链接】obs-StreamFX StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even cus…...

MeritOpt:动态权重聚合算法在低资源NLP任务中的应用与实现

1. 项目概述与核心挑战在自然语言处理领域,低资源语言任务一直是个棘手的问题。想象一下,你手头只有几千条某个小语种的翻译对,却要训练一个能流畅翻译的模型,这就像试图用几块砖头盖起一栋大楼。传统的做法要么是“闭门造车”&am…...

腾讯吐司:用一句话创造你的专属App,零门槛的应用魔法师

腾讯吐司:用一句话创造你的专属App,零门槛的应用魔法师 “我想要一个能记录每天喝了几杯水的App,最好还能提醒我” 3分钟后,一个真正的、能安装到手机上的App诞生了。 这不是科幻电影,而是腾讯最新推出的「吐司」App正…...

怎样轻松突破微信网页版限制:wechat-need-web开源插件实用指南

怎样轻松突破微信网页版限制:wechat-need-web开源插件实用指南 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 微信作为日常沟通的重要工具…...

高性能桌面管理架构解析:NoFences技术实现深度剖析

高性能桌面管理架构解析:NoFences技术实现深度剖析 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences NoFences作为一款开源免费的桌面管理工具,通过创新…...

手把手教你用Python监控自己的ETH钱包地址是否‘被碰撞’(含简易脚本)

用Python构建ETH钱包安全监控系统:从API调用到风险预警实战最近在整理自己的数字资产时,突然意识到一个问题:我们平时使用的ETH钱包地址,是否可能因为公开交易记录而暴露在风险中?这个问题让我开始研究如何通过技术手段…...

如何高效使用NHSE:动物森友会存档编辑器的完整专业指南

如何高效使用NHSE:动物森友会存档编辑器的完整专业指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否厌倦了在《集合啦!动物森友会》中花费数百小时收集稀有物品&a…...

终极免费色彩校准方案:用novideo_srgb解决NVIDIA显卡广色域显示器色彩过饱和问题

终极免费色彩校准方案:用novideo_srgb解决NVIDIA显卡广色域显示器色彩过饱和问题 【免费下载链接】novideo_srgb Calibrate monitors to sRGB or other color spaces on NVIDIA GPUs, based on EDID data or ICC profiles 项目地址: https://gitcode.com/gh_mirro…...

SketchUp STL插件终极指南:3步实现3D打印模型无缝转换

SketchUp STL插件终极指南:3步实现3D打印模型无缝转换 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 你是否曾经…...