Linux inode

经典面试知识点。


inode:index node,索引节点。

Linux中,文件完整路径(如文件/test1.txt),并不是文件的唯一身份证。

文件的inode编号才是文件的唯一身份证。

创建文件时,会为文件分配一个inode,inode编号是一个数值。


文件的inode信息包括:inode编号、链接数Links、文件大小、创建时间、最后访问时间、修改时间、权限信息等。不包括文件路径。


1 查看inode信息

查看inode编号的方法一

stat文件名

例:

stat /xiaobu1.txt

img

Inode编号为73040。

并且链接数Links为1。


说明:上述各项目信息中,除了文件名,其它信息都存储在Inode区。


查看inode编号的方法二

ls -i 文件名

-i选项表示查看文件的inode编号。


准备文件

rm -rf /xiaobu1.txt
touch /xiaobu1.txt

查看inode编号

ls -i /xiaobu1.txt

img

其中73040为文件/test1.txt的inode编号。


2 通过inode查询文件名称

find 路径 -inum inode编号

在路径下搜索inode编号,显示文件名。


查询inode编号73040的文件

img

这里一个inode编号对应一个文件。

当创建硬链接后,这里会出现对应多个文件。


3 通过inode编号删除文件

在find命令的基础上加选项-delete。

find 路径 -inum inode编号 -delete

在指定路径下搜索inode编号,并删除搜索到的文件


删除上述创建的xiaobu1.txt文件(inode编号 73040)

find / -inum 73040 -delete

img

通过ls -i查看文件/xiaobu1.txt已经不存在;

通过find -inum查看inode编号73040已经不存在对应的文件。


应用场景

有些文件名称使用特殊字符,无法直接通过命令删除,可以通过inode编号的方式来删除文件。


4 inode原理

文件的三个逻辑区域

文件的三个逻辑区域:1、文件内容区;2、文件inode区;3、文件路径区

img

文件内容对应唯一的inode编号;

一个inode编号对应多个文件路径。即通过硬链接创建多个路径。


磁盘的inode

磁盘在格式化时会为Inode区预留一定的空间,并且设定Inode数量。当创建文件时,会占用Inode,直到消耗完。


查看磁盘的inode数量

df -i

img

Inodes表示Inode总数,IUsed表示已使用数量,IFree表示可使用数量。


创建文件/xiaobu2.txt,再次观察inode数量。

img

已使用数量加1。


文件链接数与删除

当文件链接数Links为0时,文件才彻底删除。

首次创建文件时,文件链接数为1;

再次创建硬链接时,文件链接数加1;

每次删除文件,文件链接数减1;

当链接数为1,再次删除时,则文件彻底删除。


示例

步骤1:首次创建stat查看链接数,Links为1。

rm -rf /xiaobu1.txt
echo test1 > /xiaobu1.txt
stat /xiaobu1.txt

img


步骤2:建立第1个硬链接,再次查看链接数

link /xiaobu1.txt /xiaobu1_link1.txt
stat /xiaobu1.txt

img

stat /xiaobu1.txt,除文件名不同,其它数据相同。


步骤3:建立第2个硬链接,再次查看链接数

ln /xiaobu1.txt /xiaobu1_link2.txt
stat /xiaobu1.txt

Links结果为3。


步骤4:删除创建文件

rm -rf /xiaobu1.txt

Links结果为2。


cat查看/xiaobu1_link1.txt,文件与数据仍然在。

cat /xiaobu1_link1.txt

查看inode对应文件

find / -inum 73040

img


步骤5:删除第1个硬链接

rm -rf /xiaobu1_link1.txt

Links为1。

img


步骤6:删除第2个硬链接

rm -rf /xiaobu1_link2.txt

img

文件已经彻底删除。