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
Run Code Online (Sandbox Code Playgroud)
在上面的stat o/p中,Device条目表示什么?
pax*_*blo 18
它是主要和次要设备编号组合成文件所在设备的一个值(十六进制和十进制).
对于您的示例,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
Run Code Online (Sandbox Code Playgroud)
Hua*_*Lei 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
Run Code Online (Sandbox Code Playgroud)
在示例中,"工具"(801h)位于/ dev/sda1(主设备号为8,次设备号为1),这是/ dev/sda中的第一个分区.
Jan*_*cke 11
正如已经写在这里,来自man 2 stat,
st_dev字段描述了此文件所在的设备.(主要(3)和次要(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))
Run Code Online (Sandbox Code Playgroud)
你可以轻松地在Python中做些什么
>>> import os
>>> minor = int(os.stat("/lib").st_dev & 0xff)
>>> major = int(os.stat("/lib").st_dev >> 8 & 0xff)
>>> major, minor
(8, 1)
Run Code Online (Sandbox Code Playgroud)
主要ID标识设备驱动程序,次要ID对物理磁盘以及分区进行编码.对于SCSI磁盘,主要ID始终为8.第一个磁盘上的分区的次要ID介于1和15之间.第二个磁盘上的分区的次要ID介于17和31之间,依此类推.参考:https://www.mjmwired.net/kernel/Documentation/devices.txt
因此,
>>> major, minor
(8, 1)
Run Code Online (Sandbox Code Playgroud)
意思是sda1:( sd主要8 - > SCSI),a1(次要1 - >第一个磁盘,第一个分区).
| 归档时间: |
|
| 查看次数: |
17150 次 |
| 最近记录: |