Linux —— 文件系统

目录

一,背景

二,文件系统


一,磁盘简介

        磁盘分为SSD、机械磁盘;机械磁盘,即磁盘高速转动,磁头移动到读写扇区所在磁道,让磁头在目标扇区上划过,即可完成对扇区的读写操作;

        在操作系统角度,内存使用的基本单位为4KB;磁盘存储的基本单位为扇区512byte(512*8=4KB);内存和磁盘间数据交互,是通过文件系统完成的;输入输出I/O的基本单位也是一般4KB;一次性从磁盘读入8个扇区数据,来填满一个内存;

二,文件系统

文件(打开文件、未打开文件,类似进程和程序的关系)

  • 已打开的文件,内存内,struct file,包含属性和方法;
  • 未打开的磁盘文件,未被加载到内存;

文件系统,是OS对打开的文件和未打开的文件的管理;

文件 = 属性 + 内容

//文件属性
[wz@192 Desktop]$ ll
total 24
-rw-r--r--. 1 wz wz   11 8月  10 19:39 log.txt
-rw-rw-r--. 1 wz wz   29 7月  21 07:31 Makefile
-rwxrwxr-x. 1 wz wz 8648 8月  10 19:44 target
-rw-rw-r--. 1 wz wz  374 8月  10 19:47 test.c
//模式 硬链接数 所有者 组 大小 修改时间 文件名
[wz@192 Desktop]$ stat log.txt File: ‘log.txt’Size: 11        	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 5465892     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/      wz)   Gid: ( 1000/      wz)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2023-08-10 19:40:07.816510338 -0700
Modify: 2023-08-10 19:39:52.677512582 -0700
Change: 2023-08-10 19:39:52.680512582 -0700Birth: -

文件系统分类

  • 磁盘文件系统,EXT2/3/4、VFAT、FAT/FAT16/FAT32、NTFS(windows)等;
  • 网络文件系统,NFS、Samda等;
  • 虚拟文件系统,是物理文件系统与服务应用之间的一个接口层;

  • Super Block,存放文件系统本身的结构信息,记录的信息有:block和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载时间,最近一次写入数据的时间,最近一次检验磁盘的时间等,如super block信息损坏,则整个文件系统结构就损坏了;
  • Group Descriptors Table,描述块组属性信息;
  • Block Bitmaps,记录data blocks中哪个数据块被占用,哪个没有;
  • Inode Bitmap,每个bit表示一个inode是否空闲可用;
  • Inode Table,存放文件属性;
  • Data Blocks,存放文件内容;

inode,基本上一个文件/目录一个inode,是文件所有的属性集合(不包括文件名);真正标识文件的不是文件名,是文件inode;inode和数据块是关联的;

创建新文件4个主要操作

  • 存储属性,内核先找到一个空闲的inode,把文件信息记录其中;
  • 存储数据
  • 记录分配情况
  • 添加文件名到目录

软硬链接

  • 软链接,是一个普通正常的文件,有自己独立的inode;其数据块,保存了指向链接文件的路径;类似于Windows的快捷方式;
  • 硬链接,不是一个独立额文件,没有自己独立的inode;
//创建软链接
[wz@192 Desktop]$ ln -s file.txt soft_link
[wz@192 Desktop]$ ll -ai soft_link file.txt 
5465893 -rw-rw-r--. 1 wz wz 0 8月  12 03:51 file.txt
5465912 lrwxrwxrwx. 1 wz wz 8 8月  12 03:49 soft_link -> file.txt
//创建硬链接
[wz@192 Desktop]$ ln file.txt hard_link
[wz@192 Desktop]$ ll -ai file.txt  hard_link 
5465893 -rw-rw-r--. 2 wz wz 6 8月  12 03:53 file.txt
5465893 -rw-rw-r--. 2 wz wz 6 8月  12 03:53 hard_link
//目录文件链接数为2
//本身目录名和inode的映射关系
//自身目录内还有一个默认的.文件
[wz@192 Desktop]$ ll -ai
total 3674071 drwxr-xr-x.  3 wz wz  126 8月  12 05:07 .
16777672 drwx------. 19 wz wz 4096 7月  31 06:28 ..
18335283 drwxrwxr-x.  2 wz wz    6 8月  12 05:07 dir
[wz@192 Desktop]$ ll -ai dir
total 0
18335283 drwxrwxr-x. 2 wz wz   6 8月  12 05:07 .74071 drwxr-xr-x. 3 wz wz 126 8月  12 05:07 ..
//在dir目录下新建一个文件,目录dir的链接数变为了3
//目录sudir内的默认..文件
[wz@192 Desktop]$ mkdir dir/subdir
[wz@192 Desktop]$ ll -dai dir
18335283 drwxrwxr-x. 3 wz wz 20 8月  12 05:11 dir
[wz@192 Desktop]$ ll -ai dir/subdir/
total 0
33815814 drwxrwxr-x. 2 wz wz  6 8月  12 05:11 .
18335283 drwxrwxr-x. 3 wz wz 20 8月  12 05:11 ..

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nacos升级开启鉴权后,微服务无法连接的解决方案

版本: 软件版本号备注spring boot2.2.5.RELEASEspring-cloudHoxton.SR3spring-cloud-alibaba2.2.1.RELEASEnacos2.0.1从1.4.2版本进行升级。同时作为注册中心和配置中心 一、升级nacos版本,开启鉴权 1.在application.properties配置文件开启鉴权&…

thinkphp:分组查询(多条相同列的数据只展示一条)

例子:数据库中有trans_num、subinventory_from、transaction_type、creation_date有相同值,在查询该数据库使,只展示这几个值相同的一条 效果: 限制之前 限制之后 代码 限制前,后端代码 public function select_i…

Java之继承

继承 继承为什么使用继承继承是什么继承的语法访问父类成员访问父类成员变量访问父类成员方法 super关键字子类构造方法super和this异同分别的使用方法 继承的方式final关键字 作者简介: zoro-1,目前大一,正在学习Java,数据结构等…

微服务监控技术skywalking的部署与使用(亲测无坑)

微服务监控技术skywalking的部署与使用 1. 前期准备2. skywalking安装部署2.1 Java Agent2.2 apache/skywalking-oap-server2.3 apache/skywalking-ui 3. 项目启动4.效果展示 1. 前期准备 注:本篇文章采用docker部署,采用8.2.0版本,版本一定…

机器学习、深度学习项目开发业务数据场景梳理汇总记录三

本文的主要作用是对历史项目开发过程中接触到的业务数据进行整体的汇总梳理,文章会随着项目的开发推进不断更新。 这里是续文,因为CSDN单篇文章内容太大的话就会崩溃的,别问我怎么知道的,问就是血泪教训,辛辛苦苦写了一…

C语言 ——指针数组与数组指针

目录 一、二维数组 二、指针数组 (1)概念 (2)书写方式 (3)指针数组模拟二维数组 三、数组指针 (1)概念 (2)使用数组指针打印一维数组 (3&a…

2023牛客暑期多校训练营7

Beautiful Sequence 贪心,二进制,构造 Cyperation 模拟 ,数学 We Love Strings 分块,二进制枚举,二进制容斥dp Writing Books 签到 根据相邻两个异或值B,因为前小于等于后,故从高到低遍历B的每一…

AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)

说一下功能:客户机发送0x01到服务机 2服务单片机应答0xf2到客户机 3客户机接收到0xf2,发送信息153432这6个数字到服务机 4client发送完信息后发送0xaa结束通信 5server接收到0xaa后回复0xaa结束通信,从此老死不相往来 看代码: //发送端…

C语言 ——函数指针变量

1、概念: 数组指针 - 是指针-是指向数组的指针,是存放数组地址的指针 函数指针 - 是指针 是指向函数的指针 - 是存放函数地址的指针!! 如上所示,函数也是具有地址的,而存放函数地址的指针变量成为函数指针变量。 而有如上所示&a…

构建Docker容器监控系统(2)(Cadvisor +Prometheus+Grafana)

Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息,并以图表的形式向用户展示。 接着上一篇来继续 部署Cadvisor 被监控主机上部署Cadvisor容器…

【Kafka】1.Kafka简介及安装

目 录 1. Kafka的简介1.1 使用场景1.2 基本概念 2. Kafka的安装2.1 下载Kafka的压缩包2.2 解压Kafka的压缩包2.3 启动Kafka服务 1. Kafka的简介 Kafka 是一个分布式、支持分区(partition)、多副本(replica)、基于 zookeeper 协调…

Qt5开发视频播放器

一、播放器界面UI设计 控件对象名位置(坐标点)对象名称组件名称备注Widget(0, 0, 809, 572)WidgetQWidgetlabellabelQLabel播放窗口label_2label_2QLabelvoice_controlvoice_controlQSlider音量滑动条btn_openbtn_openQPushButton打开文件按钮label_4la…

ThreadLLocal的学习

ThreadLocal的学习 ThreadLocal的学习1.ThreadLocal是什么?2.ThreadLocal的数据结构Java的四种引用类型 3.ThreadLocal为什么会出现内存泄露?既然会出现内存泄露为什么Entry的key还要使用弱引用?如何避免内存泄露? ThreadLocal的学…

最新版本2023UI千月影视APP源码 开源完美版前后端完美匹配 后端基于ThinkPHP框架

最新版本的2023UI千月影视APP源码是一款开源的完美版应用程序,具备前后端完美匹配的特点。该应用的后端开发基于ThinkPHP框架,这是一个广泛使用的PHP开发框架,具有稳定性和安全性方面的优势。 2023UI千月影视APP是一款提供电影、电视剧、综艺…

Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

笔者在近一两年接触了Clickhouse数据库,在项目中也进行了一些实践,但一直都没有一些技术文章的沉淀,近期打算做个系列,通过一些具体的场景将Clickhouse的用法进行沉淀和分享,供大家参考。 首先我们假设一个Clickhouse数…

智能合约 -- 常规漏洞分析 + 实例

1.重入攻击 漏洞分析 攻击者利用合约漏洞,通过fallback()或者receive()函数进行函数递归进行持续取钱。 刚才试了一下可以递归10次,貌似就结束了(version: 0.8.20)。 直接看代码: 银行合约:有存钱、取钱、查看账户余额等函数。攻击合约:…

第04天 Spring是如何解决循环依赖的

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏&#xff1a…

【VUE】7、VUE项目中集成watermark实现页面添加水印

在网站浏览中,常常需要网页水印,以便防止用户截图或录屏暴露敏感信息后,方便追踪用户来源。 1、安装 watermark 在 package.json 文件 dependencies 节点增加 watermark-dom 依赖 "watermark-dom": "2.3.0"然后执行命…

Petrel解释二维浅地层数据

Petrel是斯伦贝谢开发的一款地质解释和建模软件,有点像地理信息系统的ArcGIS,主要用于数据分析和展示。它不是用来处理原始数据的,而是集成各种处理后的结果数据进行特征分析和目标拾取。当然,它也能读取原始数据,比如…

Vue 3.0中的Treeshaking?

1.treeshaking是什么? Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Dead code elimination 简单来讲,就是在保持代码运行结果不变的前提下,去除无用的代码 如果把代码打包比作制作蛋糕&#…