当我检查文件的状态时:
[root@iz2ze9wve43n2nyuvmsfx5z ~]# stat test.py
File: ‘test.py’
Size: 33 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 142368 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-11-09 20:42:30.262438217 +0800
Modify: 2018-11-09 20:42:27.266329005 +0800
Change: 2018-11-09 20:42:27.269329115 +0800
Birth: -
fd01h/64769d
Device 和142368
Inode中的含义是什么?
设备:
Device: fd01h/64769d
告诉您检查的文件在哪个设备上。该值同时表示为h十六进制 (fd01
) 和十进制(64769
) 数。现在每个设备都可以通过其主要和次要编号来识别。主设备号标识一类设备,它们通常使用相同的驱动程序/内核模块,而次设备号标识该类中的唯一设备。
请注意,在这种情况下,“设备”在这里不一定是硬件设备,它包括虚拟设备。里面的所有东西
/dev
实际上都是一个设备(目录和符号链接除外),并且有一个主要和次要编号。您可以自己检查它们ls -l /dev
(缩短的示例输出):这里的第四和第五列显示了主要和次要数字。对于普通硬盘,主编号为 8,每个磁盘和分区都有自己唯一的次编号。
现在回到你的
stat
输出,十六进制设备号是fd01
. 这可以分为两个字节,fd
(十进制 253)是主要数字组件,01
(十进制 1)是次要数字。我们可以尝试在此列表中查找主编号,但它仅被归类为“保留用于动态分配”和“本地/实验使用”的编号范围的一部分。我会猜测加密或 LVM 卷。无论如何,您可以使用
lsblk
并检查列出的哪些存储块设备对应于这个主要和次要编号。您将看到这当然是您检查的文件实际存储的设备/分区/文件系统。另请参阅:stat 命令输出中的设备号
索引节点:
在像 ext4 这样的 Unix 文件系统(Ubuntu 的默认设置)上,每个文件系统对象(如文件和目录)都由所谓的“inode”描述。它基本上是一种数据结构,用于存储磁盘上哪些块属于对象,还存储时间戳等元数据以及所有者和权限信息。每个对象(至少)有一个 inode,每个 inode 恰好属于一个文件系统对象。
您在
stat
输出中看到的数字是此文件 inode 的编号或索引,因此您可以唯一标识该文件。例如debugfs
,可以用来表明这个数字与您通过搜索路径检查的文件正确对应,只知道数字。另请参阅:索引节点(维基百科)