path resolution(7): Skillnad mellan sidversioner
Admin (diskussion | bidrag) (Skapade sidan med '= path_resolution(7) - Hur ett filnamn löses till en fil = == Namn == path_resolution - hur ett filnamn löses till en fil == Beskrivning == Vissa UNIX/Linux-systemanrop tar ett eller flera filnamn som parametrar. Ett filnamn (eller sökväg) löses enligt följande: === Steg 1: Början av upplösningsprocessen === * Om sökvägen börjar med tecknet '''/''' startar uppslaget i rotkatalogen för den anropande processen. - En process ärver sin rotkatalog från sin...') |
(Ingen skillnad)
|
Versionen från 23 november 2024 kl. 08.08
path_resolution(7) - Hur ett filnamn löses till en fil
Namn
path_resolution - hur ett filnamn löses till en fil
Beskrivning
Vissa UNIX/Linux-systemanrop tar ett eller flera filnamn som parametrar. Ett filnamn (eller sökväg) löses enligt följande:
Steg 1: Början av upplösningsprocessen
- Om sökvägen börjar med tecknet / startar uppslaget i rotkatalogen för den anropande processen.
- En process ärver sin rotkatalog från sin förälder. Vanligtvis är detta filhierarkins rotkatalog. - Rotkatalogen kan ändras med hjälp av systemanropet `chroot(2)` eller temporärt med `openat2(2)` och flaggan `RESOLVE_IN_ROOT`.
- Om sökvägen inte börjar med /, är startkatalogen den aktuella arbetskatalogen för processen.
- Den aktuella arbetskatalogen kan ändras med systemanropet `chdir(2)`.
Sökvägar som börjar med / kallas absoluta sökvägar. De som inte gör det kallas relativa sökvägar.
Steg 2: Gå igenom sökvägen
1. Sätt nuvarande uppslagskatalog till startkatalogen. 2. För varje icke-slutkomponent i sökvägen (delad av tecknet /):
* Om processen inte har rättigheter till katalogen returneras EACCES ("Permission denied"). * Om komponenten inte hittas returneras ENOENT ("No such file or directory"). * Om komponenten inte är en katalog eller symbolisk länk returneras ENOTDIR ("Not a directory"). * Om komponenten är en katalog, sätt nuvarande uppslagskatalog till den katalogen och gå till nästa komponent. * Om komponenten är en symbolisk länk: - Lös länken. - Om resultatet inte är en katalog returneras ENOTDIR. - Vid framgång sätts uppslagskatalogen till resultatet och processen fortsätter.
- Begränsningar:**
För att skydda kärnan mot stacköverflöd finns gränser på maximalt antal symboliska länkar som kan följas: - Max 40 symboliska länkar. - Före Linux 2.6.18 var rekursionsgränsen 5, men höjdes till 8 i senare versioner. Från och med Linux 4.2 eliminerades rekursionen helt.
Symboliska länkar kan blockeras med `openat2(2)` och flaggan `RESOLVE_NO_SYMLINKS`.
Steg 3: Hitta sista komponenten
1. Uppslaget för den sista komponenten fungerar som för andra komponenter. 2. Den sista komponenten behöver inte vara en katalog. 3. Det är inte ett fel om komponenten inte hittas — vissa systemanrop kan skapa den.
. och ..
- . refererar till katalogen själv.
- .. refererar till föräldrakatalogen.
Man kan inte navigera förbi roten: /.. är samma som /.
Monteringspunkter
Efter ett kommando som mount dev path refererar path till roten för det monterade filsystemet. Det går dock att lämna ett monterat filsystem med path/...
Traversering av monteringspunkter kan blockeras med `openat2(2)` och flaggan `RESOLVE_NO_XDEV`.
Sökvägar som slutar med '/'
Om en sökväg slutar med /, måste komponenten före slashet lösas till en katalog.
Längdbegränsningar
Maximal längd för sökvägar beror på systemet. Om en sökväg är för lång returneras ENAMETOOLONG.
Tomma sökvägar
En tom sökväg returnerar enligt POSIX alltid ENOENT.
Rättigheter
Rättigheter för en fil definieras i tre grupper: 1. Ägare (UID) 2. Grupp (GID) 3. Övriga
Varje grupp har tre bitar för att ange rättigheter: läs, skriv och kör/sök. Linux använder fsuid och fsgid vid rättighetskontroll.
Superanvändare och kapabiliteter
Traditionellt kan superanvändaren (UID 0) ignorera alla rättighetskontroller. På Linux är dessa rättigheter uppdelade i kapabiliteter, där relevanta för filkontroller är: - `CAP_DAC_OVERRIDE`: Ignorerar rättighetskontroller (delvis). - `CAP_DAC_READ_SEARCH`: Tillåter läs- och sökoperationer.
Se också
Sidslut
Orginalhemsidan på Engelska :https://man7.org/linux/man-pages/man7/path_resolution.7.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till PC Service som har sponsrat Linux.se med webbhotell.