Linux中inode
磁盘的空间管理
如何对磁盘空间进行管理?
假设在一块大小为500G的磁盘中,500*1024*1024=524288000KB。在磁盘中,扇区是磁盘的基本单位(一般大小为512byte),而文件系统访问磁盘的基本单位是4KB,因此500G就被分成了131072000个扇区,将这些扇区看作为数组。而如果对这500GB进行分盘(C盘50G,D盘100G等),因此对500G磁盘的管理也就是对分的C盘50G,D盘100G的管理,相同,对于C盘50G的管理又被分化成对C盘中5个10G的管理。因此只要管理好局部,就能管理好整体,将整体细化成小等份进行管理即可(如下图)。
在Linux中,文件由数据与属性组成,这里数据内容存储在block(一般是4KB)中,属性存放在inode(磁盘上的另一块空间,一般是128字节)中,因此一个扇区(512字节)可以存储4个inode。但是内容可以增多或减少,而属性是不变的。
- Date blocks:里面包含许多Data Block,并且占磁盘的绝大部分空间,每一个Data Block大小是4KB。Data Blocks的作用是以块(这里的块就是Data Block)为单位,对文件内容进行保存,OS将文件每4KB分为一块进行保存,不够4KB也按照4KB保存。
- inode table:里面包含大量的inode空间(每个inode大小为128字节),用于保存文件属性。这里的inode可以理解成一个结构体(struct inode,其中保存着对应文件的Data Block编号,这使得Data Blocks与inode进行相互关联),结构体内部包含文件属性(所有者,权限等),并且以二进制的形式将实例化对象(struct inode i)写到inode空间里面。一般而言,一个文件有一个inode编号,以保证文件的唯一性。
- Block Bitmap:意思是位图,用于判断Data Blocks上的空间是否被占用。通过比特位上的数据来判断数据块中哪些空间被使用,哪些空间没被使用(0000 0000表示空空间都没有被使用,0000 1010表示1号位和3号位空间被使用)。
- Inode Bitmap:用于判断inode哪些空间被占,哪些空间没有被使用。
- Group Descriptor Table:简称GDT,块组描述符,用于描述inode表和数据块的起始位置。
- Super Block:用于记录存放文件系统本身的信息,记录Data Block和inode Block中的使用量以及未使用量等。并不是每个Block Group都含有Super Block,Super Block存在的意义是如果Super Block出现损坏可以通过其他Super Block对文件进行恢复。
注意:文件名也是文件的属性,但是在Linux中,并没有文件名的概念,而是通过inode对应的Data Block编号来识别文件的,因此要找到文件,就必须找到该文件对应inode编号,找到inode编号就能找到文件的Data Blocks,从而找到文件内容。那么如何找到inode呢?
我们知道,目录其实也是文件,是文件就具有文件内容和属性,这里目录的文件内容其实就是文件与目录的inode编号的映射关系。当我们在某一个目录下创建一个文件的时候,OS会根据当前目录下的Inode Bitmap找到未使用空间,将创建的文件的属性写入到该未使用的inode上,然后再根据Block Bitmap找打未使用的Data Block,然后填写数据到Data Block上,最后返回该文件的inode。最后返回的inode编号找到该文件所处的目录,根据目录的inode找到目录的Data Block,然后将文件名与inode的映射关系写入到目录的Data Block中。(这就是为什么inode中不保存文件名,因为文件名在目录中)
当删除一个文件的时候,根据目录的inode和要删除的文件名,找到目录的Data Block,根据文件名的映射关系找到文件的inode,再根据要删除文件的inode找到该文件的BlockGroup,将要删除文件的inode Bitmap和Block Bitmap的位图上的标志位由1置为0,最后取消该文件与目录的映射关系。
软连接与硬连接
软连接:
如上图,在/home/101-asy/linux/2024-12-06/d1/d2/d3目录下编译成的可执行文件mytest1,如果在/home/101-asy/linux/2024-12-06下执行需要带该文件的路径: ./d1/d2/d3/mytest1;但是如果使用软连接的方式:ln -s ./d1/d2/d3/mytest1 mytest1.s在/home/101-asy/linux/2024-12-06目录下生成一个软连接的可执行文件mytest1.s。这个软连接可以理解成快捷键。
如上图,软连接的文件与源文件的inode不同(因此软连接文件是一个独立的文件,也要进行分配inode,填写属性Data block,映射等操作),并且软连接文件的内容其实是源文件的所在路径。
硬连接:
创建的硬链接文件与原文件的inode相同,所谓的硬连接就是在当前目录下,给指定的文件新增文件名和inode编号的映射关系。
硬连接数是指向同一inode文件的数量,用于标识有多少个文件指向当前inode文件。
为什么创建的文件默认硬连接数是1呢???而文件夹又是2呢???
如上图,我们知道硬连接数表示有几个文件名指向该文件。当创建file文件时,file文件本身就指向了该文件,因此file文件本省就是一个硬连接数。而对于文件夹来说除了文件夹名本身外其内部还有一些文件:
以目录d4为例,d4的硬连接数为3,分别为d4文件名本身指向d4,d4目录下的.文件指向d4,以及d5目录下的..文件指向d4。
相关文章:
Linux中inode
磁盘的空间管理 如何对磁盘空间进行管理? 假设在一块大小为500G的磁盘中,500*1024*1024524288000KB。在磁盘中,扇区是磁盘的基本单位(一般大小为512byte),而文件系统访问磁盘的基本单位是4KB,因…...
verilog fpga 如果if语句==号后面是个表达式 运行不稳定
来自 文心一言 在Verilog中编写FPGA代码时,使用if语句进行条件判断是常见的操作。然而,当if语句中的条件判断使用的是表达式(如后面是一个复杂的表达式),确实可能会遇到运行不稳定的问题。这通常是由于以下几个原因导…...
BFS广度优先搜索
广度优先搜索(Breadth-First Search, BFS)是一种用于遍历或搜索树或图的算法。 它从根节点开始,逐层访问每个节点,并在访问完一层后才访问下一层。BFS常用于寻找最短路径的问题。 下面将用实例一和实例二来实现BFS广度优先搜索 …...
uniapp 自定义导航栏增加首页按钮,仿微信小程序操作胶囊
实现效果如图 抽成组件navbar.vue,放入分包 <template><view class"header-nav-box":style"{height:Props.imgShow?:statusBarHeightpx,background:Props.imgShow?:Props.bgColor||#ffffff;}"><!-- 是否使用图片背景 false…...
小程序项目的基本组成结构
分类介绍 项目根目录下的文件及文件夹 pages文件夹 用来存放所有小程序的页面,其中每个页面都由4个基本文件组成,它们分别是: .js文件:页面的脚本文件,用于存放页面的数据、事件处理函数等 .json文件:…...
2020年国赛高教杯数学建模E题校园供水系统智能管理解题全过程文档及程序
2020年国赛高教杯数学建模 E题 校园供水系统智能管理 原题再现 校园供水系统是校园公用设施的重要组成部分,学校为了保障校园供水系统的正常运行需要投入大量的人力、物力和财力。随着科学技术的发展,校园内已经普遍使用了智能水表,从而可以…...
《C++与 OpenCV 机器学习模块:目标检测的强大融合》
在当今科技飞速发展的时代,目标检测技术已经成为计算机视觉领域的一颗璀璨明珠,广泛应用于安防监控、自动驾驶、智能图像分析等众多领域。而 C语言凭借其高效性和强大的性能,与 OpenCV 的机器学习模块相结合,为实现精准且高效的目…...
函数与模块
目录 1.函数 1.1.函数概念 1.2.函数定义 1.3.函数分类 1.4.函数参数类型 1.4.1.位置参数 1.4.2.关键字参数 1.4.3.默认值参数 1.4.4.可变参数 1.5.匿名函数 1.6.参数传递问题 2.冒泡排序 2.1.冒泡排序规则 2.2.冒泡排序实现 3.math 模块 4.random 模块 5.date…...
SQL面试题——滴滴SQL面试题 取出累计值与1000差值最小的记录
滴滴SQL面试题 取出累计值与1000差值最小的记录 今天的题目来自滴滴出行 已知有表cost_detail包含id和money两列,id为自增,请累加计算money值,并求出累加值与1000差值最小的记录。 +-----+--------+ | id | money | +-----+--------+ | 1 | 200 | | 2 | 300 …...
使用 Elastic 和 Amazon Bedrock 制作混合地理空间 RAG 应用程序
作者:来自 Elastic Udayasimha Theepireddy (Uday), Srinivas Pendyala, Ayan Ray 借助 Elasticsearch 及其向量数据库,你可以构建可配置的搜索和可信的生成式 AI (GenAI) 体验,这些体验可快速从原型扩展到生产。主要功能包括: 内…...
计算机软著个人申请指南
笔者最近申请了两本软著证书,结合自己的经历介绍一下。 软著登记网址:中国版权业务登记平台 准备工作 你的项目源码源代码统计工具 source-codes-trim:笔者开发自用的源码处理工具vscode插件其他的可以自己在网上搜资源 Word 申请流程 注…...
OmniParser一种用于增强视觉语言模型与用户界面交互效果的技术
OmniParser一种用于增强视觉语言模型与用户界面交互效果的技术 OmniParser的核心功能是将用户界面截图转换为结构化元素,这一过程涉及几个关键步骤和技术要素,解决了视觉语言模型(VLMs)在与用户界面交互时所面临的多种挑战。 1.…...
HBU深度学习作业10-BPTT
1、推导BPTT 2、推导梯度 3、分析其可能存在梯度爆炸的原因并给出解决方法 为了改善循环神经网络的长程依赖问题,一种非常好的解决方案是在公 式(6.50)的基础上引入门控机制来控制信息的累积速度,包括有选择地加入新 的信息,并有选择地遗忘之…...
L2G6000 - MindSearch部署实践
文章目录 MindSearch部署实践部署MindSearch到 hugging face Spaces上启动MindSearch启动后端启动前端 部署到自己的 HuggingFace Spaces上 部署MindSearch streamlit版本到Hugging Face上 MindSearch部署实践 部署MindSearch到 hugging face Spaces上 在Codespaces上选择Bla…...
CentOS 7 上安装 MySQL 8.0.40 (二进制安装)
要在 CentOS 7 上安装 MySQL 8.0.40,按照以下步骤操作: 下载安装包。 https://dev.mysql.com/downloads/mysql/ 下载之前查看系统c版本 解压安装包 首先,解压下载的 .tar.xz 安装包。 cd /path/to/your/downloads tar -xvf mysql-8.0…...
应用案例 | 船舶海洋: 水下无人航行器数字样机功能模型构建
水下无人航行器数字样机功能模型构建 一、项目背景 为响应水下装备系统研制数字化转型及装备系统数字样机建设的需要,以某型号水下无人航行器(Underwater Unmanned Vehicle,UUV)为例,构建UUV数字样机1.0功能模型。针对…...
Chromium CDP 开发(六):注册自己的指令(下)
引言 在这一章节中,我们将详细讲解如何将新定义的 TimerSend 指令和 TimerLog 事件添加到项目 的 inspector_protocol_config.json 文件中,从而使这些功能能够在 CDP(Chrome DevTools Protocol)中被识别并正常使用。 inspector_pr…...
【基础算法总结】哈希表/set/map篇
目录 一,哈希表简介二,算法原理和代码实现1.两数之和349.两个数组的交集面试题01.02.判断是否互为字符重排217.存在重复元素219.存在重复元素II692.前k个高频单词45.字母异位词分组 三,算法总结 一,哈希表简介 哈希思想是算法中一…...
数字逻辑理论题目+知识点复习
昨天考完的数字逻辑理论考试,啊啊啊还有实验,生活不易,且行且珍惜。 请以最大的善意对待生活(,,>᎑<,,)。...
证明网络中的流形成一个凸集
证明网络中的流形成一个凸集 步骤1:定义和符号步骤2:线性组合步骤3:验证容量限制步骤4:验证流量守恒结论示例代码(C语言) 在网络流理论中,一个流 f f f 是定义在网络图的边集上的一种函数&…...
SpringBoot3
1. 配置文件 1. 基本使用 使用 配置文件classpath:application.properties spring.jdbc.drivercom.mysql.cj.jdbc.Driver spring.jdbc.urljdbc:mysql://localhost:3306/batis spring.jdbc.usernameroot spring.jdbc.password123456使用配置文件的值:Value("…...
Linux之线程概念,理解和控制
Linux之线程概念,理解和控制 一.线程1.1线程的概念1.2线程的理解1.3线程的优缺点,异常和用途1.4线程和进程1.5线程的控制1.4.1线程的创建1.4.2线程的终止1.4.3线程的等待1.4.4线程的分离 一.线程 1.1线程的概念 在我们了解了进程的同时我们在学校上课时…...
系统监控——分布式链路追踪系统
摘要 本文深入探讨了分布式链路追踪系统的必要性与实施细节。随着软件架构的复杂化,传统的日志分析方法已不足以应对问题定位的需求。文章首先解释了链路追踪的基本概念,如Trace和Span,并讨论了其基本原理。接着,文章介绍了SkyWa…...
【Leetcode Top 100】146. LRU 缓存
问题背景 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 c a p a c i t y capacity capacity 初始化 LRU 缓存int get(int key) 如果关键字 k e y key key 存在于缓存中&…...
Ubuntu Server 22.04.5 LTS重启后IP被重置问题
Ubuntu Server 22.04.5 LTS重启后IP被重置问题 最近在使用Ubuntu Server 22.04做项目开发测试时发现每次重启和关机后,所设置的静态IP地址都会回复到安装系统时所设置的ip Ubuntu Server 22.04 官网下载地址:Ubuntu官方下载地址 对虚拟机下安装Ubuntu感…...
电机功率、电压与电流的换算方法
在电气工程和相关行业中,电机的功率、电压和电流是三个重要的基本参数。它们之间有着密切的关系,而理解这些关系对于电机的选型、设计和应用至关重要。本文将详细阐述这三者之间的换算关系,以及相关公式的应用。 一、电机功率的定义 电机功…...
【Java】反射简介
框架的核心和架构师的核心 反射和代理是重中之重 反射 反射的作用 在运行的时候由代码获取类的信息 三种获取类信息的方式: 对象.getClass()Class.forName("类的路径")类.class Class :一个用来存储类信息的类 获取类信息是获取的整体的…...
【JAVA】Java第十三节:String类(String相关方法,以及StrinBuftrer , StringBulder相关方法)
本文详细介绍了String类以及常用的String相关方法,以及StrinBuftrer , StringBulder相关方法的使用,建议有印象即可,不需要都记住,使用时去查取即可 一、创建一个String类型的变量 我们平时创建String类型的变量一般是第一种形式…...
电子信息工程自动化 基于单片机的出租车计价器设计
摘 要 出租车作为一种城市中非常重要的公共交通工具,他与人们的生活息息相关。所以我也设计了一款出租车计价器,它采用模块化设计,包含里程测量模块、数据存储模块、按键模块、时钟模块、显示模块、语音播报模块六大主要模块。本设计的出租车…...
CentOS 二进制安装部署MongoDB 4.0
一、安装MongoDB 1. 下载 MongoDB 二进制文件 前往 MongoDB 官方下载页面(https://www.mongodb.com/try/download/community) 选择对应版本的 tar 包。 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.28.tgz 2. 解压并移动至目标目录 解压文件ÿ…...
SQL面试题——京东SQL面试题 合并数据
京东 合并数据 几天的题目来自知名电商平台京东 已知有数据A如下,请分别根据A生成B和C。 数据A +-----+-------+ | id | name | +-----+-------+ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa | | 7 | aa | | …...
windows安装使用conda
在Windows系统上安装和使用Conda的详细步骤如下: 一、下载Conda安装包 访问Conda的官方网站Anaconda | The Operating System for AI,点击“Downloads”按钮。在下载页面,选择适合您系统的安装包。通常,对于Windows系统…...
C++知识整理day4内存管理——new和delete详解
文章目录 1.C/C内存分布2.C语言中动态内存管理:malloc/realloc/calloc3.C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4.malloc/free和new/delete到底什么区别?4.1 对于自定义类型4.2 对于自定义类型4.3 总结:它们…...
STM32 自学笔记
摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。 RAM vs ROM vs FLASH 2013-09-05记录,ROM和RAM指的都是半导体存储器,ROM是Read Only …...
spring通过RequestContextHolder获取HttpServletRequest对象
1.获取HttpServletRequest对象方法: public static HttpServletRequest getRequest() {ServletRequestAttributes attributes ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());assert attributes ! null;return attributes.getRequest(…...
【特殊子序列 DP】力扣1137. 第 N 个泰波那契数
泰波那契序列 Tn 定义如下: T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 示例 1: 输入:n 4 输出:4 解释: T_3 0 1 1 2 T_4 1 …...
tcp连接设置一个超时时间(没在操作系统层面设置)
await asyncio.open_connection(ip, port, limit1024)代码是使用了操作系统的TCP连接,正常TCP连接的时候会有重试机制,当第一个SYN没有回复的时候,会再重试4次,每次间隔1s, 2s,4s, 8s,我觉得太慢了…...
03、Node.js安装及环境配置
1.下载node.js 下载地址:Node.js 2.安装 2.1 自定义安装路径(可以选择默认) 下图根据本身的需要进行,我选择了默认Node.js runtime,然后Next: Node.js runtime :表示运行环境 npm package mana…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Remote Communication Kit
1.问题描述: DynamicDnsRule有没有示例?这个地址是怎么解析出来 https://developer.huawei.com/consumer/cn/doc/harmonyos-references/remote-communication-rcp-0000001770911890#section8160554134811 解决方案: ‘DynamicDnsRule’&a…...
WebStorm快捷键保持跟Idea一致
修改连续行局部多选 在WebStorm中同时按下ctrl alt s; 选择KeyMap 输入Column Selection Mode选择快捷键, 右键选择Add Mouse Shortcut 按下alt 鼠标左键 如果出现占用的情况,直接删除其他使用该快捷键的地方即可; 修改跨行局部多选 在…...
14、鸿蒙学习——管理通知角标
针对未读的通知,系统提供了角标设置接口,将未读通知个数显示在桌面图标的右上角角标上。 通知增加时,角标上显示的未读通知个数需要增加。 通知被查看后,角标上显示的未读通知个数需要减少,没有未读通知时࿰…...
【词向量表示】Word2Vec原理及实现
文章目录 Word2VecHow achieveLookup tableCodingPre-dataingModelNegative sameple Word2Vec 单词与单词之间的向量往往不在同一个向量空间,例如,传统的编码方式:one-hot编码,不同单词[1, 0, 0]和[0, 1, 0]之间的余弦相似度为0。…...
【C++】位图
Ⅰ、bitset的介绍 位图: 就是用 比特位 来标识某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。 位图的接口: 成员函数 功能 set 设置指定位或所有位 reset 清空指定位或所有位 flip …...
性能测试需求分析(超详细总结)
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、客户方提出 客户方能提出明确的性能需求,说明对方很重视性能测试,这样的企业一般是金融、电信、银行、医疗器械等;他们…...
React开发 - 技术总结系列二
HOC 初体验 高阶组件(HOC)是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分,它是一种基于 React 的组合特性而形成的设计模式。 简单点说,就是组件作为参数,返回值也是组件的函数&#x…...
Spring事务实现原理
我们一般将Spring事务使用在数据库操作上面,用来保证数据的一致性和完整性 实现原理: 通过AOP和事务管理器实现的 1.AOP拦截: 拦截Transactional注解的方法调用 2.事务管理器: 负责事务的开启,提交和回滚 3.事务…...
云服务器部署upload-labs-docker(文件上传靶场)环境 以及相关报错问题
环境的搭建 准备:云服务器(本地的linux服务器(版本最好不要是老的不然不兼容docker)) f8x配置docker环境: https://github.com/ffffffff0x/f8x 一键配置 docker拉取file-labs靶场 https://github.com…...
Python进阶编程总结
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
【第 1 章 初识 C 语言】1.8 使用 C 语言的 7 个步骤
目录 1.8 使用 C 语言的 7 个步骤 1.8.1 第 1 步:定义程序的目标 1.8.2 第 2 步:设计程序 1.8.3 第 3 步:编写代码 1.8.4 第 4 步:编译 1.8.5 第 5 步:运行程序 1.8.6 第 6 步:测试和调试程序 1.8.…...
vue3 实现音频转文字组件
使用recorder-core第三方插件实现音频转纯文本的功能。 工具类文件 recoder.ts import Recorder from recorder-core import recorder-core/src/engine/wav import recorder-core/src/extensions/lib.fft.js import recorder-core/src/extensions/frequency.histogram.view i…...