Ternyata itu bisa dilakukan lebih sederhana dengan udevadm
, dan saya baru tahu caranya.
Untuk mendapatkan DEVNAME
dari yang udevadm
Anda butuhkan hanya lakukan:
udevadm info -rq name $PATH
Misalnya, jika Anda ingin tahu /dev
nama /sys/dev/char/5:1
yang akan Anda lakukan:
udevadm info -rq name /sys/dev/char/5:1
KELUARAN
/dev/console
The -r
pilihan adalah untuk menentukan --root
jalur ed - tanpa itu hasilnya di atas akan hanya membaca console
. The -q
pilihan menentukan database --query
dan dibutuhkan operan name
di sini - karena kami ingin DEVNAME
.
Cara yang sangat sederhana untuk menemukan jalur ke perangkat arang dan / atau blok yang hanya diberi nilai mayor: minor mungkin terlihat seperti:
mmdev() for d in /sys/dev/[cb]*/$1:$2
do [ -e "$d" ] || return
printf %c:%s: "${d#/*/*/}" "${d##*/}"
udevadm info -rq name "$d"
done
Jadi berlari:
mmdev 8 0
cetakan ...
b:8:0:/dev/sda
Ini yang pertama saya tulis.
majminpath() {
set -- ${1##*[!0-9]*} ${2##*[!0-9]*}
udevadm info --export-db |
sed 's|^[^=]*DEVNAME=||
\|^[^/]|!h;/MAJOR=/N
\|='"$1\n.*=${2?}"'$|!d;g'
}
Ini hanya memindai udevadm info --export-db
output untuk nomor yang cocok. Outputnya terlihat seperti:
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
Alur kerjanya seperti:
mencoba untuk mengupas [^=]*DEVNAME=
string dari kepala setiap baris
jika suatu garis tidak memiliki karakter pertama atau karakter pertamanya adalah /
salin garis itu di atas h
ruang lama
jika suatu baris cocok MAJOR=
tambahkan N
baris input ekst ke ruang pola
jika ada 2 garis dalam ruang pola yang cocok =$1\n.*=$2$
maka salin h
ruang lama di atas ruang pola dan cetak-otomatis; lain menghapus ruang pola
Jadi jika saya lakukan:
majminpath 7 133 ; majminpath 8 0 ; majminpath 8 1
KELUARAN
/dev/vcsa5
/dev/sda
/dev/sda1
Tetapi, seperti yang ditunjukkan oleh @xae, perangkat tipe blok / char dapat berbagi kombinasi maj: min, dan karenanya ini mungkin mencetak lebih dari satu jalur per panggilan.