linux 文件inode,linux文件系统-inode学习整理

linux文件系统-inode学习整理

介绍

linux文件系统可讲的模块有很多,包括文件系统整体架构、文件系统分类、虚拟文件系统以及文件系统存储结构等等,本文主要介绍的是文件系统的存储结构,也就是本文的重点-inode。

文件存储结构

首先从开天辟地开始介绍,我们知道数据是保存在磁盘中的,磁盘具体存贮原理细节不在这里进行说明,而磁盘中的存储空间是如何进行管理的?这里就说到了磁盘块的划分:

超级快:文件系统中第一个块,存放的是文件系统本身的结构信息,包括每个区域的大小以及未被使用的磁盘块等等信息

inode节点表:超级块的下部分就是inode节点表了,也就是我们上面的inode table。每个inode节点对应一个文件(或目录)的结构,包括了文件的创建时间、权限等信息,下面有详细的介绍。

数据区:显然它就是用来保存文件内容的区域,这里要介绍下,磁盘上的块大小一样,一般来说为4kb,即连续的八个扇区(512字节),块手是文件存取的最小单位,超过块大小的文件会放到下一个块中。

就像大家知道的,linux一切皆是文件,所以目录项也是文件,不过这个文件中存储的是目录下的文件及子目录组织结构,相应的文件指向了inode的节点,这里需要说明每个文件对应一个inode节点,之后通过inode节点中有关数据区块的信息找到对应的数据。

文件存储结构的整体架构,如下图所示:

6a40bdfff3efa97a4fa510fbb091ba18.png

inode节点inode节点详解

inode节点就是文件元数据的存储区,包括了文件如下内容

1

2

3

4

5

6

7

8- 文件的字节数

- 文件拥有者的User ID

- 文件的Group ID

- 文件的读、写、执行权限

- 文件的时间戳,共有三个:ctime指inode上一次变动的时间,

mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

- 链接数,即有多少文件名指向这个inode

- 文件数据block的位置

可以使用stat filename 命令查看:

bb729fa6076a960fd03ceeed45c2759c.png

基本除了文件内容外的信息都存储在inode节点中。

inode节点的大小一般来说为128或者256个字节,inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

如果想要查看inode大小,可以使用dump2fs -h /dev/sda1 | grep "Inode size"查看:

c6bed6c6c7ae78eb0d07c45d067e9662.png

如果要查看每个磁盘的inode使用情况,可以使用df -i命令查看:

50f49d5a740cd338ed12b2f651de70ae.png

每个文件都有自己的对应的inode号,这里要说明的是unix/linux系统中主要根据inode号来识别文件,文件名只是我们用来整理和分辨文件的别称,而文件名主要存储在目录项中。

目录项目录项的结构

目录项是linux文件系统的重要组成部分,在linux中目录项也是一种文件,不过他内部存储的信息由两部分组成

文件名

inode编号

我们可以通过ls -ai dirname 查看目录结构:

2e1bfc927d3873e2afdb42efa744e2a8.png

当我们创建目录时,一定会有的两个内容就是.和..,.表示的是当前目录文件所对应的inode号,..对应的是当前目录父目录的inode号,其他的就是我们目录下的文件和对应的inode号。

介绍完上面这些信息我们再来看一开始的流程就很清楚了:

首先从目录文件中拿到我们所需文件对应的inode号,通过inode号拿到文件的元数据,通过其中所指向的数据块号取出文件内容。

创建流程通过创建流程串通知识点

文件创建流程

通过前面的内容我们了解到了文件取出的流程,那创建一个文件的流程是什么样的呢?下面我们来介绍下创建文件的流程。

存储inode节点信息:内核首先找到一块空的inode节点,将文件的信息存在节点中。

存储数据信息:数据信息即文件信息,内核从未使用的块列表中找到几个数据块(一般是不连续的),如300、230、540等,内核将缓存区中的数据存储到对应的数据块中。

记录分配情况:存储完信息后,数据块的分配情况记录在inode节点信息中

添加文件名到目录:最后内核将文件名和对应的inode节点放到目录文件中。

inode应用扩展

硬连接

一般情况下,linux中的文件名和inode号码是一一对应的,不过也可以多个文件名指向同一个inode节点,也就是我们要介绍的硬链接。

创建硬链接的命令为ln 源文件目标文件,硬链接与正常的文件相同,只是与其他文件共享同一个inode节点,前面介绍的inode节点信息中Links数就是文件名指向的数量,当对其进行删除的时候只会对inode节点中的links数减少1,当为0的时候文件才会真正被删除。

2863ab7546791381bb79f13b2ea79fd3.png

这里说明下,目录项中的.和..也是一种硬链接。

软链接

介绍完硬链接,再介绍一种我们平常使用比较多的一种方式:软链接。

ln -s 源文件 目标文件是软链接的创建方式,虽然看起来只是多了个选项s,当时内部原理完全不同。

软链接是单独生成一个链接文件,有自己的inode号,是一个单独的文件,这个文件中的信息是链接的文件的信息。

0888d8296ab9ab4b31874c6b9bcfc77d.png

如上图,可以把软链接看做是一个指针,只不过指针里面的内容为所指向文件的路径,这个指针有自己单独的内存空间。

参考文章

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

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

相关文章

pygame-KidsCanCode系列jumpy-part8-记录历史最高分

通常在多玩家的游戏中,每个玩家都会有自己的得分,最高分数会成为该游戏的最佳记录。这一篇,学习下如何记录最高得分:(为了简化代码,本文采用文件方式,仅记录本机得分,明白原理后&…

linux下查看进度命令,在Linux系统中使用Coreutils Viewer显示命令运行进度

Coreutils Viewer(cv)是一个简单的程序,它可以用于显示任何核心组件命令(如:cp、mv、dd、tar、gzip、gunzip、cat、grep、fgrep、egrep、cut、sort、xz、exiting)的进度。它使用文件描述信息来确定一个命令的进度,比如cp命令。cv之美在于&…

[EffectiveC++]item34:区分接口继承和实现继承

[EffectiveC]item34:区分接口继承和实现继承 转载于:https://www.cnblogs.com/jeanschen/p/3363569.html

REST-framework快速构建API--四部曲

代码目录结构: 一、使用原生APIView 使用rest-framework原生的APIView实现过程: 以url(r^books/$, views.BookView.as_view(),name"books")为例进行流程分析, 1、views.BookView.as_view()>APIView的as_view方法>父类【View】…

JavaFX技巧2:使用Canvas API进行清晰绘图

当我最初开始使用Canvas API时,我注意到渲染代码的结果有些模糊,甚至更糟,不一致。 有些线条模糊,有些线条清晰。 来自Swing,我花了一些时间才意识到这是由JavaFX的坐标系引起的,该坐标系允许双精度渲染。 …

HTML5 Inline SVG

这是效果图&#xff1a; 1 <!DOCTYPE html>2 <html>3 <head>4 <meta content"text/html; charsetutf-8" http-equiv"Content-Type" />5 <title>geovindu svg</title>6 </head>7 <body>8 9 <svg width&…

前端开发网络——Ajax(GET、POST)

ajax请求的过程 我们平时输入的网址&#xff0c;比如www.baidu.com&#xff0c;就会被解析成14.215.177.39这一串数字&#xff0c;然后发送请求给后台服务器&#xff08;客户端发送http请求&#xff09;。 服务器会确认你发送的是什么请求&#xff0c;需要请求什么东西&#xf…

通过Spring将继承树加载到List中

我注意到有趣的Spring功能。 我的一位同事使用它将Spring Bean的整个继承树加载到列表中。 在学习Spring文档时错过了这一点。 让我们来看看Spring bean的继承树&#xff1a; 下面的代码片段是通过构造函数注入将该豆树加载到列表中的&#xff1a; Component public class N…

在VS2003下把一个DataTable Update 到数据库

假设一个常见的场景先吧----实际也是我当前的场景-----把一个excel 文件导入到数据库. 这实在是一个常见的功能,但是,没想到的是, 我着实费了一把劲. 实际上,我以前写的有现成的函数来完成这个工作, 但是, 可惜那函数只能在VS2005 下工作, 在2003下面无效,无效的原因是,vs2003 …

linux 挂载有数据硬盘分区,linux下磁盘分区、挂载知多少

0x01 Linux 分区简介主分区 vs 扩展分区硬盘分区表中最多能存储四个分区&#xff0c;但我们实际使用时一般只分为两个分区&#xff0c;一个是主分区(Primary Partion)一个是扩展分区(extended partition)&#xff0c;主分区可以马上被使用但不能再分区&#xff0c;扩展分区必须…

Java 8中的HashMap性能改进

HashMap<K, V>是每个Java程序中快速&#xff0c;通用且无处不在的数据结构。 首先是一些基础知识。 您可能知道&#xff0c;它使用键的hashCode()和equals()方法在存储桶之间拆分值。 存储桶&#xff08;箱&#xff09;的数量应略高于映射中的条目数&#xff0c;以便每个…

css 汉字注音,日本语片假名

代码 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2 <html xmlns"http://www.w3.org/1999/xhtml">3 4 <head>5 <meta content"te…

Microsoft .NET 框架资源基础 ---摘自:msdn

Chris SellsSells Brothers Consulting 摘要&#xff1a;Chris Sells 讨论无类型清单资源和有类型资源&#xff0c;它们是受 Microsoft .NET 框架支持的两种资源。他定义了这两种资源&#xff0c;并介绍了如何在您自己的应用程序中使用它们。 下载 winforms02202003.exe 示例文…

Elasticsearch-kopf导览

当我需要一个插件来显示Elasticsearch的集群状态时&#xff0c;或者需要深入了解通常为经典插件elasticsearch-head所达到的索引时。 由于有很多建议&#xff0c;而且似乎是非官方的继任者&#xff0c;所以我最近对elasticsearch-kopf进行了更详细的介绍 。 我喜欢它。 我不确…

文字阴影-CSS Text-Shadow

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2<html xmlns"http://www.w3.org/1999/xhtml">3<head>4<title>文字阴影-CSS Text-Shad…

javascript动态创建radio button元素支持IE/Firefox

我们都知道在IE中创建表单元素可以有三种方式varoInput document.createElement("input");varoInput document.createElement("<input />");varoInput document.createElement("<input name />");在Firefox里面仅支持varoInput docu…

如何在Android Studio中添加RecyclerView-v7支持包

首先右键你的项目然后选择 open module Settings 之后会出现这个界面&#xff0c;选择 Modules 下的app ,>>> Dependencies >>>点击右边的“” 选择第一项Library dependency 出现此界面&#xff0c;然后选择你所需要的 转载于:https://www.cnblogs.com/lcx9…

浮动层图片鼠标指针移到自动放大

html code:1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2<html xmlns"http://www.w3.org/1999/xhtml">3<head>4<title>缔友计算机信…

字符大小端aix linux,long, unsigned long不是跨平台的(慎用)

项目中用到long、long long等字段&#xff0c;遇到一些问题。先说得到的一些结论&#xff1a;大小端&#xff1a;Windows、Linux是小端&#xff0c;AIX是大端。sizeof(指针类型)程序位数/8。long、unsigned long不是跨平台的&#xff0c;一定要慎用。自己写了程序测试各平台下(…

Java构建工具:Ant vs. Maven vs Gradle

最初&#xff0c;Make是唯一可用的构建工具。 后来通过GNU Make进行了改进。 但是&#xff0c;从那时起&#xff0c;我们的需求增加了&#xff0c;结果&#xff0c;构建工具也不断发展。 JVM生态系统主要由三个构建工具组成&#xff1a; 常春藤的 Apache Ant 马文 摇篮 An…