Linux操作系统中的文件数据除了内容之外,还有非常多的属性,比如文件权限,创建者,文件属性等。文件系统一般会将这两部分内容区分为inode和block中。
block:
Linux一切皆文件,文件都是存储在硬盘上,硬盘的最小存储单位叫做扇区,每个扇区存储512字节(约为0.5kb)。操作系统读取硬盘时,并不是逐个扇区读取,这样效率很低,而是一次性同时读取多个扇区,即一次性读取一个块block。这种由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block。
inode:
Linux文件数据存储在块中,那文件的元信息也需要有地方存放,例如文件的创建者、创建日期、大小等。这种存储文件元信息的区域就叫做inode,也可以成为索引节点。因此,一个文件必须占用一个inode,但至少占用一个block。
inode包含很多的文件元信息,但不包含文件名,例如:字节数、属主UserID、属组GroupID、读写执行权限、时间戳等。而文件名存放在目录当中,但Linux系统内部不使用文件名,而是使用inode号码识别文件。对于系统来说文件名只是inode号码便于识别的别称。
用户通过文件名打开文件,实际上,系统内部将这个过程分为三步:
系统找到这个文件名对应的inode号码通过inode号码,获取inode信息,看用户是否具有访问的权限,有就指向对应的数据block,没有就返回权限拒绝根据inode信息,找到文件数据所在的block,并读出数据
1、查看文件的inode信息,如图:
stat filename or ls -li filename # 两条命令都可以

inode也会占用硬盘空间,因此系统格式化的时候,自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。每个inode的大小,一般是128字节或256字节。一般我们不需要关注单个inode的大小,而是需要重点关注inode总数。inode总数在格式化的时候就确定了,并随着新建文件或者减少文件或者硬链接的变化而变化。
2、df -i 查看硬盘分区的inode总数和已使用情况,如图:

由于inode与文件名分离,因此Linux系统具备以下几种情况:
(1)、文件名包含特殊字符,可能无法正常删除,如图:

此时可以通过inode来删除此乱码文件,先查看inode信息,如图:

通过如下命令删除两个乱码文件,如下:
find -inum 节点号 -delete

(2)、移动文件或重命名文件,只是改变文件名,不影响inode号码,如图:

(3)、打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
inode 雨量不足:
由于在系统分区的inode总数就已经固定,并且每个文件必须有一个inode,因此就有可能发生inode节点用光,但硬盘空间还剩不少,却无法创建新文件。此时就需要找出占用大量inode的文件,删除即可,或者硬链接数量过多也可以删除不需要的硬链接。




