Najwyraźniej można to zrobić prościej udevadm
, a ja właśnie dowiedziałem się, jak to zrobić.
Aby uzyskać DEVNAME
od udevadm
, musisz tylko:
udevadm info -rq name $PATH
Na przykład, jeśli chcesz poznać /dev
nazwę /sys/dev/char/5:1
, którą możesz zrobić:
udevadm info -rq name /sys/dev/char/5:1
WYNIK
/dev/console
-r
Opcją jest, aby określić --root
ścieżkę Ed - bez niego wynik powyżej będzie tylko do odczytu console
. -q
Opcja określa bazę danych --query
i przyjmuje argument name
tutaj - bo chcemy DEVNAME
.
Bardzo prosty sposób znalezienia ścieżki do urządzenia char i / lub block, biorąc pod uwagę tylko główne: liczby mniejsze:
mmdev() for d in /sys/dev/[cb]*/$1:$2
do [ -e "$d" ] || return
printf %c:%s: "${d#/*/*/}" "${d##*/}"
udevadm info -rq name "$d"
done
Tak działa:
mmdev 8 0
drukuje ...
b:8:0:/dev/sda
Oto pierwszy, który napisałem.
majminpath() {
set -- ${1##*[!0-9]*} ${2##*[!0-9]*}
udevadm info --export-db |
sed 's|^[^=]*DEVNAME=||
\|^[^/]|!h;/MAJOR=/N
\|='"$1\n.*=${2?}"'$|!d;g'
}
To po prostu skanuje udevadm info --export-db
dane wyjściowe w celu znalezienia pasujących liczb. Dane wyjściowe wyglądają następująco:
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
Przepływ pracy wygląda następująco:
spróbuj usunąć [^=]*DEVNAME=
sznurek z nagłówka każdej linii
jeśli linia nie ma pierwszego znaku lub jego pierwszym znakiem jest /
skopiowanie tej linii nad h
starą spacją
Jeśli linia pasuje MAJOR=
Dołącz N
linię wejściową ext do przestrzeni wzorca
jeśli w obszarze wzorca znajdują się 2 wiersze, =$1\n.*=$2$
skopiuj h
starą przestrzeń nad obszarem wzorca i wydrukuj automatycznie; w przeciwnym razie usuń przestrzeń wzorca
Więc jeśli to zrobię:
majminpath 7 133 ; majminpath 8 0 ; majminpath 8 1
WYNIK
/dev/vcsa5
/dev/sda
/dev/sda1
Ale, jak wskazuje @xae, urządzenia typu blok / char mogą współdzielić kombinacje maj: min, więc może to wydrukować więcej niż jedną ścieżkę na połączenie.