当前位置: 首页 > 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 储存大文件的特性也依赖于多级指针和数据块,那咱们下期就来讲讲数据块

http://www.lryc.cn/news/477296.html

相关文章:

  • go中Println和Printf的区别
  • C++现代教程七之模块
  • AVLTree
  • Java面向对象 C语言字符串常量
  • SpringBoot+Thymeleaf电商系统
  • 了解数据库并发产生的问题
  • openstack之guardian介绍与实例创建过程
  • 新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大
  • SAP ABAP开发学习——RFC
  • Elasticsearch里的索引index是什么概念?(ChatGPT回答)
  • 安全性测试
  • ComfyUI和Photoshop相结合,PS内实现:文生图,图生图,高清放大,局部重绘,面部修复,设计师福音
  • 使用 map 和 reduce 提取对象数组中的 id 并组成新数组
  • Zero-Shot Relational Learning for Multimodal Knowledge Graphs
  • AUTOSAR COM 模块的主要功能导读以及示例
  • VMware下Centos7虚拟机数据盘/data目录(非lvm)不停机热扩容实操
  • 易盾增强版滑块识别/易盾识别/滑块识别/增强版滑块识别/易盾滑块本地识别
  • DMRl-Former用于工业过程预测建模和关键样本分析的数据模式相关可解释Transformer网络
  • 向量模型Jina Embedding: 从v1到v3论文笔记
  • Spring学习笔记(一)
  • Java编程基础
  • C++【string类,模拟实现string类】
  • Jupyter lab 打开时默认使用 Notebook 而不是浏览器
  • 【linux】ubunda repo是什么
  • 【MySQL】深层理解索引及特性(重点)--下(12)
  • 无人机声学侦测算法详解!
  • git 提交仓库
  • 基于大语言模型(LLM)自主Agent 智能体综述
  • 使用命令行管理 Windows 环境变量
  • AUTODL配置百度网盘数据传输