索引节点inode

1、什么是inode

操作系统(Operating System)的文件数据除了文件的实际内容外,还包含了很多的文件属性。通常文件系统会把这些实际的内容存放在date block中,而文件属性存放在inode(索引节点)中。inode就是一个记录文件属性以及文件实际数据存放在那几个block的容器。

2、inode的内容

文件的访问权限; 文件的属主和属组; inode编号; 文件的大小; 文件的时间戳(ctime/atime/mtime); 文件真正内容的所存放数据块指向; 等等其他相关属性。 文件的inode内容可以使用“stat”命令查看:如下图 新手学linux命令之索引节点inode

3、inode的大小

inode的数量和大小一般在文件系统格式化时已经固定了。每个inode节点大小一般是128字节或256字节,每个文件都仅会占用一个inode,因此文件系统能创建文件数量跟inode数量有关。date block的大小通常分为1k、2k、4k三种,因此一个文件数据大小要是小于数据块,那么就会造成磁盘的浪费。 使用命令“df -i”可以查看文件系统的inode使用情况:如下图 新手学linux命令之索引节点inode

4、inode号码与directory

每个文件都有一个inode号码,组成了inode表,操作系统读取文件是需要找到其inode号,并分析inode所记录的权限与用户是否符合,只有符合了才会实际读取date block里的内容。 directory也是一种文件,其内容包括两部分:directory下文件(子目录)的文件名和该文件名对应的inode号码。假如根的字母目录A下有一个文件B,那么读取B文件内容的系统操作如下,系统从inode表中找到目录A的inode号(假如1000),打开A目录文件,并读取文件B的inode号(假如20000),然后回到inode表找到与文件B对应的inode号(20000),再通过找到的inode号(20000)来读取其所指向的date block内容。 使用命令“ls -i”可以查看文件的inode号,如下图 新手学linux命令之索引节点inode

5、inode的结构

我们知道inode的大小只有128byte或256byte,而inode的记录一个date block号就要占用4个byte,如果一个400MB的文件,数据块大小为4KB,那么至少有10万条block号码的记录,inode哪有这么大的空间记录信息?因此系统会将inode记录block号码的区域定义为12个直接块指针,一个间接块指针,一个双重间接块指针,一个三重间接块指针记录区。如下图 

新手学linux命令之索引节点inode