Anscheinend kann es einfacher gemacht werden udevadm, und ich habe gerade herausgefunden, wie.
Um das DEVNAMEvon udevadmIhnen zu bekommen , müssen Sie nur Folgendes tun:
udevadm info -rq name $PATH
Wenn Sie beispielsweise den /devNamen wissen möchten, für den /sys/dev/char/5:1Sie Folgendes tun würden:
udevadm info -rq name /sys/dev/char/5:1
AUSGABE
/dev/console
Die -rOption besteht darin, einen --rooted-Pfad anzugeben - ohne diesen wäre das obige Ergebnis schreibgeschützt console. Die -qOption gibt eine Datenbank an --queryund nimmt hier den Operanden name- weil wir das wollen DEVNAME.
Ein sehr einfaches Mittel, um den Pfad zu einem Zeichen- und / oder Blockgerät zu finden, wenn nur die Haupt-: Nebenzahlen wie folgt aussehen:
mmdev() for d in /sys/dev/[cb]*/$1:$2
do [ -e "$d" ] || return
printf %c:%s: "${d#/*/*/}" "${d##*/}"
udevadm info -rq name "$d"
done
Also rennen:
mmdev 8 0
druckt ...
b:8:0:/dev/sda
Hier ist der erste, den ich geschrieben habe.
majminpath() {
set -- ${1##*[!0-9]*} ${2##*[!0-9]*}
udevadm info --export-db |
sed 's|^[^=]*DEVNAME=||
\|^[^/]|!h;/MAJOR=/N
\|='"$1\n.*=${2?}"'$|!d;g'
}
Dadurch wird nur die udevadm info --export-dbAusgabe nach übereinstimmenden Nummern durchsucht . Die Ausgabe sieht aus wie:
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
Der Workflow ist wie folgt:
Versuchen Sie, die [^=]*DEVNAME=Zeichenfolge vom Kopf jeder Zeile zu entfernen
Wenn eine Zeile kein erstes Zeichen enthält oder das erste Zeichen /diese Zeile über das halte Leerzeichen kopiert
Wenn eine Zeile übereinstimmt, MAJOR=fügen Sie die Next-Eingabezeile an den Musterbereich an
Wenn der Musterraum zwei Zeilen enthält, die übereinstimmen, =$1\n.*=$2$kopieren Sie den halten Raum über den Musterraum und drucken Sie ihn automatisch. Andernfalls löschen Sie den Musterbereich
Also wenn ich das tue:
majminpath 7 133 ; majminpath 8 0 ; majminpath 8 1
AUSGABE
/dev/vcsa5
/dev/sda
/dev/sda1
Wie @xae hervorhebt, können Geräte vom Typ Block / Char Maj: Min-Kombinationen gemeinsam nutzen, sodass möglicherweise mehr als ein Pfad pro Aufruf gedruckt wird.