【Linux基础IO】从零到一:文件管理系统深度探索

前言:在linux操作系统的广阔世界中,文件管理无疑是基石之一,它支撑着整个系统的稳定运行与高效运作。无论是日常办公、软件开发、服务器管理还是大数据处理,都离不开对文件系统的深入理解和熟练操作。因此,掌握linux基础io中的文件管理技能,对于每一个linux用户、系统管理员以及开发者而言,都是至关重要的

本文旨在为读者提供一个全面而深入的Linux基础IO中文件管理的学习指南。通过本文的学习,读者将能够掌握Linux文件系统的基本原理

让我们一同踏上这段学习之旅,探索Linux文件管理的奥秘吧!

?1. 文件管理系统管理被打开的文件在磁盘中管理没有被打开的文件

管理没有被打开的文件的核心操作是:快速定位文件

文件 = 属性 + 内容

文件存放在磁盘中,方便OS/用户对文件进行管理

?2. 磁盘

【Linux基础IO】从零到一:文件管理系统深度探索

盘面俯视图:

【Linux基础IO】从零到一:文件管理系统深度探索

扇区是磁盘中的最小存储单元 — 512字节(部分4KB)

基本构成

磁盘:硬盘中真正用来存储信息的部分,外观如圆盘,中间有孔供马达运转轴通过。硬盘的磁盘数量一般至少有一个,常见的尺寸有3.5英寸、2.5英寸等,不同尺寸的磁盘适用于不同的设备磁头:负责读写数据的部件,能够感应磁盘上的磁性变化,从而读取或写入数据。磁头的质量对硬盘性能有重要影响

【Linux基础IO】从零到一:文件管理系统深度探索

磁盘存储的逻辑抽象结构

【Linux基础IO】从零到一:文件管理系统深度探索
【Linux基础IO】从零到一:文件管理系统深度探索

注意:操作系统也可以按照扇区为单位进行存取,也可以基于文件系统按照块为单位进行数据 存取

【Linux基础IO】从零到一:文件管理系统深度探索

?3. 文件管理

【Linux基础IO】从零到一:文件管理系统深度探索

关于文件:

在Linux中文件的内容和属性是分开存储的在块组中文件信息分为文件基本信息和对应文件的管理信息inode在整个分区中具有唯一性,在Linux内核中,识别文件,和文件名无关,之和inode有关

?inode

那么到底什么是inode,我们通过Linux操作系统来看一下,我们先创建几个文件和目录,然后输入指令 ls -li

【Linux基础IO】从零到一:文件管理系统深度探索

文件属性多了一串数字,而这些属性就是inode,保存文件属性也是通过inode保存的

inode的基本概念

定义:inode是文件系统中的一种数据结构,用于存储文件的元信息,如文件名、文件大小、文件权限、文件所有者等。这些元信息对于文件系统的管理和操作至关重要功能:inode的主要功能是作为文件的索引,通过它可以快速定位到文件的数据块,从而实现文件的快速访问和管理

【Linux基础IO】从零到一:文件管理系统深度探索

i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子GDT,Group Descriptor Table:块组描述符,描述块组属性信息 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用

比特位的位置表示block编号,来判断对用位置block是否被使用

inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用

【Linux基础IO】从零到一:文件管理系统深度探索

数据区:存放文件内容

【Linux基础IO】从零到一:文件管理系统深度探索

超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息,Super Block的信息被破坏,可以说整个文件系统结构就被破坏了

【Linux基础IO】从零到一:文件管理系统深度探索

创建一个新文件主要有一下4个操作:存储属性 内核先找到一个空闲的i节点(这里是263466)。内核把文件信息记录到其 存储数据 该文件需要存储在三个磁盘块,内核找到了三个空闲块:300,500,800。将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推记录分配情况 文件内容按顺序300,500,800存放。内核在inode上的磁盘分布区记录了上述块列表添加文件名到目录

新的文件名abc。linux如何在当前的目录中记录这个文件?内核将入口(263466,abc)添加到目录文件。文件名和inode之间的对应关系将文件名和文件的内容及属性连接起来

⭐如何理解目录 目录内部直接保存文件的文件名和映射关系修改文件的本质就是修改文件的映射关系在Linux中,文件名不属于文件属性

挂载:mount

磁盘空间管理:df

代码语言:javascript代码运行次数:0运行复制

df -h
【Linux基础IO】从零到一:文件管理系统深度探索

?4. 软链接与硬链接

软链接

【Linux基础IO】从零到一:文件管理系统深度探索

硬链接

inode内部有引用计数,表示有几个文件名映射关系

【Linux基础IO】从零到一:文件管理系统深度探索
【Linux基础IO】从零到一:文件管理系统深度探索

硬链接与软链接的区别

乾坤圈新媒体矩阵管家 乾坤圈新媒体矩阵管家

新媒体账号、门店矩阵智能管理系统

乾坤圈新媒体矩阵管家 17 查看详情 乾坤圈新媒体矩阵管家

硬链接

软链接

存在形式

文件副本的形式存在,但不占用实际空间

以路径的形式存在

跨文件系统

不可以

可以

对目录的链接

不允许

可以

inode编号

与原文件共享相同的inode编号

有自己的inode编号,但数据块包含目标文件的路径名

删除操作

删除其中一个文件名,不会影响另一个文件名的访问

删除原文件或目录后,软链接变为悬空链接,无法访问目标

同步性

对硬链接或原文件的任何修改都会同时反映在另一个文件上

修改软链接、硬链接和源文件,访问三者都是同步变化的(但软链接指向的内容可能因原文件删除而失效)

acm

Access 最后访问时间Modify 文件内容最后修改时间Change 属性最后修改时间

?5. 总结

在探索Linux基础IO(输入输出)中的文件管理的旅程即将告一段落之际,我们不禁要感慨这一领域所蕴含的深厚底蕴与无限可能。文件管理,作为Linux操作系统的核心功能之一,不仅仅是简单地创建、删除、移动文件那么直接,它更是系统资源管理、数据安全、乃至高效编程的基石

希望每一位学习者保持好奇心和求知欲,继续深入探索Linux的广阔天地! 希望本文能够为你提供有益的参考和启示,让我们一起在编程的道路上不断前行! 谢谢大家支持本篇到这里就结束了,祝大家天天开心!

以上就是【Linux基础IO】从零到一:文件管理系统深度探索的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/480242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
看看最新发布的Laravel8.78有哪些新功能!
上一篇 2025年11月8日 11:07:56
如何在 Java 函数中记录与数据库相关的错误信息
下一篇 2025年11月8日 11:07:59

相关推荐

  • composer require-dev和require有什么不同_Composer Require与Require-Dev区别解析

    require用于声明项目运行必需的依赖,如框架、数据库组件和第三方SDK,这些包会随项目部署到生产环境;2. require-dev用于声明仅在开发和测试阶段需要的工具,如PHPUnit、PHPStan、Faker等,不会默认部署到生产环境;3. 安装时composer install根据环境决定…

    2026年5月10日
    1000
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    000
  • php常量怎么用_PHP常量(define/const)定义与使用方法

    PHP中可通过define函数和const关键字定义常量,用于存储不可变值。define适用于全局作用域,支持动态名称和条件定义,如define(‘SITE_NAME’, ‘MyWebsite’);const在编译时生效,语法简洁但限制多,只能在类或全…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • c++如何实现UDP通信_c++基于UDP的网络通信示例

    UDP通信基于套接字实现,适用于实时性要求高的场景。1. 流程包括创建套接字、绑定地址(接收方)、发送(sendto)与接收(recvfrom)数据、关闭套接字;2. 服务端监听指定端口,接收客户端消息并回传;3. 客户端发送消息至服务端并接收响应;4. 跨平台需处理Winsock初始化与库链接,编…

    2026年5月10日
    100
  • 谷歌浏览器如何截图 谷歌浏览器页面截图技巧

    谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧

    使用谷歌浏览器的开发者工具截图步骤:1. 按ctrl+shift+i(windows/linux)或cmd+option+i(mac)打开开发者工具。2. 点击右上角三个点,选择”更多工具”,再选择”截图”。3. 选择截取整个页面。推荐的谷歌浏览器扩展…

    2026年5月10日 用户投稿
    100
  • Golang使用Protobuf定义接口与消息格式

    Protobuf通过字段编号实现兼容性,新增字段可忽略、删除字段可保留编号,确保新旧版本互操作,支持服务独立演进。 在Golang项目中,利用Protobuf定义接口和消息格式,本质上是为服务间通信构建了一套高效、类型安全且跨语言的契约。它让数据结构清晰可见,RPC调用标准化,极大地简化了分布式系统…

    2026年5月10日
    000
  • Go语言接口与切片:如何识别和操作[]interface{}

    本文将深入探讨Go语言中如何识别和操作`[]interface{}`类型的切片。我们将介绍类型断言(Type Assertion)的关键作用,并通过`switch`语句演示如何安全地检测`[]interface{}`类型,并进而遍历其内部元素。文章旨在提供清晰的示例代码和专业指导,帮助开发者有效地处…

    2026年5月10日
    000
  • PHP多维数组到复杂XML结构的SOAP序列化实践

    本文旨在解决php多维数组向复杂soap xml结构序列化时遇到的“无法序列化结果”问题。通过深入理解soap xml的结构要求,包括命名空间和类型属性,文章将指导您如何构建符合特定xml schema的php关联数组。我们将利用`spatie/array-to-xml`库,详细演示其安装与使用方法…

    2026年5月10日
    000
  • pycharm解析器怎么添加 解析器添加详细流程

    在pycharm中添加解析器的步骤包括:1) 打开pycharm并进入设置,2) 选择project interpreter,3) 点击齿轮图标并选择add,4) 选择解析器类型并配置路径,5) 点击ok完成添加。添加解析器后,选择合适的类型和版本,配置环境变量,并利用解析器的功能提高开发效率。 在…

    2026年5月10日
    000
  • 硬盘数据被误删除怎么办?教你快速找回删除的文件!

    硬盘数据被误删除,别慌!恢复数据并非不可能,关键在于你接下来的操作。立刻停止对该硬盘的任何写入操作,然后尝试使用专业的数据恢复软件。 解决方案 首先,数据恢复的原理是,删除文件后,操作系统只是将文件占用的空间标记为“可覆盖”,但文件本身的数据可能还存在于硬盘上。所以,避免新的数据写入覆盖掉旧数据,是…

    2026年5月10日
    000
  • CodeIgniter在IIS环境下实现URL重写与index.php移除指南

    本教程详细指导如何在IIS服务器上部署的CodeIgniter应用中,移除URL中不必要的index.php。核心解决方案涉及修改CodeIgniter的config.php文件,将$config[‘index_page’]设置为空,并辅以正确的IIS web.config重…

    2026年5月10日
    100
  • c++中头文件和源文件的区别_c++头文件与源文件作用对比

    头文件声明接口,源文件实现逻辑。头文件含类、函数声明及宏定义,通过#include被多文件共享,用include守卫防重;源文件实现具体功能,编译为目标文件后由链接器合并。声明与实现分离提升模块化与编译效率,模板和内联函数因需编译时可见故常置于头文件,命名空间避免符号冲突,整体结构使项目更清晰易维护…

    2026年5月10日
    000
  • Python官网用户调查的参与方式_Python官网反馈提交详细教程

    答案是通过访问Python官网新闻页面、邮件邀请链接或GitHub仓库提交反馈。具体为:访问官网查找用户调查公告,或点击邮件中的专属链接参与,在GitHub的cpython仓库提交技术建议,并注意如实填写问卷与保护隐私。 如果您希望参与Python官网的用户调查并提交反馈,可以通过官方指定的渠道完成…

    2026年5月10日
    000
  • JavaScript Electron桌面应用

    答案:使用JavaScript开发%ignore_a_1%桌面应用需结合Web技术与Node.js,通过主进程管理窗口、渲染进程展示界面,并利用IPC通信,调用系统功能如文件对话框,最后用electron-builder打包发布,注意安全与进程职责分离。 用JavaScript开发Electron桌…

    2026年5月10日
    000
  • Go语言连接外部MySQL数据库:DSN配置与常见错误解析

    本文详细阐述了go语言使用`go-sql-driver/mysql`驱动连接外部mysql数据库的正确方法。重点介绍了数据源名称(dsn)的规范格式,特别是主机地址部分的配置,以避免常见的“getaddrinfow: the specified class was not found.”等网络解析错…

    2026年5月10日
    000
  • Go语言中复制数组的几种方法详解

    本文介绍了在 Go 语言中复制数组和切片的几种方法,重点讲解了内置的 `copy` 函数的使用方式,以及在多维切片场景下深拷贝与浅拷贝的区别,并提供了相应的代码示例。通过本文,你将掌握在不同场景下选择合适的复制方法,避免潜在的陷阱。 在 Go 语言中,复制数组和切片是一个常见的操作。根据不同的需求,…

    2026年5月10日
    000
  • PHP代码注入检测日志分析_PHP代码注入日志检测方法详解

    答案:日志分析是发现PHP代码注入的关键手段,主要通过Web服务器访问日志、PHP错误日志、PHP-FPM日志及应用自定义日志等多源数据,结合grep、ELK、WAF等工具识别含eval()、system()、Base64编码、目录遍历等特征的异常请求,并建立基线、设置检测规则与自动化告警,配合事件…

    2026年5月10日
    000
  • Linux文件系统iostat命令使用技巧

    Linux文件系统iostat命令使用技巧Linux文件系统iostat命令使用技巧Linux文件系统iostat命令使用技巧Linux文件系统iostat命令使用技巧

    iostat是Linux系统中用于监控I/O设备负载的关键工具,能分析磁盘性能并识别瓶颈。默认输出包括CPU使用率和设备I/O统计,分为系统启动以来的平均值和当前采样周期数据。核心指标有:%util反映设备利用率,持续接近100%可能表示I/O瓶颈;await为平均I/O等待时间,过高说明响应变慢;…

    2026年5月10日 用户投稿
    000

发表回复

登录后才能评论
关注微信