索引节点,其英文为 Inode,是 Index Node 的缩写。索引节点是整个 Linux 文件系统的基础。存储于文件系统上的任何文件都可以用索引节点来表示。举一个例子来说,假设有一个老图书馆里面有一本登记簿,上面记录着馆内的书名及存放 位置,比如在哪一间的第几排存放着哪一本书,以及书的作者是谁。在这里,记录着一本书的那一行就是索引节点。索引节点以同样的方式来存储对象,我们会在下 面学习。

在 Linux 系统中,文件系统主要分为两部分,一部分为元数据(metadata),另一部分为数据本身。元数据,换句话说,就是“包含了与数据有关信息的数据”。索引节点就管理着文件系统中元数据的部分。

索引节点基础知识

如上所述,文件系统中的任何一个文件或目录都与一个索引节点相对应。每个索引节点都是一个数据结构,存储着目标数据的如下信息:

文件大小(以字节为单位)
(存放文件的)设备标识符
(文件所有者的)用户标识符
用户组标识符
文件模式(所有者、用户组及其他人对于文件的读取有怎样的权限)
扩展属性(如 ACL)
文件读取或修改的时间戳
链接数量(指向该文件的硬链接数,记住,软链接不计算在内)
指向存储该内容的磁盘区块的指针
文件分类(是普通文件、目录还是特殊区块设备)
文件占用的区块数量

Linux 文件系统从来不存储文件创建时间,许多人都不清楚这一点。

一个典型的索引数据看起来会是像下面这样:
# stat 01
Size:923383Blocks:1816IO Block:4096regular file
Device:803h/2051dInode:12684895Links:1
Access:(0644/-rw-r--r--)Uid:(0/root)Gid:(0/root)
Access:2012-09-0701:46:54.000000000-0500
Modify:2012-04-2706:22:02.000000000-0500
Change:2012-04-2706:22:02.000000000-0500

索引节点是在何时并以怎样的方式创建的?

索引节点的创建与正在使用的文件系统有关。一些文件系统在创建时就创建了索引节点,故其索引节点的数量有限。而一些如 JFS 和 XFS 等系统也在文件系统创建时创建索引节点,但使用动态节点分配,并按需扩大索引节点的数量,因此可以避免所有索引节点用完的情况。
当读取文件时都发生了什么?

当用户试图读取文件或与该文件相关的信息时,他会使用文件名称。但是,实质上这个文件名称首先映射为存储于目录表中的索引点节号码。通过该索引节点号码又读取到相对应的索引节点。索引节点号码及相对应的索引节点存放于映射表(Inode table)中。

索引节点指针结构

上面已经解释过,索引节点只存储元数据信息,其中包括真正的数据存储的区块的信息。下面就来解释一下索引节点指针结构。
如这篇维基百科上面的文章解释的那样,这个结构可能会有 11 到 13 个指针,但大多数文件系统会以 15 个指针的形式来存储数据结构。这 15 个指针包括:

直接指向文件数据区块的 12 个指针,称为直接指针(direct pointer)。
一个单独非直接指针(singly indirect pointer),指向一个由多个指针构成的区块,后者的指针又指向文件数据区块。
一个双重非直接指针(doubly indirect pointer),指向一个由多个指针构成的区块,后者的指针又指向一个由多个指针构成的区块,这一区块的指针又指向文件数据的区块。
一个三重非直接指针(triply indirect pointer),指向一个由多个指针构成的区块,后者的指针又指向一个由多个指针构成的区块,其指针又指向另一个由多个指针构成的区块,这一区块的指针又指向文件数据的区块。

常见问题集解

问:请用一句话来说明一下索引节点是什么?
答:索引节点是传统类 Unix 文件系统上的数据结构,储存了常规文件、目录或其他文件系统目标的基本信息。

问:如何查看文件或目录的索引节点号码?
答:可使用“stat”命令来查看该信息,也可以使用“ls”命令加上其“-i”参数来查看一文件的索引节点号码。

问:如何查看文件系统上的索引节点的总数和已用数?
答:“df -i”命令会显示索引节点总数、已用数和未使用数的统计数据。

问:为什么索引节点信息不包含文件名称?
答:索引节点会储存对于其自身唯一的信息。对于一个硬链接,一个索引节点可能会含有指向同一索引节点的两个不同的文件名。故文件名称没有存储于索引节点之内。

问:如果索引节点不包含链接会怎么样?
答:不包含链接的索引节点就会从文件系统上移除,并且其资源就会释放出来供重新分配。但直到所有打开它的进程对它读取完成后才可以删除它。

问:在移动文件时索引节点会发生变化吗?
答:即使将文件从一处移动到另一处,索引节点号码还是会保持不变,但前提是在同一文件系统之下。如果在不同的文件系统之间移动,索引节点号码就会发生变化。

问:在创建新文件或目录时会创建新的索引节点吗?
答:不会。当创建新文件或目录时,它只会使用一个已经创建的索引节点的空间并更新其信息,但不会创建新的索引节点。索引节点只会在文件系统创建时创建(有一些文件系统存在例外,上面已解释)。

问:可以通过索引节点号码找到文件吗?
答:可以。使用如下命令(其中 inode-number 为索引节点号码):

# find / -inum inode-number -exec ls -l {} \;

将上面的一行命令中的“ls”换为“rm”,也可以根据索引节点号码删除文件。

# find / -inum inode-number -exec rm -f {} \;

更多精彩linux视频教程,尽在51CTO学院:
http://edu.51cto.com/course/courseList/id-48.html

Linux/Unix文件系统索引节点浅析相关推荐

  1. linux的文件系统及节点表

    linux的文件系统及节点表 一  linux的文件系统 1 我们都知道当我们安装linux时会首先给系统分区,然后我们会把分区格式化成EXT3格式的文件系统.那么在linux系统中还有没有其他的文件 ...

  2. Linux中的索引节点、硬连接和连接计数

    索引节点.硬连接和连接计数 索引节点inode:      Linux为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置.系统是通过索引 ...

  3. Linux虚拟文件系统

    从文件 I/O 看 Linux 的虚拟文件系统 1 引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux ...

  4. Linux Ext2文件系统

    介绍 Ext2文件系统全称为Second Extended FileSystem(第二扩展文件系统),既然是第二个那么就存在第一个,第一个就是扩展文件系统 Extended FileSystem.当然 ...

  5. inode索引节点---初识

    听说某人谷歌面试时就被问到了linux下的索引节点是什么? 我一直以为文件名是系统用来识别文件内容的,直到初识inode,这恰恰说明我的基础知识之薄弱. 参考 http://blog.csdn.net ...

  6. linux vfs 根节点名称,Linux:文件,目录项,索引节点,超级块,VFS,具体文件系统...

    [笔记:http://m.blog.csdn.net/blog/zhouzhou135] 在了解文件系统之前,先了解磁盘格式化的知识. 所以要理解文件系统的数据结构,要从两个方向来理解: 1:磁盘中的 ...

  7. 索引节点inode: Linux内核文件系统之(inode)

    inode译成中文就是索引节点,它用来存放档案及目录的基本信息,包含时间.档名.使用者及群组等. static int eachreg_open(struct inode *inode, struct ...

  8. linux虚拟文件系统浅析

    linux虚拟文件系统浅析 虚拟文件系统(VFS) 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细 ...

  9. Linux 索引节点 inode

    1.inode 简介 理解 inode,要从文件储存说起.文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存 512 字节(相当于 0.5KB).操作系 ...

  10. linux查看文件节点,Linux之索引节点inode(index node)

    inode就是索引节点,它用来存放档案及目录的基本信息,包含时间.档名.使用者及群组等. inode 是 UNIX/Linux 操作系统中的一种数据结构,其本质是结构体 它包含了与文件系统中各个文件相 ...

最新文章

  1. 部署nodejs项目到服务器的一些总结
  2. Vijos p1097 合并果子
  3. android用来显示界面的组件,Android 自学之基本界面组件(上)
  4. Flex(try-catch-finally)机制
  5. 三菱mode bus tcp通讯_绍兴三菱MR-J4-70B
  6. PLC-Recorder通过Modbus TCP/Modbus RTU转换器实现RS-485总线设备采集的方法
  7. 印象最深刻的三位老师、难忘的往事
  8. IOS引入百度统计热力图崩溃
  9. Android studio 中使用GeenDao
  10. CyberSecurity Knowledge Base笔记
  11. 尚医通 (三十六) --------- 微信支付
  12. 自然数的皮亚诺公理系統
  13. python牛刀小试 - 两数之和
  14. “数据”到底是资产还是负债?
  15. 【C#】System.MissingMethodException:Method not found: 'xxx.get_xxx()'
  16. 标准C语言基础知识1
  17. 洛谷4895 BZOJ3162 独钓寒江雪 树形dp 树哈希
  18. 狂神mysql笔记 md_MyBatis狂神总结笔记
  19. c一些基本算法和公式
  20. 小学计算机小组期末总结范文,第一学期小学三年级级组工作总结

热门文章

  1. JavaWeb项目打包运行
  2. 2022张宇考研基础30讲 第八讲 一元函数积分学的概念与计算
  3. ojdbc maven
  4. SQLServer 删除表中重复数据(除ID不同的)
  5. Ubuntu 18.04 安装无线网卡
  6. 论学好数学对机器学习的重要性
  7. 数学建模——确定性数学方法
  8. 为什么php在网页中不显示,为什么网页显示不出php代码_后端开发
  9. css学习笔记-黑马程序员前端视频
  10. PDMS二次开发(十)——螺栓材料统计功能重构开发介绍