udev
udev ist der Gerätemanager des Linux-Kernels. Er reagiert auf Kernel-Events
(Geräte ein-/ausgesteckt, erkannt beim Booten) und führt konfigurierbare Aktionen aus:
Kernel-Modul laden, /dev-Eintrag erstellen, Berechtigungen setzen, Symlinks anlegen.
Architektur
Abschnitt betitelt „Architektur“Kernel erkennt Gerät │ │ uevent (Netlink-Socket) ▼ udevd (Daemon) │ │ durchsucht Regeln in: │ /usr/lib/udev/rules.d/ ← Distributions-Regeln (nicht editieren) │ /etc/udev/rules.d/ ← eigene Regeln │ ▼ Aktionen ausführen: - Kernel-Modul laden (MODALIAS) - /dev/name erstellen - Symlink anlegen - Berechtigungen setzen - Programm ausführenRegeln werden in aufsteigender Reihenfolge nach Dateiname ausgeführt (z. B. 10-... vor 90-...).
Geräte-Attribute auslesen
Abschnitt betitelt „Geräte-Attribute auslesen“Bevor eine Regel geschrieben werden kann, müssen die Attribute des Geräts bekannt sein:
# Gerät über /sys-Pfad abfragenudevadm info /sys/class/net/enp3s0udevadm info /sys/block/sda
# Vollständige Attribut-Hierarchie (für Regeln)udevadm info --attribute-walk /sys/class/net/enp3s0udevadm info --attribute-walk /sys/bus/usb/devices/1-2Die --attribute-walk-Ausgabe zeigt alle ATTRS{...}-Werte auf jedem Level der
Gerätehierarchie — genau die Schlüsselwörter, die in Regeln verwendet werden.
Rule-Syntax
Abschnitt betitelt „Rule-Syntax“Jede Regel besteht aus Bedingungen (Matching) und Aktionen:
# KommentarSUBSYSTEM=="net", ATTR{address}=="00:11:22:33:44:55", NAME="eth-intern"Matching-Schlüsselwörter:
| Schlüsselwort | Bedeutung |
|---|---|
SUBSYSTEM | Geräte-Subsystem (net, block, usb, …) |
KERNEL | Kernel-Gerätename (sda, ttyUSB*, …) |
ATTR{name} | sysfs-Attribut des Geräts |
ATTRS{name} | sysfs-Attribut eines Elterngeräts |
ENV{name} | Umgebungsvariable |
ACTION | Aktion (add, remove, change) |
Aktions-Schlüsselwörter:
| Schlüsselwort | Bedeutung |
|---|---|
NAME | Name des /dev-Eintrags |
SYMLINK | zusätzlicher Symlink in /dev |
MODE | Dateiberechtigung (oktal) |
OWNER / GROUP | Besitzer/Gruppe |
RUN | Programm ausführen |
LABEL / GOTO | Sprünge innerhalb der Regeldatei |
Operatoren: == (Bedingung), != (negierte Bedingung), = (Zuweisung), += (anhängen)
Beispiel: Stabiler Symlink für USB-Stick
Abschnitt betitelt „Beispiel: Stabiler Symlink für USB-Stick“USB-Geräte bekommen als Gerätename /dev/sdb, /dev/sdc etc. — je nach
Anschluss-Reihenfolge unterschiedlich. Eine udev-Regel kann einen festen Symlink setzen:
# Attribute des USB-Sticks ermittelnudevadm info --attribute-walk /sys/block/sdb | grep -E "serial|vendor|model"SUBSYSTEM=="block", \ ATTRS{idVendor}=="0781", \ ATTRS{idSerial}=="12345678", \ SYMLINK+="backup"Der USB-Stick ist jetzt zusätzlich als /dev/backup erreichbar — unabhängig davon,
ob er als sdb, sdc oder sdd erkannt wird.
Beispiel: Berechtigungen für Gerät setzen
Abschnitt betitelt „Beispiel: Berechtigungen für Gerät setzen“SUBSYSTEM=="tty", ATTRS{idVendor}=="2341", MODE="0666", GROUP="dialout"Regeln testen
Abschnitt betitelt „Regeln testen“# Regel simulieren ohne Neustartudevadm test /sys/block/sdbudevadm test /sys/class/net/enp3s0
# Ausgabe zeigt, welche Regeln matchen und welche Aktionen ausgeführt würdenEvents beobachten
Abschnitt betitelt „Events beobachten“udevadm monitor # alle Kernel- und udev-Eventsudevadm monitor --kernel # nur Kernel-Eventsudevadm monitor --udev # nur verarbeitete udev-EventsPraktisch beim Einstecken eines USB-Geräts: man sieht sofort, welcher Gerätepfad vergeben wurde und welche Attribute vorhanden sind.
Regeln neu laden und anwenden
Abschnitt betitelt „Regeln neu laden und anwenden“sudo udevadm control --reload-rules # Regeln neu einlesen (ohne udevd-Neustart)sudo udevadm trigger # Events für alle Geräte erneut auslösensudo udevadm trigger --subsystem-match=block # nur Block-GerätePersistente Netzwerknamen
Abschnitt betitelt „Persistente Netzwerknamen“Netzwerkschnittstellen heißen heute enp3s0 statt eth0. Diese Predictable Network
Interface Names werden von udev (oder systemd-networkd) vergeben — basierend auf
physischer Position (PCI-Slot, Port) statt Erkennungsreihenfolge.
Schema:
en p 3 s 0│ │ │ │ └─ Port 0│ │ │ └──── Slot (innerhalb des Buses)│ │ └─────── PCI-Bus 3│ └────────── p = PCI, u = USB, s = SATA/hotplug└────────────── en = Ethernet (wl = WLAN, ww = WWAN)# Aktuellen udev-Link-Namen anzeigenudevadm info /sys/class/net/enp3s0 | grep ID_NET_NAME