Видимо, это можно сделать проще udevadm
, и я только что узнал, как.
Чтобы получить DEVNAME
от udevadm
вас нужно только сделать:
udevadm info -rq name $PATH
Например, если вы хотите знать /dev
имя /sys/dev/char/5:1
вы могли бы сделать:
udevadm info -rq name /sys/dev/char/5:1
ВЫХОД
/dev/console
Можно -r
указать --root
путь ed - без него приведенный выше результат будет доступен только для чтения console
. -q
Параметр определяет базу данных , --query
и она принимает операнд name
здесь - потому что мы хотим DEVNAME
.
Очень простое средство нахождения пути к символу и / или блочному устройству с учетом только старшего: младшие числа могут выглядеть так:
mmdev() for d in /sys/dev/[cb]*/$1:$2
do [ -e "$d" ] || return
printf %c:%s: "${d#/*/*/}" "${d##*/}"
udevadm info -rq name "$d"
done
Так работает:
mmdev 8 0
печатает ...
b:8:0:/dev/sda
Вот первый, который я написал.
majminpath() {
set -- ${1##*[!0-9]*} ${2##*[!0-9]*}
udevadm info --export-db |
sed 's|^[^=]*DEVNAME=||
\|^[^/]|!h;/MAJOR=/N
\|='"$1\n.*=${2?}"'$|!d;g'
}
Это просто сканирует udevadm info --export-db
выходные данные для соответствующих номеров. Вывод выглядит так:
P: /devices/virtual/vc/vcsa4
N: vcsa4
E: DEVNAME=/dev/vcsa4
E: DEVPATH=/devices/virtual/vc/vcsa4
E: MAJOR=7
E: MINOR=132
E: SUBSYSTEM=vc
P: /devices/virtual/vc/vcsa5
N: vcsa5
E: DEVNAME=/dev/vcsa5
E: DEVPATH=/devices/virtual/vc/vcsa5
E: MAJOR=7
E: MINOR=133
E: SUBSYSTEM=vc
#...and so on
Рабочий процесс похож на:
попытаться снять [^=]*DEVNAME=
строку с головы каждой строки
если строка не имеет первого символа или ее первый символ /
копирует эту строку в h
старое пространство
если строка совпадает, MAJOR=
добавьте N
строку ввода ext в пространство шаблона
если в шаблонном пространстве есть 2 строки, которые совпадают, =$1\n.*=$2$
скопируйте h
старое пространство в шаблонное пространство и выполните автоматическую печать; иначе удалите пробел
Так что если я сделаю:
majminpath 7 133 ; majminpath 8 0 ; majminpath 8 1
ВЫХОД
/dev/vcsa5
/dev/sda
/dev/sda1
Но, как указывает @xae, устройства блочного / символьного типа могут совместно использовать комбинации maj: min, и это может привести к выводу нескольких путей за вызов.