linux根目录索引节点,Linux/Unix 文件系统索引节点浅析

文件大小(以字节为单位)

(存放文件的)设备标识符

(文件所有者的)用户标识符

用户组标识符

文件模式(所有者、用户组及其他人对于文件的读取有怎样的权限)

扩展属性(如 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),指向一个由多个指针构成的区块,后者的指针又指向一个由多个指针构成的区块,其指针又指向另一个由多个指针构成的区块,这一区块的指针又指向文件数据的区块。

索引节点指针结构可以用一张图表示如下:

2b412fb6e4127bcfc8742230746fd23d.gif

常见问题集解

问:请用一句话来说明一下索引节点是什么?

答:索引节点是传统类 Unix 文件系统上的数据结构,储存了常规文件、目录或其他文件系统目标的基本信息。

问:如何查看文件或目录的索引节点号码?

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

问:如何查看文件系统上的索引节点的总数和已用数?

答:“df -i”命令会显示索引节点总数、已用数和未使用数的统计数据。

问:为什么索引节点信息不包含文件名称?

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

问:如果索引节点不包含链接会怎么样?

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

问:在移动文件时索引节点会发生变化吗?

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

问:在创建新文件或目录时会创建新的索引节点吗?

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

问:可以通过索引节点号码找到文件吗?

答:可以。使用如下命令(其中 inode-number 为索引节点号码):

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

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

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

参考链接

来自:http://planet.linuxdeepin.com/2012/10/18/understanding-linux-unix-filesystem-inode-zh/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值