【hello Linux】理解文件系统

news/2025/3/14 16:57:39/

目录

创建文件的过程:

删除文件的过程:

创建目录的过程:

查看inode编号:

硬链接

软链接



Linux🌷 

我们知道文件所有数据 = 文件内容 + 文件属性信息;

未打开的文件是被存放到磁盘/固态硬盘中的;

 在这里是以磁盘为例进行说明:

磁盘是以扇区为单位进行读写的;

确定磁盘具体写入位置要知道:盘面(磁头)、磁道、扇区;

我们试着可以将磁盘想象成线性的结构:

要确定磁盘位置:盘面、磁道、扇区;

线性结构:类似数组下标;

因此我们在这要进行地址转化,类似于虚拟地址和物理地址的转换;

磁盘太大,为了方便管理;

1. 分区:将磁盘划分为几个小的区域;

2. 格式化:如果进行格式化,相当于给分区中写入了文件系统(原来的数据不存在);

为了更加方便管理,我们将分区更细小化;

 

创建文件的过程:

一个文件与一个inode编号相对应,首先在inode位图中找到第一个为0的,将其修改为1,在block位图中找到第一个为0的,将其修改为1,在inode块中写入文件所有信息,并且记录对应block块的位置,此后便可以进行数据写入操作。

删除文件的过程:

删除文件很简单,将文件对应inode的位图位置修改为0即可。

我们可以使用debugfs进行文件的恢复功能。

如果想要恢复最好不要在进行操作,避免将该文件inode位图分配给其他文件。

创建目录的过程:

目录也是文件,创建目录也如上述创建文件过程一般,不过目录的数据块中存放的是:

文件名与inode编号的映射关系!

查看inode编号:

ls命令中加上-i选项则可以查看文件inode编号;上述红色框框起来的便是文件inode编号;

Linux中:

文件名在系统层面是没有意义的 ,是给用户使用的。

Linux中真正标识一个文件,是通过文件的inode编号识别的!

一个文件一个inode!

硬链接:

OS找磁盘上的文件并不是通过文件名,而是inode编号

其实在linux中可以让多个文件名对应于同一个inode。

这便是使用硬链接的方法。

ln 源文件名 目标文件名

hard  和 myfile.c  的链接状态完全相同,他们被称为指向文件的硬链接。
内核记录了这个连接数, inode 655831 的硬连接数为 2
硬链接的本质:
在文件所在的目录中添加:新文件名和inode编号的映射关系;
我们在删除文件时干了两件事情:
1. 在目录中将对应的记录删除(文件名和inode编号的映射关系);
2. 将硬连接数 -1 ,如果为 0 ,则将对应的磁盘释放。

软链接:

ln -s 要链接的文件名 链接之后的文件名

软链接的使用场景:

如果在当前目录下访问一个文件特别麻烦,我们便可以建立软链接;

相当于Windows中的快捷方式。

经过查看,我们发现软链接是有自己独立的inode的!因此软链接是一个文件,数据块里面存储

(指向文件的所在路径 + 文件名)。 

补充:

我们新创建了一个文件,发现该文件的硬链接数为1;

新创建了一个目录,发现该目录的硬链接数为2 ;

这是因为该目录中的 . 文件也表示该目录;

它们的 inode 编号是一样的。

在mydir的当前目录下创建了tmp目录,mydir的链接数变为了 3;

光数该文件的别名便可知道;

1. mydir

2. mydir目录下的 . 

3. mydir目录下的tmp目录下的 ..

总共三个!!!

坚持打卡!😃


http://www.ppmy.cn/news/46902.html

相关文章

Allegro thermal relief热风焊盘

为了画个通孔焊盘,看了很久的 Thermal relief相关的内容,终于基本上理解了。记录一下。 这篇文章讲得非常清楚: 深入理解Allegro之Thermal Relief与Anti Pad - 百度文库 (baidu.com) 热风焊盘般用在内层,减少一些焊盘和铜皮的连…

Leetcode究极刷题笔记(31~35)

(31)下一个排列(中等) 实现思路: 从题目中,我们可以看出本题的意思就是让你选一个比当前序列大的最小的那个解,比如132,哪么比它大的最小解就是213(先从第一位开始比&am…

Js实现滚动变色的文字效果

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>滚动变色的文字js特效</title> </head> <body> <div style"width:736px;"> 请注意下方的文…

环境变量详解

目录 环境变量是什么&#xff1f; 常见环境变量 查看环境变量 指令查看 代码查看 系统调用查看 本地变量 环境变量全局性 环境变量是什么&#xff1f; 我们要执行一个我们所写的c/c程序时&#xff0c;需要./可执行文件&#xff0c;告诉操作系统你在哪里&#xff0c…

魔兽世界私服架设教程—魔兽大服务器合并列表

都说魔兽世界是最经典的网游&#xff0c;可惜我沉迷于程序的世界&#xff0c; 用以下命令down源码 git clone git://github.com/mangos/mangos.git 编译的时候会出错&#xff0c;找不到以下两个文件 revision.h SystemConfig.h 其实以上文件只是简单的定义同个编译的宏而…

数据库网络编程

数据库网络编程是一个重要的领域&#xff0c;它涉及到如何使用编程语言与数据库进行交互&#xff0c;以及如何设计和实现网络应用程序。在这篇文章中&#xff0c;我将探讨数据库网络编程的基础知识、常用技术和实践经验&#xff0c;以及一些应用案例和未来发展趋势。 一、基础…

PEIS源码,体检管理系统源码,C#医院体检系统源码

PEIS体检管理系统源码&#xff0c;医院体检系统源码PEIS源码&#xff0c;商业级源码&#xff0c;有演示。 PEIS医院体检管理系统采用C/S结构&#xff0c;前台开发工具为Vs2012&#xff0c;后台数据库采用oracle大型数据库。核心功能有&#xff1a;体检档案的录入、体检报告的输…

Web 开发会话技术之 -Cookie介绍以及源码分析和图分析以及Cookie的生命周期--路径--中文乱码的分析和代码示例

目录 Web 开发会话技术之 -Cookie 会话 基本介绍 1. 什么是会话&#xff1f; 2. 会话过程中要解决的一些问题&#xff1f; cookie 技术 cookie 介绍 二说 cookie cookie 可以用来做啥 cookie 基本使用 cookie 常用方法 cookie 底层实现机制-创建和读取 Cookie Crea…