Linux's mappestruktur – historie og oprydning

Ved du hvorfor der både er /bin og /sbin-mapper? Hvorfor de både ligger i roden / og under /usr ? Eller at /etc og /usr har skiftet betydning og anvendelse gennem årtierne? Her kommer et bud, delvist baseret på denne fine beskrivelse.

Sidespring: Mappenavnene blev fra starten af holdt korte, så kan skrives hurtigere, når man ikke har funktionen "auto completion" med tabulator-tasten, så vidt jeg forstår. Det var vel ikke udbredt i UNIX's "ungdom"?

Mappernes navne og placering er bibeholdt per tradition (helt tilbage til UNIX' begyndelse), og fordi man ikke ville "fikse" noget, der kun var lidt forkert eller kun lidt defekt.

I begyndelsen af 1970’erne havde man ikke software, der kunne lave en "logisk" partition ud af flere fysiske harddiske, eller mounte (montere) en ny partition oven i en mappe og se filerne fra begge steder (partitioner) i samme mappe. Og harddiskene var meget små, 1,5 til 2,5 MB nævnes som maksimum, så i stedet valgte man at fordele filsystemets mapper over flere diske, for at få plads nok til hele UNIX-systemet. Man startede vel med alt på én partition, root-partitionen eller bare "/" navngivet efter sit mount point. Her lå alle de binære filer i /bin (og /sbin), indtil root-partitionen blev fyldt. Unix blev udvidet og voksede ud af den første disk.

/usr kommer af "User", oprindelig stedet til disken/partitionen med brugernes filer, men senere blev brugernes hjemme-mapper flyttet igen, nu til /home, da partitionen med /usr blev fyldt af programmer. En tredje disk blev anskaffet.

Tilbage til den første disk: Da der ikke længere var plads på root-partitionen til flere programmer i /bin og /sbin, lagde man i stedet de nyeste tilkomne programmer på user-partitionen under /usr/bin og /usr/sbin! Nu bruges /usr til filer som brugerne ikke selv laver (backronym: Unix System Resources).

Meningen med de to "sbin"-mapper har ændret sig over årtierne, fra at være til "static binaries" der ikke behøver libraries for at køre, og hen til "system binaries", altså programmer der ikke er relevant for en person selv at starte manuelt ved daglig brug, men for daemons/serverprogrammer samt programmer til systemadministration.

Når distributionerne alligevel inkluderer alle fire mapper i $PATH-variablen for almindelige brugere, kan alle brugere forsøge at starte alle programmer alligevel, uden at bekymre sig om hvor de egentlig ligger, og de bliver vist med tabulator-auto-fuldførelse i terminalen. Dermed er placeringen blevet hip som hap for almindelig brug hvor man ikke behøves vide hvilken mappe et givet program ligger i, bare man kan huske kommandoens navn.

/etc skulle oprindeligt stå for et cetera, altså alt det øvrige, men er nu præciseret til konfigurationsfiler og scripts i ren tekst, der er fælles for hele systemet (Backronym: Editable Text Configuration). I en overgangsperiode som er ved at slutte nu, er /etc også brugt til midlertidige filer, der manglede "et sted at være" under tidlig boot (hvor man ikke altid kan være sikker på at /usr og /var er klar til brug, i visse use cases). For at samle disse mdilertidige volatile filer, der må forsvinde ved boot, har man fundet på at samle dem i /run.

/var er til de variable filer (der jævnligt ændres), og som er fælles for hele systemet, og ikke skal slettes, når systemet genstarter, såsom logfiler.

For at holde /etc og /var fri for både ramdiske og kortlivede midlertidige filer, fandt man på /run, som kernen og visse daemons vistnok bruger.
Fedora fik det impementeret helt i F16, og forklaringen står her: http://article.gmane.org/gmane.linux.redhat.fedora...
Debian forklaringer og status for Wheezy.

Flere detaljer om hvad man har kunnet enes om hvad hvilke mapper bør benyttes til (hvad der bør placeres hvor), står i "File Hierachy Standard". Det er strengt taget kun anbefalinger, ikke ufravigelige krav, og en ny udgave (3.0) er ved at blive skrevet. Den sidste er fra 2004.

FHS beskriver at /bin og /sbin er til "essentielle" programmer, fx til system restore og hvad der kræves til "single user mode". Formålet har været at kunne boote op i single user mode og have adgang til fsck uden at have adgang til /usr (når /usr ligger på en anden computer eller en separat partition). Men den moderne løsning er at bruge en initrd (et init-RAM-fs) der kan det samme, eller have et rescue-system på en UBS-pen/CD/PXE-boot. Den slags "nytænkning" er naturligvis ikke med i FHS, endnu!

Wikipedia har denne korte liste over de vigtigste mapper: http://en.wikipedia.org/wiki/Unix_directory_struct...

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

Oprydningen

Mappe-hierakiet har altså været præget af iterative ændringer og knopskydninger, ikke systematisk plan.

Første skridt i oprydningen har været at adskille konfiguration, device-filer, variable filer og midlertidige/volatile/runtime filer fra hinanden, og holde dem ude af /usr. Dertil blev /run taget i brug.

Det nye håb er at man kan samle de filer, der kun ændrer sig, når der installeres/opgraderes programmer, under /usr. Det siges at gøre det enklere at dele /usr og alle undermapperne mellem flere systemer, fx over netværket til en række tynde klienter eller mellem VM'er på samme fysiske maskine. Til disse anvendelser er det en fordel at kunne behandle alt under /usr som en ensartet (og read-only) helhed, samt at /bin og /sbin ikke skal håndteres separat.

Fedora har foreslået følgende, kaldet "the /usr merge":

Merge and symlink
/bin to /usr/bin
/sbin to /usr/sbin
/lib to /usr/lib (and /lib64 to /usr/lib64)

Forslaget står på https://fedoraproject.org/wiki/Features/UsrMove men disse to forklaringer er også værd at læse:
* http://www.freedesktop.org/wiki/Software/systemd/T...
* https://lists.fedoraproject.org/pipermail/devel/20... (på listeform).
OpenSUSE holder også øje med “the /usr merge”, og hvad der vil kræve at få ændret openSUSE, på http://en.opensuse.org/openSUSE:UsrMerge . Nogen overvejer om det skal med i "12.2".
Ideen er ikke begrænset til Fedora, så hvem ved hvornår forslaget bliver det nye default for programmer og de store distro’er?

Om /usr/sbin også bør merges med og symlinkes til /usr/bin, overvejes også af nogle personer, men det skal ikke stå i vejen for at erstatte /bin og /sbin (og /lib) med symlinks.

For de fleste Linux-slutbrugere vil sammenlgæningen “the /usr merge” ikke få nogen betydning (andet en at mappestrukturen er lettere at forstå hvis man vil sætte sig ind i hvad mapperne bruges til). Det er kun hvis /usr ligger på et netværksdrev eller en separat partition, at nogle admins frygter at det giver bøvl med at boote. Dette specielle scenarie kræver en del omtanke.

De filer der skal bruges under opstarten (før /usr mountes), eller til single user rescue mode, og som bliver flyttet ind under /usr, skal i stedet for at ligge under / ligge i et init-ram-fs (eller en anden form for mini-filsystem). At brug et init-ram-fs er jo normal praksis på stort set alle linux-systemer, så forlsagets tilhængere regner ikke med at der skabes større problemer, eller mere bøvl end forslaget fjerne fra dem der laver distroer og programpakker.

Et argument for oprydningen er at gøre det mere klart i hvilken bin-mappe de eksekvérbare filer skal placeres i, da retninglinjerne kan gøres skarpere, hvis man ikke skal tage hensyn til de personer som ligger /usr på en separat partition. Der bliver færre valg for dem der laver rpm- og deb-pakker og som bestemmer hvor programfilerne skal installeres, for at det virker på flest mulige distributioner (og flest mulige specialtilfælde). Det siges at der er forskel fra distro til distro på hvilke programfiler der ligges i /bin, /sbin og /usr/sbin. Hvis indholder fra de tre mapper samles i /usr/bin, behøves man ikke gætte længere, og kan fjerne endnu en af de små, men unyttige forskelle mellem distroerne.

Det ser ud til at der her i 2010'erne arbejdes på at rydde op i mappestrukturen, gennem forenkling og en lidt mere stringent gruppering.

Håber i kan bruge forklaringerne, og måske har fået et glimt af sammenhæng :-)
“Artiklen” ovenover må frit kopieres.

marlar
Antal: 2808
Tilmeldt:
05-12-2009
User is offline
Super spændende artikel som

Super spændende artikel som jeg glæder mig til at nærlæse i aften. Jeg har altid undret mig over mappestrukturen, og især at den kan være så forskellige fra distro til distro.


frogmaster
frogmaster's picture
Antal: 3274
Tilmeldt:
20-05-2010
User is offline
Ja - Tak for det, Meget af

Ja - Tak for det, Meget af det er jeg heller ikke klar over.


paldepind
paldepind's picture
Antal: 1649
Tilmeldt:
20-02-2010
User is offline
Gobo Linux fiksede Linux's

Gobo Linux fiksede Linux's fil hierarki for længe siden. Desværre slog det aldrig igennem.


Anonym6
Antal: 219
Tilmeldt:
20-10-2009
User is offline
Tak for en lækker artikel

Tak for en lækker artikel =)


lbm
lbm's picture
Antal: 805
Tilmeldt:
14-06-2006
User is offline
Interesant læsning.

Interesant læsning.


mich
mich's picture
Antal: 934
Tilmeldt:
13-10-2007
User is offline
Interessant gennemgang ...

... mere af det!


marx
marx's picture
Antal: 1799
Tilmeldt:
24-04-2006
User is offline
Rigtig fed artikel.

Rigtig fed artikel.


julemand101
julemand101's picture
Antal: 1616
Tilmeldt:
17-01-2004
User is offline
Tak for en god artikel.

Tak for en god artikel.


Kristho
Kristho's picture
Antal: 1270
Tilmeldt:
21-02-2008
User is offline
Glæder mig vildt til det

Glæder mig vildt til det bliver implementeret :) Det bliver rart :)

God artikel!


niklin
Antal: 45
Tilmeldt:
04-07-2003
User is offline
GoboLinux's navne-forsøg virkede

Tankerne bag mappestrukturen i GoboLinux er fint (men langt) beskrevet her: http://www.gobolinux.org/index.php?page=doc/articl...

Så vidt jeg lige kan se, så valgte de at hvert program får en mappe under /Programs/ hvor de så kan ligge alle deres konfigurationsfiler, temp-filer libraries osv. Og for at være kompatibel med andre Linuxsystemer, er der så lagt symlinks ud i mapper som /usr/* m.fl.

"For strict compatibility reasons, however, we have an extra set of symbolic links with the Unix names pointing to the closest GoboLinux equivalents (even making a few concessions in the GoboLinux side of the equation in order to preserve this compatibility). The fact that these are links, and we call them the legacy tree keeps this notion very clear"

Hvis det virker fint med symlinks i GoboLinux, så giver det nok heller ikke videre bøvl med tre nye symlinks i Fedora.


niklin
Antal: 45
Tilmeldt:
04-07-2003
User is offline
Målgruppe og "bogen" på Linuxin

Forat kunne forstå artiklen, er det nødvendigt at kende til hvordan mount og fil-træet virker, altså at flere fysiske lagre indsættes i det fælles træ, så der kun er ét filtræ per computer. Og det hjælper at kende til CLI-shells, environment variables ($PATH), dynamisk linkede libraries samt har prøvet at boote op i "rescue mode" og fikset noget fra kommandolinjen.

Altså var målgruppen ikke målrettet folk der er "Ny til Linux".

Derfor undlod jeg at tilføje artiklen til den til bog-systemet her på siden (som alle kan tilføje sider i og rette, wiki-style). Men den kan jo blive en bog ved siden af "Ny til Linux", for så er det vel fint nok at siden er for "øvede" Linuxbrugere, ikke?


frogmaster
frogmaster's picture
Antal: 3274
Tilmeldt:
20-05-2010
User is offline
Derfor undlod jeg at

#11: Derfor undlod jeg at tilføje artiklen til den til bog-systemet her på siden (som alle kan tilføje sider i og rette, wiki-style). Men den kan jo blive en bog ved siden af "Ny til Linux", for så er det vel fint nok at siden er for "øvede" Linuxbrugere, ikke?

Jo ;-)
... og tak.