Provided by: manpages-ro_4.27.0-1_all bug

NUME

       path_resolution - modul în care un nume de rută este rezolvat pentru un fișier

DESCRIERE

       Unele  apeluri de sistem UNIX/Linux au ca parametru unul sau mai multe nume de fișiere. Un nume de fișier
       (sau nume de rută) se rezolvă după cum urmează.

   Pasul 1: inițierea procesului de soluționare
       În cazul în care numele de rută  începe  cu  caracterul  „/”,  directorul  de  căutare  de  pornire  este
       directorul  rădăcină  al  procesului de apelare. Un proces moștenește directorul rădăcină de la părintele
       său. De obicei, acesta va fi directorul rădăcină al ierarhiei de fișiere. Un proces poate obține  un  alt
       director rădăcină prin utilizarea apelului de sistem chroot(2) sau poate utiliza temporar un alt director
       rădăcină prin utilizarea openat2(2) cu fanionul RESOLVE_IN_ROOT activat.

       Un  proces  poate  obține  un  spațiu  de nume de montare complet privat în cazul în care acesta sau unul
       dintre strămoșii săi a fost inițiat printr-o invocare a apelului de sistem clone(2) care a  avut  activat
       fanionul CLONE_NEWNS. Aceasta gestionează partea „/” din numele de rută.

       Dacă  numele  de  rută  nu  începe  cu  caracterul „/”, directorul de căutare de pornire al procesului de
       rezoluție este directorul de lucru curent al procesului - sau, în  cazul  apelurilor  de  sistem  de  tip
       openat(2),  argumentul  dfd  (sau  directorul de lucru curent dacă AT_FDCWD este trecut ca argument dfd).
       Directorul de lucru curent este moștenit de la părintele și poate fi modificat prin  utilizarea  apelului
       de sistem chdir(2).

       Numele  de  rută  care  încep  cu un caracter '/' se numesc nume de rută absolute. Numele de rută care nu
       încep cu un caracter '/' se numesc nume de rută relative.

   Pasul 2: parcurgerea rutei
       Stabilește directorul de  căutare  curent  la  directorul  de  căutare  inițial.   Acum,  pentru  fiecare
       componentă  nefinală  a  numelui  de  rută,  unde o componentă este un subșir delimitat de caractere „/”,
       această componentă este căutată în directorul de căutare curent.

       Dacă procesul nu are permisiunea de căutare în directorul de căutare curent, se trimite o  eroare  EACCES
       („Permisiune refuzată”).

       În  cazul  în  care componenta nu este găsită, se trimite o eroare ENOENT („Nu există un astfel de fișier
       sau director”).

       În cazul în care componenta este găsită, dar nu este nici un director,  nici  o  legătură  simbolică,  se
       trimite o eroare ENOTDIR („Nu este un director”).

       În  cazul  în care componenta este găsită și este un director, se stabilește directorul de căutare curent
       la acel director și se trece la următoarea componentă.

       Dacă componenta este găsită și este o legătură simbolică, mai întâi se rezolvă această legătură simbolică
       (cu directorul de căutare curent ca director de căutare inițial). În caz de eroare, se returnează această
       eroare. Dacă rezultatul nu este un director, se trimite o eroare ENOTDIR. În  cazul  în  care  rezolvarea
       legăturii simbolice este reușită și returnează un director, se stabilește directorul de căutare curent în
       acel  director  și  se  trece  la  următoarea componentă. Rețineți că procesul de rezolvare poate implica
       recursivitate în cazul în care componenta de prefix („dirname”) a unui nume de rută conține  un  nume  de
       fișier care este o legătură simbolică ce se rezolvă către un director (unde componenta de prefix a acelui
       director  poate  conține  o  legătură  simbolică, și așa mai departe). Pentru a proteja nucleul împotriva
       supraîncărcării stivei și, de asemenea, pentru a proteja împotriva refuzului de serviciu,  există  limite
       privind  adâncimea  maximă de recursivitate și numărul maxim de legături simbolice urmate. O eroare ELOOP
       este returnată atunci când se depășește limita maximă („Prea multe niveluri de legături simbolice”).

       Așa cum este implementat în prezent în Linux, numărul maxim de legături simbolice care vor fi  urmate  în
       timpul  rezolvării  unui  nume  de  rută  este  de  40.  Înainte  de  Linux  2.6.18,  limita adâncimii de
       recursivitate era de 5. Începând cu Linux 2.6.18, această limită a fost ridicată  la  8.  În  Linux  4.2,
       codul  de  rezolvare  a  numelui  de  rută  din  nucleu  a  fost  reelaborat  pentru a elimina utilizarea
       recursivității, astfel încât singura limită care a rămas este limita maximă de  40  de  rezolvări  pentru
       întregul nume de rută.

       Rezolvarea  legăturilor simbolice în timpul acestei etape poate fi blocată prin utilizarea openat2(2), cu
       fanionul RESOLVE_NO_SYMLINKS activat.

   Pasul 3: găsirea intrării finale
       Căutarea componentei finale a numelui de rută se face la fel ca și cea a celorlalte componente, așa cum a
       fost descrisă în etapa anterioară, cu două diferențe: (i) componenta finală nu trebuie să fie neapărat un
       director (cel puțin în ceea ce privește procesul de rezolvare a rutei - ar putea să fie un  director  sau
       un non-director, din cauza cerințelor apelului de sistem specific) și (ii) nu este neapărat o eroare dacă
       componenta  nu  este găsită - poate că tocmai o creăm. Detaliile privind tratamentul ultimei intrări sunt
       descrise în paginile de manual ale apelurilor de sistem specifice.

   . și ..
       Prin convenție, fiecare director are intrările „.” și „..”, care se referă  la  directorul  în  sine  și,
       respectiv, la directorul părinte.

       Procesul  de  rezolvare  a  rutei  va  presupune  că  aceste  intrări  au semnificația lor convențională,
       indiferent dacă acestea sunt sau nu prezente în sistemul de fișiere fizic.

       Nu se poate trece dincolo de rădăcină: „/..” este același lucru cu „/”.

   Puncte de montare
       După o comandă mount dev path, numele de rută „path”  se  referă  la  rădăcina  ierarhiei  sistemului  de
       fișiere de pe dispozitivul „dev”, și nu la aceea ce se referea anterior.

       Se poate ieși dintr-un sistem de fișiere montat: „rută/..” se referă la directorul părinte al „rutei”, în
       afara ierarhiei sistemului de fișiere de pe „dev”.

       Traversarea punctelor de montare poate fi blocată prin utilizarea openat2(2), cu fanionul RESOLVE_NO_XDEV
       activat  (rețineți  însă  că  acest  lucru  restricționează,  de  asemenea, traversarea montării asociate
       „bind”).

   Barele oblice finale
       În cazul în care o rută de  acces  se  termină  cu  „/”,  acest  lucru  forțează  rezolvarea  componentei
       precedente  ca la pasul 2: componenta care precede bara oblică fie există și se rezolvă într-un director,
       fie numește un director care urmează să fie creat imediat  după  rezolvarea  numelui  de  acces.  În  caz
       contrar, se ignoră caracterul final „/”.

   Legătura simbolică finală
       În  cazul  în  care  ultima  componentă  a unui nume de rută este o legătură simbolică, atunci depinde de
       apelul de sistem dacă fișierul la  care  se  face  referire  va  fi  legătura  simbolică  sau  rezultatul
       rezolvării  rutei  în  funcție  de  conținutul său. De exemplu, apelul de sistem lstat(2) va opera asupra
       legăturii simbolice, în timp ce stat(2) operează asupra fișierului indicat de legătura simbolică.

   Limita de lungime
       Există o lungime maximă pentru numele de rută. În cazul în care numele de  rută  (sau  un  nume  de  rută
       intermediar  obținut  în  timpul  rezolvării  legăturilor  simbolice) este prea lung, se trimite o eroare
       ENAMETOOLONG („Numele fișierului este prea lung”).

   Nume de rută gol
       În UNIX-ul original, numele de rută gol se referea la directorul curent. În prezent, POSIX decretează  că
       un nume de rută gol nu trebuie să fie rezolvat cu succes. În acest caz, Linux returnează ENOENT.

   Permisiuni
       Biții de permisiune ai unui fișier constau din trei grupuri de trei biți; a se vedea chmod(1) și stat(2).
       Primul grup de trei este utilizat atunci când ID-ul efectiv de utilizator al procesului apelant este egal
       cu  ID-ul  de proprietar al fișierului. Al doilea grup de trei este utilizat atunci când ID-ul de grup al
       fișierului fie este egal cu ID-ul de grup efectiv al procesului care face apelul, fie  este  unul  dintre
       ID-urile  de  grup  suplimentare ale procesului care face apelul (așa cum este setat de setgroups(2)). În
       cazul în care niciunul dintre aceștia nu este valabil, se utilizează cel de-al treilea grup.

       Dintre cei trei biți utilizați, primul bit determină permisiunea de  citire,  al  doilea  permisiunea  de
       scriere, iar ultimul permisiunea de executare în cazul fișierelor obișnuite sau permisiunea de căutare în
       cazul directoarelor.

       Linux utilizează fsuid în loc de ID-ul efectiv al utilizatorului pentru verificarea permisiunilor. În mod
       normal,  fsuid  va fi egal cu ID-ul efectiv al utilizatorului, dar fsuid poate fi schimbat prin apelul de
       sistem setfsuid(2).

       (Aici „fsuid” înseamnă ceva de genul „ID utilizator de sistem de fișiere” (filesystem user ID). Conceptul
       a fost necesar pentru implementarea unui server NFS în spațiul utilizatorului  la  un  moment  dat,  când
       procesele puteau trimite un semnal către un proces cu același ID de utilizator efectiv. În prezent, acest
       concept este depășit. Nimeni nu ar trebui să folosească setfsuid(2).)

       În  mod  similar,  Linux  utilizează fsgid (ID grup de sistem de fișiere, „filesystem group ID”) în locul
       ID-ului efectiv al grupului. A se vedea setfsgid(2).

   Ocolirea verificărilor de permisiuni: superutilizator și capacități
       Pe un sistem UNIX tradițional, superutilizatorul (root, ID utilizator 0) este atotputernic și trece peste
       toate restricțiile de permisiune atunci când accesează fișiere.

       În Linux, privilegiile de superutilizator sunt împărțite în capacități (a se vedea capabilities(7)). Două
       capacități  sunt  relevante  pentru   verificarea   permisiunilor   de   fișiere:   CAP_DAC_OVERRIDE   și
       CAP_DAC_READ_SEARCH; (un proces are aceste capacități dacă fsuid-ul său este 0).

       Capacitatea  CAP_DAC_OVERRIDE  anulează  toate  verificările  de  permisiuni,  dar  acordă permisiunea de
       execuție numai atunci când cel puțin unul dintre cei trei biți de permisiune de  execuție  ai  fișierului
       este activat.

       Capacitatea  CAP_DAC_READ_SEARCH  acordă permisiunea de citire și căutare în directoare și permisiunea de
       citire în fișierele obișnuite.

CONSULTAȚI ȘI

       readlink(2), capabilities(7), credentials(7), symlink(7)

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.

Pagini de manual de Linux 6.9.1                    2 mai 2024                                 path_resolution(7)