Rõ ràng nó có thể được thực hiện đơn giản hơn với udevadm
, và tôi đã tìm ra cách.
Để có được DEVNAME
từ udevadm
bạn chỉ cần làm:
udevadm info -rq name $PATH
Chẳng hạn, nếu bạn muốn biết /dev
tên cho /sys/dev/char/5:1
bạn:
udevadm info -rq name /sys/dev/char/5:1
ĐẦU RA
/dev/console
Các -r
tùy chọn là để xác định một --root
con đường ed - mà không có nó kết quả trên sẽ chỉ đọc console
. Các -q
tùy chọn chỉ định một cơ sở dữ liệu --query
và phải mất các toán hạng name
ở đây - bởi vì chúng tôi muốn DEVNAME
.
Một phương tiện rất đơn giản để tìm đường dẫn đến thiết bị char và / hoặc khối chỉ được cung cấp chính: số phụ có thể trông như sau:
mmdev() for d in /sys/dev/[cb]*/$1:$2
do [ -e "$d" ] || return
printf %c:%s: "${d#/*/*/}" "${d##*/}"
udevadm info -rq name "$d"
done
Vì vậy, chạy:
mmdev 8 0
in ...
b:8:0:/dev/sda
Đây là bài đầu tiên tôi viết.
majminpath() {
set -- ${1##*[!0-9]*} ${2##*[!0-9]*}
udevadm info --export-db |
sed 's|^[^=]*DEVNAME=||
\|^[^/]|!h;/MAJOR=/N
\|='"$1\n.*=${2?}"'$|!d;g'
}
Điều này chỉ quét udevadm info --export-db
đầu ra cho các số phù hợp. Đầu ra trông như sau:
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
Quy trình công việc giống như:
cố gắng tước [^=]*DEVNAME=
chuỗi từ đầu của mỗi dòng
nếu một dòng không có ký tự đầu tiên hoặc ký tự đầu tiên của nó được /
sao chép dòng đó trên h
không gian cũ
nếu một dòng khớp với MAJOR=
nối thêm N
dòng đầu vào ext vào không gian mẫu
nếu có 2 dòng trong không gian mẫu khớp với nhau =$1\n.*=$2$
thì sao chép h
không gian cũ trên không gian mẫu và tự động in; khác xóa không gian mẫu
Vì vậy, nếu tôi làm:
majminpath 7 133 ; majminpath 8 0 ; majminpath 8 1
ĐẦU RA
/dev/vcsa5
/dev/sda
/dev/sda1
Nhưng, như @xae chỉ ra, các thiết bị kiểu khối / char có thể chia sẻ các kết hợp chính: tối thiểu và do đó, điều này có thể có thể in nhiều hơn một đường dẫn cho mỗi cuộc gọi.