Зная специальный файл устройства старшие и младшие номера в Linux

17

Все файлы в /dev являются специальными файлами ... они представляют устройства компьютера. Они были созданы с помощью системного вызова mknod . Мой вопрос: как я могу узнать несовершеннолетнего и основные цифры, которые были использованы для создания этого специального файла?

    
задан Manuel Aráoz 01.12.2009 в 04:08
источник

5 ответов

26

Список называется Список устройств LANANA Linux , и его администрирует Алан Кокс.

Вы можете найти последнюю копию в Интернете ( прямая ссылка ) или в исходном коде Linux. Его имя в дереве ядра - Documentation/devices.txt .

Чтобы увидеть старшие и младшие номера, которые создали узел в /dev (или любой другой узел устройства в этом отношении), просто используйте ls с опцией -l :

22:26 [email protected]% ls -l /dev/xvd?
brw-rw---- 1 root disk    202,   0 Nov  1 20:31 /dev/xvda
brw-rw---- 1 root disk    202,  16 Nov  1 20:31 /dev/xvdb
brw-rw---- 1 root disk    202,  32 Nov  1 20:31 /dev/xvdc

В этом примере 202 - это старший номер трех устройств, а 0 , 16 и 32 - младшие. b слева указывает, что узел является блочным устройством. Альтернатива - c , символьное устройство:

crw-rw-rw- 1 root tty       5,   0 Nov 22 00:29 /dev/tty
    
ответ дан Jed Smith 01.12.2009 в 04:18
  • эй спасибо! но я спрашивал, как это сделать с помощью командной строки ...: D –  Manuel Aráoz 01.12.2009 в 04:20
  • Что делать по командной строке? Ваш вопрос ничего не говорит о командной строке, кроме mknod. –  Jed Smith 01.12.2009 в 04:21
  • Вы правы. Мне жаль. Во всяком случае, это тот ответ, который я хотел. –  Manuel Aráoz 01.12.2009 в 04:30
  • Я получил, в конце концов. :) –  Jed Smith 01.12.2009 в 04:30
  • Похоже, что домен lanana.org истёк («lanana.org истек 10/10/2012 и ожидает обновления или удаления»). Я надеюсь, что это исправится - похоже, что это может быть немного повторяющейся проблемой: wiki.linuxfoundation.org/en/Minutes_Apr_27_2011 –  Michael Burr 10.05.2012 в 22:53
8
$ ls -l /dev/fd0 /dev/null
brw-rw---- 1 root floppy 2, 0 Nov 22 19:48 /dev/fd0
crw-rw-rw- 1 root root   1, 3 Nov 22 19:48 /dev/null
$ stat -c '%n: %F, major %t minor %T' /dev/fd0 /dev/null
/dev/fd0: block special file, major 2 minor 0
/dev/null: character special file, major 1 minor 3

Большинство номеров устройств фиксированы (то есть /dev/null всегда будет символьным устройством 1:3 ), но в Linux некоторые выделяются динамически.

$ cat /proc/devices
Character devices:
...
 10 misc
...

Block devices:
...
253 mdp
254 device-mapper
$ cat /proc/misc
...
 57 device-mapper
...

Например, в этой системе просто так получается, что /dev/mapper/control будет c:10:57 , а остальная часть /dev/mapper/* будет b:254:* , и это может отличаться от одного цикла загрузки к другому или даже как модули загружаются / выгружаются, а устройства добавляются / удаляются.

Вы можете подробнее изучить эти регистрации устройств в /sys .

$ readlink /sys/dev/block/2:0
../../devices/platform/floppy.0/block/fd0
$ cat /sys/devices/platform/floppy.0/block/fd0/dev
2:0
$ readlink /sys/dev/char/1:3
../../devices/virtual/mem/null
$ cat /sys/devices/virtual/mem/null/dev
1:3
    
ответ дан ephemient 01.12.2009 в 04:52
3

Вы также можете использовать stat.

$ stat -c 'major: %t minor: %T' <file>
    
ответ дан Smith John 19.06.2013 в 01:25
2

Специально для блочных устройств:

$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda       8:0    0   90G  0 disk
├─sda1    8:1    0    4G  0 part [SWAP]
├─sda2    8:2    0    4G  0 part /
    
ответ дан drgnfr 28.10.2015 в 17:43
1

Альтернатива, которая не зависит от stat :

$ cat /sys/class/*/random/dev
1:8
    
ответ дан domen 26.04.2017 в 18:34