stat test.log
File: `test.log'
Size: 573 Blocks: 8 IO Block: 4096 regular file
Device: 804h/2052d Inode: 7091301 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1001/ abc) Gid: ( 1001/ abc)
Access: 2010-11-29 17:56:22.000000000 -0800
Modify: 2010-11-29 17:56:22.000000000 -0800
Change: 2010-11-29 17:56:22.000000000 -0800
在上面的统计信息中, 设备 条目表示什么?
答案 0 :(得分:17)
这是主要和次要设备编号组合成文件所在设备的一个值(十六进制和十进制)。
对于您的示例,804h
是主要设备8,次要设备4.如果您在该文件所在的目录中运行df .
,您将获得设备名称,例如/dev/sda1
。如果您要ls -al /dev/sda1
,它会显示设备编号。这是一个例子:
pax$ stat newfile # note device 801h, hex 801 = 2049 decimal
File: 'newfile'
Size: 2097152 Blocks: 4096 IO Block: 4096 regular file
Device: 801h/2049d Inode: 2888080 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ pax) Gid: ( 1000/ pax)
Access: 2010-11-29 07:32:22.011271661 +0800
Modify: 2010-08-30 15:43:14.286796827 +0800
Change: 2010-08-30 15:43:14.286796827 +0800
pax$ df . # to get current device mount
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 470301088 182471788 263939332 41% /
pax$ ls -al /dev/sda1 # to get major/minor = 8/1
brw-rw---- 1 root disk 8, 1 2010-11-30 07:02 /dev/sda1
答案 1 :(得分:14)
# stat tool
File: `tool'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 801h/2049d Inode: 671689 Links: 3
# ls -l /dev/sda*
brw-rw---- 1 root disk 8, 0 2010-08-16 14:43 /dev/sda
brw-rw---- 1 root disk 8, 1 2010-08-16 14:43 /dev/sda1
brw-rw---- 1 root disk 8, 2 2010-08-16 14:43 /dev/sda2
brw-rw---- 1 root disk 8, 5 2010-08-16 14:43 /dev/sda5
在示例中,'tool'(801h)位于/ dev / sda1(主设备号为8,次设备号为1),这是/ dev / sda中的第一个分区。
答案 2 :(得分:11)
正如此处所写,来自man 2 stat
,
st_dev字段描述了此文件所在的设备。 (该 major(3)和minor(3)宏可用于分解设备ID 在这个领域。)
这些宏不是由POSIX定义的,而是在glibc中实现的,例如可以在这里看到:
https://github.com/jeremie-koenig/glibc/blob/master-beware-rebase/sysdeps/generic/sys/sysmacros.h
这些宏的C实现是:
#define major(dev) ((int)(((unsigned int) (dev) >> 8) & 0xff))
#define minor(dev) ((int)((dev) & 0xff))
您可以轻松完成的工作,例如:然后是Python
>>> import os
>>> minor = int(os.stat("/lib").st_dev & 0xff)
>>> major = int(os.stat("/lib").st_dev >> 8 & 0xff)
>>> major, minor
(8, 1)
主要ID标识设备驱动程序,次要ID对物理磁盘以及分区进行编码。对于SCSI磁盘,主要ID始终为8.第一个磁盘上的分区的次要ID介于1和15之间。第二个磁盘上的分区的次要ID介于17和31之间,依此类推。参考:https://www.mjmwired.net/kernel/Documentation/devices.txt
因此,
>>> major, minor
(8, 1)
表示sda1
:sd
(主要8 - > SCSI),a1
(次要1 - >第一个磁盘,第一个分区)。
答案 3 :(得分:1)
stat命令只是stat()系统调用的前端。
来自stat(2)手册页(man 2 stat
)
st_dev字段描述了设备 该文件所在的位置。 (该 major(3)和minor(3)宏可能是 用于分解设备ID 这个领域。)
从0804十六进制表示法得到major = 8(/ dev / sd *)minor = 4。即/ dev / sda4
答案 4 :(得分:-4)
在此804h中指定主要编号,即关联正确的驱动程序代码,而2052d是次要编号,将每个驱动程序映射到特定设备实例。 MAJOR(),MINOR()宏可用于将设备主要和次要编号组合在一起,形成设备编号。