Мабуть, це можна зробити простіше 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
ред шлях - без нього результат вище , буде тільки для читання console
. -q
Параметр визначає базу даних , --query
і вона приймає операнд name
тут - бо ми хочемо DEVNAME
.
Дуже простий засіб пошуку шляху до char та / або блокування пристрою, що задається лише основним: незначні числа можуть виглядати так:
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, пристрої типу блок / шар можуть спільно використовувати май: min комбінації, і, можливо, це може надрукувати більше одного шляху за виклик.