Номер устройства в выводе команды stat
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
В статусе o/p выше, что означает запись Устройство?
Ответы
Ответ 1
# 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
В примере "инструмент" (801h) находится в /dev/sda 1 (основной номер устройства - 8, младший номер устройства - 1), этот первый раздел в/dev/sda.
Ответ 2
Это номер основного и младшего устройства, объединенный в одно значение (в шестнадцатеричном и десятичном) устройства, на котором находится файл.
В вашем примере 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
Ответ 3
Как уже было написано здесь, из man 2 stat
,
Поле st_dev описывает устройство, на котором находится этот файл. (The мажорные (3) и второстепенные (3) макросы могут быть полезны для разложения идентификатора устройства в этом поле.)
Эти макросы не определены 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)
Основной идентификатор идентифицирует драйвер устройства, младший идентификатор кодирует физический диск, а также раздел. В случае дисков SCSI основной идентификатор всегда 8. Разделы на первом диске имеют младший идентификатор от 1 до 15. Разделы на втором диске имеют младший идентификатор от 17 до 31 и т.д. Ссылка: https://www.mjmwired.net/kernel/Documentation/devices.txt
Следовательно,
>>> major, minor
(8, 1)
означает sda1
: sd
(основной 8 → SCSI), a1
(младший 1 → первый диск, первый раздел).
Ответ 4
Команда stat - это просто интерфейс системного вызова stat().
Из справочной страницы stat (2) (man 2 stat
)
Поле st_dev описывает устройство на котором находится этот файл. (The основные (3) и второстепенные (3) макросы могут быть полезно разложить идентификатор устройства в это поле.)
Из шестнадцатеричной нотации 0804 вы получаете major = 8 (/dev/sd *) minor = 4. то есть/dev/sda4
Ответ 5
В этом 804h указывается основное число, то есть связать правильный код драйвера, а 2052d - это небольшое число, сопоставляющее каждый драйвер с конкретным экземпляром устройства.
MAJOR(), MINOR() будут использоваться для получения основного и младшего числа устройств вместе, они образуют номер устройства.