분명히 더 간단하게 할 수 있으며 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
패턴 공간에 일치하는 두 줄이 있으면 패턴 공간 위에 이전 공간 =$1\n.*=$2$
을 복사 h
하고 자동 인쇄합니다. 그렇지 않으면 패턴 공간을 삭제하십시오.
그래서 내가하면 :
majminpath 7 133 ; majminpath 8 0 ; majminpath 8 1
산출
/dev/vcsa5
/dev/sda
/dev/sda1
그러나 @xae가 지적한 것처럼 블록 / 문자 유형 장치는 maj : min 조합을 공유 할 수 있으므로 호출 당 둘 이상의 경로를 인쇄 할 수 있습니다.