Skillnad mellan bin, sbin, usr/bin, usr/sbin

Den 30 november 2010 skrev David Collier:

Jag märkte att i busybox är länkarna uppdelade i dessa fyra kataloger.
Finns det någon enkel regel för att avgöra i vilken katalog vilken av länkarna ska ligga ...
Till exempel, kill finns i /bin, och killall är i /usr/bin... Jag ser ingen logik i denna division.

Du vet förmodligen att Ken Thompson och Dennis Ritchie skapade Unix på PDP-7 1969. Så runt 1971 uppgraderade de till en PDP-11 med ett par RK05-diskar (1,5 megabyte vardera).

När operativsystemet växte och inte längre fick plats på den första disken (på vilken roten FS fanns), flyttade de en del till den andra, där hemkatalogerna fanns (därför kallades monteringspunkten / usr - från ordet användare). De duplicerade alla nödvändiga OS-kataloger där (/bin, /sbin, /lib, /tmp ...) och lade filerna på en ny disk, eftersom den gamla fick slut på utrymme. Sedan hade de en tredje disk, de monterade den i /home-katalogen och flyttade dit användarnas hemkataloger så att operativsystemet kunde ta allt kvarvarande utrymme på två diskar, och dessa var så många som tre megabyte (Wow!).

Naturligtvis var de tvungna att göra en regel att "när operativsystemet startar måste det kunna montera en andra disk i /usr, så lägg inte program som mount på den andra disken i /usr, annars har du ett kyckling-och-ägg-problem." Det är så enkelt. Och det var i Unix V6 för 35 år sedan.

Uppdelningen av /bin och /usr/bin (och alla sådana kataloger) är ett arv från dessa händelser, en implementeringsdetalj från 70-talet som har kopierats av byråkrater i decennier nu. De ställde aldrig frågan Varförde bara gjorde det. Denna uppdelning upphörde att vara meningsfull redan innan Linux skapades, av flera skäl:

  1. Vid uppstart används en initrd eller initramfs, som tar hand om problem som "vi behöver den här filen före den." Det har vi alltså har redan temporärt filsystem som används för att ladda allt annat.
  2. Delade bibliotek (som lades till i Unix av killarna på Berkley) tillåter dig inte att ändra innehållet i /lib och /usr/lib oberoende av varandra. Dessa två delar måste matcha annars fungerar de inte. Detta hände inte 1974 eftersom de hade en viss självständighet då på grund av statisk länkning.
  3. Billiga hårddiskar bröt 100 megabyte-barriären runt 1990, och ungefär samtidigt dök det upp programvara för partitionsändring (partition magic 3.0 kom ut 1997).

Naturligtvis, eftersom det finns en uppdelning, har vissa människor kommit med regler som motiverar det. Som, rotpartitionen behövs för alla typer av allmänna OS-funktioner, och du måste lägga dina lokala filer i / usr. Eller lägg i / vad AT&T distribuerar, och i /usr vad din distribution, IBM AIX eller Dec Ultrix, eller SGI Irix har lagt till, och /usr/local innehåller filer som är specifika för ditt system. Och sedan bestämde någon att /usr/local inte var rätt ställe att installera ny programvara, så låt oss lägga till /opt! Jag kommer inte bli förvånad om /opt/local också visas ...

Naturligtvis, under loppet av 30 år, på grund av denna separation, har alla möjliga intressanta distributionsspecifika regler kommit och gått. Till exempel, "/tmp rensas vid omstart, men /usr/tmp är det inte." (Och i Ubuntu finns det ingen /usr/tmp i princip, och i Gentoo är /usr/tmp en symbolisk länk till /var/tmp, som nu är föremål för den regeln, och den rensas inte vid omstart. Ja, detta var allt innan Det händer också att roten FS är skrivskyddad, och då behöver du inte skriva något till /usr heller, utan du behöver skriva till /var. till största del kan inte skrivas utom i /etc, som ibland försökte flyttas till /var ...)

Byråkrater som Linux Foundation (som slukade Free Standards Group under dess expansion för år sedan) är glada att dokumentera och komplicera dessa regler utan att någonsin försöka lista ut varför de var där. Vad de inte inser är att Ken och Dennis precis flyttade en del av operativsystemet till sin hemkatalog eftersom RK05-disken på PDP-11 var för liten.

Jag är ganska säker på att busybox bara lägger in filer på samma sätt som det har gjort historiskt. Det finns ingen riktig anledning att göra det förrän nu. Personligen länkar jag bara /bin, /sbin och /lib till liknande kataloger i /usr. När allt kommer omkring försöker människor som arbetar med inbäddad programvara förstå och förenkla ...

Källa: will.com

Lägg en kommentar