Scroll to navigation

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

"=="

Compară pentru egalitate. -- Cheia specificată are valoarea specificată.

"!="

Compară pentru inegalitate. -- Cheia specificată nu are valoarea specificată sau cheia specificată nu este prezentă deloc.

"="

Atribuie o valoare la o cheie. Cheile care reprezintă o listă sunt reinițializate și se atribuie doar această singură valoare.

"+="

Adaugă valoarea la o cheie care conține o listă de intrări.

"-="

Elimină valoarea dintr-o cheie care conține o listă de intrări.

Adăugată în versiunea 217.

":="

Atribuie o valoare unei chei în mod definitiv; nu permite nicio modificare ulterioară.

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

Se potrivește cu numele acțiunii evenimentului.

DEVPATH

Se potrivește cu ruta la dispozitiv a dispozitivului de eveniment.

KERNEL

Se potrivește cu numele dispozitivului de eveniment.

KERNELS

Caută în sus în ruta dispozitivului un nume de dispozitiv corespunzător.

NUME

Se potrivește cu numele unei interfețe de rețea. Poate fi utilizată după ce cheia NAME a fost stabilită într-una din regulile precedente.

SYMLINK

Se potrivește cu numele unei legături simbolice care vizează nodul. Poate fi utilizată după ce o cheie SYMLINK a fost stabilită într-una din regulile precedente. Pot exista mai multe legături simbolice; numai una trebuie să corespundă. În cazul în care operatorul este „!=”, simbolul returnează «true» numai dacă nu există nicio legătură simbolică corespunzătoare.

SUBSYSTEM

Se potrivește cu subsistemul dispozitivului de evenimente.

SUBSYSTEMS

Caută în sus în ruta dispozitivului pentru un nume de subsistem de dispozitiv corespunzător.

DRIVER

Se potrivește cu numele controlorului dispozitivului de evenimente. Definiți această cheie numai pentru dispozitivele care sunt legate de un controlor în momentul în care este generat evenimentul.

DRIVERS

Caută în sus în ruta dispozitivului pentru un nume de controlor de dispozitiv corespunzător.

ATTR{nume-fișier}

Se potrivește cu valoarea atributului sysfs al dispozitivului de eveniment.

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}

Caută în sus în ruta dispozitivului un dispozitiv cu valori care se potrivesc cu valorile atributelor sysfs. Dacă sunt specificate mai multe potriviri ATTRS, toate trebuie să se potrivească pe același dispozitiv.

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}

Se potrivește cu valoarea unui parametru al nucleului.

Adăugată în versiunea 240.

ENV{cheie}

Se potrivește cu o valoare de proprietate a dispozitivului.

CONST{cheie}

Se potrivește cu o constantă la nivel de sistem. Cheile acceptate sunt:

"arch"

Arhitectura sistemului. A se vedea ConditionArchitecture= în systemd.unit(5) pentru valorile posibile.

Adăugată în versiunea 244.

"virt"

Mediul de virtualizare a sistemului. A se vedea systemd-detect-virt(1) pentru valorile posibile.

Adăugată în versiunea 244.

"cvm"

Tehnologia de virtualizare confidențială a sistemului. A se vedea systemd-detect-virt(1) pentru valorile posibile.

Adăugată în versiunea 254.

Cheile necunoscute nu se vor potrivi niciodată.

Adăugată în versiunea 244.

TAG

Se potrivește cu una dintre etichetele dispozitivului. Poate fi utilizată după ce o cheie TAG a fost stabilită într-una din regulile precedente. Pot exista mai multe etichete; trebuie să se potrivească doar una dintre ele. În cazul în care operatorul este „!=”, simbolul returnează «true» numai dacă nu există nicio etichetă care se potrivește.

TAGS

Caută în sus în ruta dispozitivului pentru un dispozitiv cu etichetal care să se potrivească. În cazul în care operatorul este „!=”, simbolul returnează «true» numai dacă nu există nicio etichetă care se potrivește.

TEST{masca de mod octal}

Testează existența unui fișier. Dacă este necesar, se poate specifica o mască de mod octal.

PROGRAM

Execută un program pentru a determina dacă există o potrivire; cheia este adevărată dacă programul returnează succes. Proprietățile dispozitivului sunt puse la dispoziția programului executat în mediu. Ieșirea standard a programului este disponibilă în cheia RESULT.

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

Se potrivește cu șirul returnat de ultimul apel PROGRAM. Această cheie poate fi utilizată în aceeași regulă sau în orice regulă ulterioară după un apel PROGRAM.

Cele mai multe câmpuri acceptă potrivirea modelelor globale de tip shell și modelele alternative. Sunt acceptate următoarele caractere speciale:

"*"

Se potrivește cu zero sau mai multe caractere.

"?"

Se potrivește cu orice caracter unic.

"[]"

Se potrivește cu orice caracter unic specificat între parantezele drepte. De exemplu, șirul de caractere „tty[SR]” se potrivește fie cu „ttyS”, fie cu „ttyR”. De asemenea, sunt acceptate intervalele prin intermediul caracterului „-”. De exemplu, pentru a se potrivi cu intervalul tuturor cifrelor, se poate utiliza modelul „[0-9]”. În cazul în care primul caracter care urmează după „[” este un „!”, toate caracterele care nu sunt incluse sunt potrivite.

"|"

Separă modelele alternative. De exemplu, șirul de modele „abc|x*” se va potrivi fie cu „abc”, fie cu „x*”.

Adăugată în versiunea 217.

Se pot atribui valori următoarelor chei:

NUME

Numele care trebuie utilizat pentru o interfață de rețea. A se vedea systemd.link(5) pentru un mecanism de nivel superior de stabilire a numelui interfeței. Numele unui nod de dispozitiv nu poate fi modificat de udev, ci doar pot fi create legături simbolice suplimentare.

SYMLINK

Numele unei legături simbolice care vizează nodul. Fiecare regulă de potrivire adaugă această valoare la lista de legături simbolice care urmează să fie create.

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

Permisiunile pentru nodul de dispozitiv. Fiecare valoare specificată înlocuiește valoarea implicită compilată.

SECLABEL{modul}

Aplică eticheta specificată pentru modulul de securitate Linux la nodul dispozitivului.

Adăugată în versiunea 209.

ATTR{cheie}

Valoarea care trebuie să fie scrisă într-un atribut sysfs al dispozitivului de eveniment.

SYSCTL{parametru nucleu}

Valoarea care trebuie să fie scrisă în parametrul nucleului.

Adăugată în versiunea 220.

ENV{cheie}

Definește o valoare a unei proprietăți a dispozitivului. Numele proprietăților cu un „.” la început nu sunt stocate în baza de date și nici nu sunt exportate în evenimente sau instrumente externe (executate, de exemplu, cu ajutorul cheii de potrivire PROGRAM).

TAG

Atașează o etichetă la un dispozitiv. Aceasta este utilizată pentru a filtra evenimentele pentru utilizatorii funcționalității de monitorizare a libudev sau pentru a enumera un grup de dispozitive etichetate. Implementarea poate funcționa eficient numai dacă doar câteva etichete sunt atașate unui dispozitiv. Este destinată a fi utilizată numai în contexte cu cerințe specifice de filtrare a dispozitivelor, și nu ca un indicator de uz general. O utilizare excesivă poate duce la o gestionare ineficientă a evenimentelor.

RUN{tip}

Specifică un program care urmează să fie executat după procesarea tuturor regulilor pentru evenimentul respectiv. Cu „+=”, această invocare se adaugă la listă, iar cu „=” sau „:=”, înlocuiește orice conținut anterior al listei. Vă rugăm să rețineți că ambele tipuri „program” și „builtin” descrise mai jos au o listă comună, astfel încât ștergerea listei cu „:=” și „=” afectează ambele tipuri.

tip poate fi:

"program"

Execută un program extern specificat ca valoare atribuită. Dacă nu se indică o rută absolută, se așteaptă ca programul să se afle în /usr/lib/udev; în caz contrar, trebuie specificată ruta absolută.

Aceasta este valoarea implicită în cazul în care nu este specificat niciun tip.

"builtin"

Ca și program, dar folosește unul dintre programele încorporate, în loc de unul extern.

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

O etichetă numită către care poate sări o etichetă GOTO.

GOTO

Sare la următoarea etichetă LABEL cu un nume corespunzător.

IMPORT{tip}

Importă un set de variabile ca proprietăți ale dispozitivului, în funcție de tip:

"program"

Execută un program extern specificat ca valoare atribuită și, dacă se întoarce cu succes, importă rezultatul acestuia, care trebuie să fie în format de cheie de mediu. Specificarea rutei de acces, separarea comenzii/argumentului și punerea între ghilimele funcționează ca în RUN.

Adăugată în versiunea 199.

"builtin"

Similar cu „program”, dar utilizează unul dintre programele încorporate și nu unul extern.

Adăugată în versiunea 199.

"file"

Importă un fișier text specificat ca valoare atribuită, al cărui conținut trebuie să fie în format de cheie de mediu.

"db"

Importă o singură proprietate specificată ca valoare atribuită din baza de date a dispozitivului curent. Acest lucru funcționează numai dacă baza de date este deja completată de un eveniment anterior.

"cmdline"

Importă o singură proprietate din linia de comandă a nucleului. Pentru fanioanele simple, valoarea proprietății este stabilită la „1”.

"parent"

Importă cheile stocate de la dispozitivul părinte prin citirea intrării din baza de date a dispozitivului părinte. Valoarea atribuită lui IMPORT{parent} este utilizată ca filtru pentru numele cheilor care urmează să fie importate (cu aceeași potrivire de tip global de tip shell utilizată pentru comparații).

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

Opțiuni pentru reguli și dispozitive:

link_priority=valoare

Specifică prioritatea legăturilor simbolice create. Dispozitivele cu priorități mai mari suprascriu legăturile simbolice existente ale altor dispozitive. Valoarea implicită este 0.

string_escape=none|replace

Atunci când se utilizează „replace”, caracterele eventual nesigure din șirurile atribuite la NAME, SYMLINK și ENV{cheie} sunt înlocuite. În cazul în care se utilizează „none”, nu se efectuează nicio înlocuire. Atunci când nu este activată, înlocuirea se efectuează pentru NAME, SYMLINK, dar nu și pentru ENV{cheie}. Nu este definită în mod implicit.

static_node=

Aplică permisiunile specificate în această regulă la nodul de dispozitiv static cu numele specificat. De asemenea, pentru fiecare etichetă specificată în această regulă, creează o legătură simbolică în directorul /run/udev/static_node-tags/eticheta care să arate către nodul de dispozitiv static cu numele specificat. Crearea nodurilor de dispozitive statice este realizată de systemd-tmpfiles înainte de pornirea systemd-udevd. Este posibil ca nodurile statice să nu aibă un dispozitiv de nucleu corespunzător; ele sunt utilizate pentru a declanșa încărcarea automată a modulelor de nucleu atunci când sunt accesate.

watch

Monitorizează nodul dispozitivului cu inotify; când nodul este închis după ce a fost deschis pentru scriere, se sintetizează un eveniment de modificare uevent.

nowatch

Dezactivează monitorizarea unui nod de dispozitiv cu inotify.

db_persist

Activează fanionul (sticky bit) pe intrarea în baza de date udev a dispozitivului de evenimente. Proprietățile dispozitivului sunt apoi păstrate în baza de date chiar și atunci când se apelează udevadm info --cleanup-db. Această opțiune poate fi utilă în anumite cazuri (de exemplu, dispozitivele Device Mapper) pentru a păstra starea dispozitivului la tranziția de la initrd.

Adăugată în versiunea 241.

log_level=nivel

Primește un nume de nivel de jurnal, cum ar fi „debug” sau „info”, sau o valoare specială „reset”. Atunci când este specificat un nume de nivel de jurnal, nivelul maxim de jurnal este schimbat la nivelul respectiv. Atunci când se stabilește „reset”, nivelul de jurnal specificat anterior este revocat. Valoarea implicită este nivelul de jurnal al procesului principal din systemd-udevd.

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

Numele nucleului pentru acest dispozitiv.

$number, %n

Numărul nucleului pentru acest dispozitiv. De exemplu, „sda3” are numărul dat de nucleu 3.

$devpath, %p

Ruta la dispozitiv a dispozitivului.

$id, %b

Numele dispozitivului care se potrivește atunci când se caută în sus în ruta dispozitivului pentru SUBSYSTEMS, KERNELS, DRIVERS și ATTRS.

$driver

Numele controlorului dispozitivului care se potrivește atunci când se caută în sus în ruta dispozitivului pentru SUBSYSTEMS, KERNELS, DRIVERS și ATTRS.

$attr{fișier}, %s{fișier}

Valoarea unui atribut sysfs găsit la dispozitivul la care toate cheile regulii au corespuns. Dacă dispozitivul care corespunde nu are un astfel de atribut, iar un test anterior KERNELS, SUBSYSTEMS, DRIVERS sau ATTRS a selectat un dispozitiv părinte, atunci se utilizează atributul din acel dispozitiv părinte.

Î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}

O valoare a proprietății dispozitivului.

$major, %M

Numărul major al nucleului pentru dispozitiv.

$minor, %m

Numărul minor al nucleului pentru dispozitiv.

$result, %c

Șirul returnat de programul extern solicitat cu PROGRAM. Se poate selecta o singură parte a șirului, separată de un caracter de spațiu, specificând numărul părții ca atribut: „%c{N}”. În cazul în care numărul este urmat de caracterul „+”, această parte și toate celelalte părți ale șirului rezultat sunt înlocuite: „%c{N+}”.

$parent, %P

Numele nodului dispozitivului părinte.

$name

Numele actual al dispozitivului. Dacă nu este modificat de o regulă, acesta este numele dispozitivului din nucleu.

$links

O listă de legături simbolice curente, separate prin spații. Valoarea este stabilită numai în timpul unui eveniment de eliminare sau dacă o regulă anterioară a atribuit o valoare.

$root, %r

Valoarea udev_root.

$sys, %S

Punctul de montare sysfs.

$devnode, %N

Numele nodului dispozitivului.

%%

Caracterul „%” însuși.

$$

Caracterul „%” însuși.

CONSULTAȚI ȘI

systemd-udevd.service(8), udevadm(8), systemd.link(5)

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