UDEV(7) | udev | UDEV(7) |
NUME
udev - gestionarea dinamică a dispozitivelor
DESCRIERE
udev furnizează software de sistem cu evenimente de dispozitiv, gestionează permisiunile nodurilor de dispozitiv și poate crea legături simbolice suplimentare în directorul /dev/ sau redenumește interfețele de rețea. De obicei, nucleul doar atribuie nume de dispozitive imprevizibile pe baza ordinii de descoperire. Legăturile simbolice sau denumirile semnificative ale dispozitivelor de rețea oferă o modalitate de a identifica în mod fiabil dispozitivele pe baza proprietăților lor sau a configurației curente.
Demonul udev, systemd-udevd.service(8), primește evenimentele dispozitivelor „uevents” direct de la nucleu ori de câte ori un dispozitiv este adăugat sau eliminat din sistem, sau când acesta își schimbă starea. Atunci când udev primește un eveniment de dispozitiv, acesta compară setul său configurat de reguli cu diverse atribute ale dispozitivului pentru a identifica dispozitivul. Regulile care se potrivesc pot furniza informații suplimentare despre dispozitiv care să fie stocate în baza de date udev sau care să fie utilizate pentru a crea nume semnificative de legături simbolice.
Toate informațiile despre dispozitiv pe care le procesează udev sunt stocate în baza de date udev și trimise către posibilii abonați la evenimente. Accesul la toate datele stocate și la sursele de evenimente este asigurat de biblioteca libudev.
FIȘIERE DE REGULI
Regulile udev sunt citite din fișierele localizate în directoarele de reguli de sistem /usr/lib/udev/rules.d și /usr/local/lib/udev/rules.d, în directorul de execuție volatil /run/udev/rules.d și în directorul de administrare locală /etc/udev/rules.d. Toate fișierele de reguli sunt sortate și procesate colectiv în ordine lexicală, indiferent de directoarele în care se află. Cu toate acestea, fișierele cu nume de fișiere identice se înlocuiesc reciproc. Fișierele din /etc/ au cea mai mare prioritate, iar fișierele din /run/ au prioritate față de fișierele cu același nume din /usr/. Acest lucru poate fi utilizat pentru a înlocui un fișier de reguli furnizat de sistem cu un fișier local, dacă este necesar; o legătură simbolică în /etc/ cu același nume ca un fișier de reguli din /usr/lib/, care indică /dev/null, dezactivează în întregime fișierul de reguli. Fișierele de reguli trebuie să aibă extensia „.rules”; alte extensii sunt ignorate.
Fiecare linie din fișierul de reguli conține cel puțin o pereche cheie-valoare. Cu excepția liniilor goale sau a liniilor care încep cu „#”, care sunt ignorate. Există două tipuri de chei: match, (potrivire) și assignment, (atribuire). Dacă toate cheile de potrivire se potrivesc cu valorile lor, regula se aplică, iar cheilor de atribuire li se atribuie valorile specificate.
O regulă de potrivire poate redenumi o interfață de rețea, poate adăuga legături simbolice care indică nodul dispozitivului sau poate rula un program specificat ca parte a gestionării evenimentelor.
O regulă constă dintr-o listă de una sau mai multe expresii cheie-operator-valoare, separate prin virgule. Fiecare expresie are un efect distinct, în funcție de cheia și operatorul utilizat.
Operatori
"=="
"!="
"="
"+="
"-="
Adăugată în versiunea 217.
":="
Adăugată în versiunea 247.
Valori
Valorile sunt scrise ca șiruri de caractere între ghilimele duble, cum ar fi ("string"). Pentru a include o ghilimea dublă (") în valoare, aceasta trebuie precedată de o bară oblică inversă (\"). Orice alte apariții ale unei bare oblice inverse urmate de un caracter nu sunt eludate. Altfel spus, șirul "\t\n" este tratat ca patru caractere: bară oblică inversă, t minusculă, bară oblică inversă, n minusculă.
Șirul poate fi prefixat cu o minusculă e (e"string\n") pentru a marca șirul ca fiind eludat în stilul C, a se vedea Secvențe de eludare în C[1]. De exemplu, e"string\n" este interpretat ca fiind format din 7 caractere: 6 litere minuscule și o linie nouă. Acest lucru poate fi util pentru a scrie caractere speciale atunci când un controlor de nucleu le solicită.
Rețineți că NUL nu este permis în niciuna dintre variantele de șiruri de caractere.
Chei
Următoarele nume de chei pot fi utilizate pentru a se potrivi cu proprietățile dispozitivelor. Unele dintre chei se potrivesc, de asemenea, cu proprietățile dispozitivelor părinte din sysfs, nu numai cu dispozitivul care a generat evenimentul. Dacă într-o singură regulă sunt specificate mai multe chei care se potrivesc cu un dispozitiv părinte, toate aceste chei trebuie să se potrivească cu unul și același dispozitiv părinte.
ACTION
DEVPATH
KERNEL
KERNELS
NUME
SYMLINK
SUBSYSTEM
SUBSYSTEMS
DRIVER
DRIVERS
ATTR{nume-fișier}
Spațiul alb la final în valorile atributelor este ignorat, cu excepția cazului în care valoarea de potrivire specificată conține ea însăși un spațiu alb la final.
ATTRS{nume-fișier}
Spațiul alb la final în valorile atributelor este ignorat, cu excepția cazului în care valoarea de potrivire specificată conține ea însăși un spațiu alb la final.
SYSCTL{parametru nucleu}
Adăugată în versiunea 240.
ENV{cheie}
CONST{cheie}
"arch"
Adăugată în versiunea 244.
"virt"
Adăugată în versiunea 244.
"cvm"
Adăugată în versiunea 254.
Cheile necunoscute nu se vor potrivi niciodată.
Adăugată în versiunea 244.
TAG
TAGS
TEST{masca de mod octal}
PROGRAM
Aceasta poate fi utilizată numai pentru sarcini de prim-plan de foarte scurtă durată. Pentru detalii, a se vedea RUN.
Rețineți că mai multe chei PROGRAM pot fi specificate într-o singură regulă, iar „=”, „:=” și „+=” au același efect ca și „==”&.
RESULT
Cele mai multe câmpuri acceptă potrivirea modelelor globale de tip shell și modelele alternative. Sunt acceptate următoarele caractere speciale:
"*"
"?"
"[]"
"|"
Adăugată în versiunea 217.
Se pot atribui valori următoarelor chei:
NUME
SYMLINK
Setul de caractere pentru a numi o legătură simbolică este limitat. Caracterele permise sunt „0-9A-Za-z#+-.:=@_/”, secvențe de caractere UTF-8 valide și codificarea hexazecimală „\x00”. Toate celelalte caractere sunt înlocuite cu un caracter „_”.
Se pot specifica mai multe legături simbolice prin separarea numelor prin caracterul de spațiu. În cazul în care mai multe dispozitive au același nume, legătura indică întotdeauna dispozitivul cu cea mai mare prioritate de legătură. În cazul în care dispozitivul curent dispare, legăturile sunt reevaluate, iar dispozitivul cu următoarea prioritate a legăturii „link_priority” mai mare devine proprietarul legăturii. În cazul în care nu este specificată nicio prioritate a legăturii, ordinea dispozitivelor (și care dintre ele deține legătura) este nedefinită.
Numele legăturilor simbolice nu trebuie să intre niciodată în conflict cu numele implicite ale nodurilor de dispozitiv ale nucleului, deoarece acest lucru ar avea ca rezultat un comportament imprevizibil.
OWNER, GROUP, MODE
SECLABEL{modul}
Adăugată în versiunea 209.
ATTR{cheie}
SYSCTL{parametru nucleu}
Adăugată în versiunea 220.
ENV{cheie}
TAG
RUN{tip}
tip poate fi:
"program"
Aceasta este valoarea implicită în cazul în care nu este specificat niciun tip.
"builtin"
Adăugată în versiunea 199.
Numele programului și următoarele argumente sunt separate prin spații. Ghilimelele simple pot fi folosite pentru a specifica argumentele cu spații.
Acest lucru poate fi utilizat numai pentru sarcini de prim-plan de foarte scurtă durată. Rularea unui proces de evenimente pentru o perioadă lungă de timp poate bloca toate evenimentele ulterioare pentru acest dispozitiv sau pentru un dispozitiv dependent.
Rețineți că rularea programelor care accesează rețeaua sau montează/demontează sisteme de fișiere nu este permisă în cadrul regulilor udev, din cauza sandbox-ului implicit care este impus în systemd-udevd.service.
Nu este permisă pornirea demonilor sau a altor procese care rulează mult timp; procesele bifurcate, detașate sau nu, vor fi omorâte necondiționat după terminarea gestionării evenimentelor. Pentru a activa procesele cu execuție îndelungată din regulile udev, furnizați o unitate de serviciu și introduceți-o într-un dispozitiv udev folosind proprietatea de dispozitiv SYSTEMD_WANTS. Pentru detalii, consultați systemd.device(5).
LABEL
GOTO
IMPORT{tip}
"program"
Adăugată în versiunea 199.
"builtin"
Adăugată în versiunea 199.
"file"
"db"
"cmdline"
"parent"
Aceasta poate fi utilizată numai pentru sarcini de prim-plan de foarte scurtă durată. Pentru detalii, a se vedea RUN.
Rețineți că mai multe chei IMPORT{} pot fi specificate într-o singură regulă, iar „=”, „:=” și „+=” au același efect ca și „==”& adevărată în cazul în care importul are succes, cu excepția cazului în care se utilizează „!=” ca operator, ceea ce face ca cheia să fie adevărată în cazul în care importul nu a reușit.
OPȚIUNI
link_priority=valoare
string_escape=none|replace
static_node=
watch
nowatch
db_persist
Adăugată în versiunea 241.
log_level=nivel
Aceasta poate fi utilă la depanarea evenimentelor pentru anumite dispozitive. Rețineți că nivelul de jurnal este aplicat atunci când linia care include această regulă este procesată. Prin urmare, pentru depanare, se recomandă ca acest nivel să fie specificat mai devreme, de exemplu, pe prima linie din 00-debug.rules.
Exemplu de depanare a procesării uevent pentru interfețele de rețea:
# /etc/udev/rules.d/00-debug-net.rules SUBSYSTEM=="net", OPTIONS="log_level=debug"
Adăugată în versiunea 248.
Câmpurile ENV, GROUP, MODE, NAME, OWNER, PROGRAM, RUN, SECLABEL și SYMLINK acceptă substituții simple de șiruri de caractere. Substituțiile RUN sunt efectuate după ce toate regulile au fost procesate, chiar înainte de executarea programului, permițând utilizarea proprietăților dispozitivului stabilite de regulile de potrivire anterioare. Pentru toate celelalte câmpuri, substituțiile sunt efectuate în timp ce regula individuală este procesată. Substituțiile disponibile sunt:
$kernel, %k
$number, %n
$devpath, %p
$id, %b
$driver
$attr{fișier}, %s{fișier}
În cazul în care atributul este o legătură simbolică, ultimul element din ținta legăturii simbolice este returnat ca valoare.
$env{cheie}, %E{cheie}
$major, %M
$minor, %m
$result, %c
$parent, %P
$name
$links
$root, %r
$sys, %S
$devnode, %N
%%
$$
CONSULTAȚI ȘI
NOTE
- 1.
- Secvențe de eludare în C
TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
systemd 256.5 |