Vraag Wat is de reden voor de `/ usr` directory?


Wat is de reden voor de "Unix systeembronnen", of /usr directory, zoals beschreven hier, dat veel van de directorynamen in de hoofdmap repliceert /?

Mijn doel: ik installeer Oracle JDK voor de zoveelste keer en besloot deze keer om het gewoon onder te doen /home/user en ik lees gewoon een beetje rond om te zien of het een slecht idee is op een enkele gebruikerscomputer.


88
2018-05-02 16:46


oorsprong


Uw thuismap is een perfecte plaats om software van derden te installeren als niet-root. - Lekensteyn
... het droevige besef omdat je dacht /usr betekende een verborgen "gebruikers" directory voor zoveel jaren ... - Govind Rai
Ik dacht echt dat dit de hele tijd "gebruiker" was. Net als binaire bestanden van gebruikers - Tanner Babcock


antwoorden:


Er zijn de korte versie en de lange versie van je antwoord ...

Verkorte versie:

Zoals je link al zei, /usr is een plaats voor systeembrede, alleen lezen bestanden. Dus al je geïnstalleerde software gaat daarheen. Het dupliceert geen namen van / behalve /bin en /lib, maar oorspronkelijk met een ander doel: /bin, /lib is alleen voor binaire bestanden en bibliotheken vereist voor opstarten, terwijl /usr/bin, /usr/lib is voor alle andere uitvoerbare bestanden en bibliotheken. (wees nu een goede jongen en vraag er niet naar /sbin, dit is tenslotte de korte versie)

Tegenwoordig is het onderscheid tussen "vereist voor opstarten" minder geworden, omdat de meeste moderne distributies, inclusief Ubuntu, niet goed kunnen opstarten zonder verschillende bestanden van /usr. En daarom is er een sterke beweging naar samenvoeging /usr/bin en /bin, dus waarschijnlijk in de nabije toekomst (Ubuntu 12.10 misschien?) /bin zal een symbolische link naar zijn /usr/bin.

Maar misschien ben je verwarrend /usr en /usr/local? Omdat ja, er is (en zou moeten zijn) een lot van dubbele directorynamen. Daarover later meer ...

Lange versie:

Terug in de jaren 70, in Unix (ja, Unix, ver voor Linux), hadden diskettes weinig ruimte (geen HD, weet je nog?), En op een gegeven moment groeiden de binaire bestanden van het systeem te veel in aantal en grootte tot een punt dat ze niet zouden passen op een enkele schijf, en ontwikkelaars moesten ze op verschillende media splitsen en zo nieuwe mount-punten voor hen creëren. /bin bestandssysteem was vol, dus installeerden ze de nieuwe binaries bij ... /usr/bin. En /usr was op dat moment hun ... gebruiker directory!

Nadat de (bijna gênante en vaak vertelde als een grap / lore) split plaatsvond, begonnen ze "kunstmatige" rechtvaardigingen (en criteria) te maken om te beslissen wat er naar toe zou gaan /bin en wat zou gaan /usr/bin. De informele regel was: "essentiële" dingen gaan naar /bin, "de rest" gaat naar /usr/bin. Hetzelfde met /lib. Het duurde niet lang daarvoor /usr werd druk met systeemgerelateerde mappen, vermengd met gebruikersdirs. Dus /home werd geboren, om alle gebruikersgerelateerde mappen te behouden en te bewaren /usr alleen opruimen voor systeem "spullen".

Dit was lang voordat FHS bestond. Toen het werd gemaakt, omarmde (en formaliseerde) de huidige traditie en werd de naam bewaard /usr, hoewel het in die tijd al niets meer met "gebruiker" te maken had. Dus ja, de mooie namen "U NIX s ource r epository "of"U NIX s ystem r esources "zijn allemaal verzonnen namen, en het is te laat om het toch te hernoemen. (maar niet te laat om samen te voegen /binernaar toe)

"Ok, hoe zit het? /usr/sbin?", je vraagt. Verdorie, ik hoopte dat je het vergeten was. OK... /usr/sbin is voor opdrachten die alleen kunnen (of alleen zinvol zijn) uitgevoerd door de root gebruiker, zoals mount en fdisk.

"Maar is dat niet bijna hetzelfde als /bin?". Ja, zeker, maar ...

"Wacht, waarom dan is er een /sbin te? Klinkt niet logisch! ". Nou, dat komt door ... eh ... humm ..

Kijk, een driekoppige aap achter je!

Ok, hopelijk ben je voldoende afgeleid. Verder gaan...

(als je denkt dat ik valsspeel, ja, je hebt gelijk, maar dat geldt ook voor de "officiële" antwoord "essentiële commando's die alleen door root kunnen worden uitgevoerd en beschikbaar moeten zijn voordat je zelfs maar mount /") De waarheid is: de regel is inderdaad wazig en er zijn veel oude namen die gewoon" vastzitten "en nu is het vrij moeilijk om ervan af te komen.

Meer over de Case voor de /usr samensmelten, van systemd docs:

De historische rechtvaardiging voor een / bin, / sbin en / lib gescheiden van / usr is vandaag niet meer van toepassing. Ze werden afgesplitst om geselecteerde tools op een snellere harde schijf te hebben (wat klein was omdat het duurder was) en om alle tools te bevatten die nodig zijn om de langzamere / usr-partitie te mounten. Vandaag moet een aparte / usr-partitie al tijdens de vroege opstart door de initramf's worden gemount, waardoor de reden voor een afgesplitste moot wordt gemaakt. Bovendien verloren veel tools in / bin en / sbin in de status-quo al de mogelijkheid om te draaien zonder een voorafgemonteerde / usr. Er is geen geldige reden meer om het besturingssysteem over meerdere hiërarchieën te verspreiden, het heeft zijn doel verloren.

En een geweldige lezing over de /usr split en de grondgedachte, door Rob Landley:

De bin, sbin, usr / bin, usr / sbin split

Vandaag de dag

Wat de installatiemappen betreft, is uw beste manier om dit te begrijpen, op deze manier denken:

  • /usr - alle systeem-brede, alleen-lezen bestanden geïnstalleerd door (of geleverd door) het besturingssysteem

  • /usr/local - systeemomvattende, alleen-lezen bestanden geïnstalleerd door de lokale beheerder (meestal u). En dat is waarom de meeste directorynamen uit /usr worden hier gedupliceerd.

  • /opt - een gruweldaad die bedoeld is voor systeemomvattende, alleen-lezen en op zichzelf staand software. Dat wil zeggen, software die hun bestanden niet splitst bin, lib, share, include zoals goed opgevoede software zou moeten zijn.

  • ~/.local - de tegenpartij per gebruiker /usr/local, dat wil zeggen: software geïnstalleerd door (en voor) elke gebruiker

  • ~/.local/opt - de tegenpartij per gebruiker /opt

Dus waar software te installeren?

De bovenstaande lijst is al de helft van het antwoord van je Oracle JDK-vraag, het geeft tenminste enkele aanwijzingen. De checklist voor "Waar moet ik software X installeren?" noemt zich:

  • Is het een volledig op zichzelf staande, enkele directorysoftware, zoals Eclipse IDE en andere gedownloade Java-apps, en wilt u dat deze beschikbaar is voor alle gebruikers? Installeer vervolgens in /opt

  • Hetzelfde als hierboven, maar u geeft niet om andere gebruikers en ik wil alleen voor uw gebruiker installeren? Installeer vervolgens in ~/.local/opt

  • De bestanden zijn verdeeld over meerdere mappen, zoals bin en share, zoals traditionele software die is gecompileerd en geïnstalleerd met ./configure && make && sudo make install, en zou voor alle gebruikers beschikbaar moeten zijn? Installeer vervolgens in /usr/local

  • Hetzelfde als hierboven, maar alleen voor uw gebruiker? Installeer vervolgens in ~/.local

  • Software geïnstalleerd door het besturingssysteem of via pakketbeheerders (zoals Software Center) en, belangrijker nog, die elke lokale wijziging kan overschrijven wanneer updatebeheer het naar een nieuwe versie upgradet? Het gaat naar /usr

Opmerkingen:

  • Dit verklaart waarom het standaard installatievoorvoegsel voor gecompileerde software dat is /usr/localen waarom zou u dit moeten veranderen? ./configure --prefix=$HOME/.local bij het installeren van software voor alleen uw eigen gebruiker

  • Je hebt dat misschien gemerkt alle boven mappen zijn alleen lezen (behalve natuurlijk wanneer u software installeert / verwijdert). De beschrijfbare bestanden (zoals configuratiebestanden) gaan meestal naar /etc (voor systeembrede software) en ~/.config (voor instellingen per gebruiker). Hoewel veel oudere software (en helaas ook wat modern) gebruikt ~/.<software-name>, verbergt je thuismap met miljarden mappen en bestanden.

  • ~/.local en ~/.config zijn geen onderdeel van de FHS-specificatie. FHS heeft geen betrekking op de thuismap van de gebruiker. Ze zijn een poging van XDG, een andere standaardorganisatie gericht op Desktop Environments (zoals Gnome, KDE en Unity), om te proberen een aantal conventies in te stellen met betrekking tot een structuur van het huis van de gebruiker. Niet alle software houdt zich eraan (bijvoorbeeld, ~/.local/bin bevindt zich niet in de standaardinstelling van de gebruiker $PATH, terwijl dit door logica zou moeten)en geen enkele gebruiker wordt gedwongen om het te volgen, maar beiden krijgen veel interoperabiliteitsvoordelen als ze dat doen.

Ik hoop dat dit helpt om dingen een beetje te verduidelijken. Voel je vrij om alles te vragen, zodat ik het antwoord kan verbeteren!

(en ik hoop ook dat puristen me niet vermoorden voor zo'n extreem informele taal en uitleg. Het was opzettelijk en het heeft ongetwijfeld veel onnauwkeurigheden, maar ik geloof dat het een goede manier is om een ​​nieuwkomer een kort overzicht te geven over het installeren directories rationales)


135
2018-05-11 20:49



Je vatte het heel beknopt samen en ja, het is waar - het complete antwoord is een veel langer verhaal dan het bovenstaande! - papashou
Waarom niet? Dezelfde logica is van toepassing: een aanvaller kan een uitvoerbaar bestand onder het huis maken of een submap van het programma, genoemd naar een systeemopdracht. - ignis
@ignis: als een aanvaller toegang heeft om bestanden te maken en aan te passen onder het huis van een gebruiker, dan is die gebruiker al volledig in gevaar gebracht, en $PATH is niet relevant. De aanvaller kan zelfs veranderen dat via ~/.profile, dus jouw punt is onbeschoft. ~/.local/bin is net zo veilig (of onveilig, als je wilt) als ~/bin, wat in de meeste distributies gebruikelijk is. Het idee dat een gebruiker niet zou moeten hebben ieder dir om persoonlijke scripts te bewaren en uit te voeren $PATHis absurd. - MestreLion
Dus, ~/bin is net zo veilig als ~/.profile, en $PATH beschermt me niet tegen malware van mij (die de toestemming heeft om in mijn eigen huis te schrijven). Ik kende dit bestand niet, het spijt me. Bedankt voor de toelichting, sorry voor mijn vorige opmerking. - ignis
Hoe langer de geschiedenis is, hoe meer verbetering / rommel er is. - smwikipedia