Я хочу знать, что такое спецификатор% T в параметре stat printf и как он получает значение дескриптора файла, т. Е., Fd, 1 выводится с помощью команды ниже.

команда

$> echo `stat -L /dev/mapper/VolGroup-LogVol00 --printf="%T\n"`

ouput: 1 -> который относится к "dm-1"

Заранее спасибо за любой ответ.

1 ответ1

0

Этот формат определяется не bash , а stat(1). На связанной справочной странице %T задает вспомогательный тип устройства в шестнадцатеричном формате. У меня нет вашей конкретной конфигурации, но, например:

$ ls -l /dev/sda2
brw-rw-rw-  1 <user> <group>   8,   2 Oct  9 10:29 sda2
                               ^    ^
                               |    +-- minor device number
                               +------- major device number
$ stat /dev/sda2 --printf='%T\n'
2      <--- This matches the minor  ^ device number
$

Если вы ls -lH /dev/mapper/VolGroup-LogVol00 , вы должны увидеть <something>, 1 в выходных данных - 1 - младший номер устройства.

Изменить, чтобы ответить на ваши дополнительные вопросы:

«Как спецификатор% T смог получить этот вывод»: вызвав системный вызов stat(2). Член st_rdev полученной структуры имеет младший номер устройства, который можно извлечь с помощью minor(3). Для использования в ваших собственных скриптах, просто используйте stat(1) как вы это делали.

«Какова функциональность спецификатора% T в команде bash printf»: он совершенно не связан с устройствами. Согласно вики bash-хакеров, это текущее время в формате strftime(3). Вики приводят пример:

$ printf 'This is week %(%U/%Y)T.\n'
This is week 52/2010.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .