Apparentemente può essere fatto più semplicemente con udevadm
, e ho appena scoperto come.
Per ottenere il DEVNAME
da udevadm
devi solo fare:
udevadm info -rq name $PATH
Ad esempio, se volessi sapere il /dev
nome per quello /sys/dev/char/5:1
che dovresti fare:
udevadm info -rq name /sys/dev/char/5:1
PRODUZIONE
/dev/console
L' -r
opzione è specificare un --root
percorso ed - senza di esso il risultato sopra sarebbe di sola lettura console
. L' -q
opzione specifica un database --query
e prende l'operando name
qui - perché vogliamo DEVNAME
.
Un modo molto semplice per trovare il percorso di un dispositivo char e / o block dato solo il maggiore: i numeri minori potrebbero apparire come:
mmdev() for d in /sys/dev/[cb]*/$1:$2
do [ -e "$d" ] || return
printf %c:%s: "${d#/*/*/}" "${d##*/}"
udevadm info -rq name "$d"
done
Quindi in esecuzione:
mmdev 8 0
stampe ...
b:8:0:/dev/sda
Ecco il primo che ho scritto.
majminpath() {
set -- ${1##*[!0-9]*} ${2##*[!0-9]*}
udevadm info --export-db |
sed 's|^[^=]*DEVNAME=||
\|^[^/]|!h;/MAJOR=/N
\|='"$1\n.*=${2?}"'$|!d;g'
}
Questo scansiona solo l' udevadm info --export-db
output per i numeri corrispondenti. L'output è simile a:
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
Il flusso di lavoro è simile a:
tenta di rimuovere la [^=]*DEVNAME=
stringa dalla testa di ogni riga
se una riga non ha un primo carattere o il suo primo carattere è /
copiarla su h
uno spazio vecchio
se una riga corrisponde alla MAJOR=
riga di N
input ext ext allo spazio del pattern
se ci sono 2 linee nello spazio del motivo che corrispondono, =$1\n.*=$2$
quindi copia il h
vecchio spazio sopra lo spazio del modello e stampa automatica; altrimenti elimina lo spazio modello
Quindi se lo faccio:
majminpath 7 133 ; majminpath 8 0 ; majminpath 8 1
PRODUZIONE
/dev/vcsa5
/dev/sda
/dev/sda1
Ma, come sottolinea @xae, i dispositivi di tipo block / char possono condividere combinazioni maj: min, e quindi questo potrebbe probabilmente stampare più di un percorso per chiamata.