当我检查文件的状态时:
[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
设备和142368
Inode 中的含义是什么?
答案1
设备:
Device: fd01h/64769d
告诉您检查的文件位于哪个设备上。该值表示为H十六进制 ( fd01
) 和d十进制(64769
)数。
现在每个设备都可以通过其主编号和次编号. 主设备号标识一类设备,这些设备通常使用相同的驱动程序/内核模块,而次设备号则标识该类设备中的一个唯一设备。
请注意,在这种情况下,“设备”不一定是硬件设备,它包括虚拟设备。 里面的所有内容实际上都是设备(目录和符号链接除外),并且具有主编号和次编号。您可以使用(简化的示例输出)/dev
自行检查它们:ls -l /dev
drwxr-xr-x 20 root root 4560 Nov 14 00:03 ./
drwxr-xr-x 27 root root 4096 Nov 2 03:30 ../
brw-rw---- 1 root disk 8, 0 Nov 14 01:06 sda
brw-rw---- 1 root disk 8, 1 Nov 14 01:06 sda1
brw-rw---- 1 root disk 8, 2 Nov 14 01:06 sda2
brw-rw---- 1 root disk 8, 3 Nov 14 01:06 sda3
brw-rw---- 1 root disk 8, 16 Nov 14 01:06 sdb
brw-rw---- 1 root disk 8, 17 Nov 14 01:06 sdb1
brw-rw---- 1 root disk 8, 18 Nov 14 01:06 sdb2
crw------- 1 root root 10, 224 Nov 13 15:53 tpm0
crw------- 1 root root 253, 65536 Nov 13 15:53 tpmrm0
crw-rw-rw- 1 root tty 5, 0 Nov 14 01:06 tty
crw--w---- 1 root tty 4, 0 Nov 13 15:53 tty0
crw--w---- 1 root tty 4, 1 Nov 13 15:53 tty1
crw-rw-rw- 1 root root 1, 5 Nov 13 15:53 zero
这里的第四列和第五列显示主号码和次号码。对于普通硬盘,主号码为 8,而每个磁盘和分区都有自己独特的次号码。
现在回到stat
输出,十六进制设备号为fd01
。这可以分成两个字节,fd
(十进制 253)是主编号部分,01
(十进制 1)是次编号。我们可以尝试在此列表但它仅被归类为“保留用于动态分配”和“本地/实验用途”的数字范围的一部分。我猜是加密或 LVM 卷。
无论如何,您可以使用lsblk
并检查其中列出的哪个存储块设备与此主编号和次编号相对应。您将看到这当然是您所检查的文件实际存储的设备/分区/文件系统。
也可以看看:stat 命令输出中的设备编号
索引节点:
在 Unix 文件系统(例如 Ubuntu 的默认文件系统 ext4)上,每个文件系统对象(例如文件和目录)都由所谓的“inode”描述。它基本上是一种数据结构,用于存储磁盘上的哪些块属于该对象,以及元数据(例如时间戳)以及所有者和权限信息。每个对象至少有一个 inode,每个 inode 都只属于一个文件系统对象。
您在输出中看到的数字stat
是此文件的 inode 的编号或索引,因此它可以让您唯一地标识该文件。例如,debugfs
可以使用该数字来显示此数字与您通过搜索路径检查的文件正确对应,只需知道数字即可。
也可以看看:Inode(维基百科)