Jakie jest uzasadnienie dla katalogu `/ usr`?

107

Jakie jest uzasadnienie dla „zasobów systemowych unix” lub /usrkatalogu opisanego tutaj , który powiela wiele nazw katalogów w katalogu głównym /?

Mój cel: instaluję Oracle JDK po raz kolejny i postanowiłem go po prostu położyć /home/useri czytam trochę, aby sprawdzić, czy to zły pomysł na maszynie dla jednego użytkownika.

H2ONaCl
źródło
1
Twój katalog domowy to idealne miejsce do instalowania oprogramowania innych firm niż root.
Lekensteyn
9
... smutna realizacja, ponieważ myślałeś, że /usroznacza ukryty katalog „użytkownika” przez tyle lat ...
Govind Rai
6
Przez cały czas myślałem, że to „użytkownik”. Podobnie jak pliki binarne użytkownika
Tanner Babcock,

Odpowiedzi:

168

Istnieje krótka wersja i długa wersja twojej odpowiedzi ...

Krótka wersja:

Jako swój link już wspomniano, /usrjest to miejsce dla całego systemu , tylko do odczytu plików. Wszystkie zainstalowane oprogramowanie jest tam. To nie powielać żadnych nazwisk /z wyjątkiem /bina /lib, ale początkowo z innym celu: /bin, /libjest tylko dla binariów i bibliotek potrzebny do uruchomienia , a /usr/bin, /usr/libto dla wszystkich innych plików wykonywalnych i bibliotek. (teraz bądź dobrym chłopcem i nie pytaj o /sbinto, w końcu to krótka wersja)

W dzisiejszych czasach rozróżnienie między „wymaganym do rozruchu” a nie zniknęło, ponieważ większość współczesnych dystrybucji, w tym Ubuntu, nie może poprawnie uruchomić się bez kilku plików /usr. I dlatego następuje silny ruch w kierunku łączenia się, /usr/bini /binprawdopodobnie w niedalekiej przyszłości (być może Ubuntu 12.10?) /binBędzie dowiązaniem symbolicznym /usr/bin.

Ale może jesteś zagubiony /usri /usr/local? Ponieważ tak, istnieje (i powinno być) wiele zduplikowanych nazw katalogów. Więcej o tym później ...

Długa wersja:

W latach 70., w Uniksie (tak, Unix, dużo wcześniej niż Linux), dyskietki miały mało miejsca (brak HD, pamiętasz?), Aw pewnym momencie liczba plików binarnych systemu wzrosła do tego stopnia, że ​​nie zmieściłyby się na jednym dysku, a programiści musieli podzielić je na kilka nośników, a tym samym stworzyć dla nich nowe punkty montowania. /binsystem plików był pełny, więc one zainstalowane nowe pliki binarne w ... /usr/bin. I /usrbył w tym czasie ich ... katalogiem użytkowników !

Po tym, jak nastąpił rozłam (prawie zawstydzający i często opowiadany jako żart / wiedza), zaczęli oni tworzyć „sztuczne” uzasadnienia (i kryteria), aby zdecydować, do kogo pójdzie /bini do czego /usr/bin. Nieformalna zasada brzmiała: „niezbędne” rzeczy idą do /bin, „reszta” idzie do /usr/bin. To samo z /lib. Niedługo potem /usrzapełniły się katalogi związane z systemem, zmieszane z katalogami użytkowników. Tak /homenarodziło się, aby zachować wszystkie katalogi użytkownika i zachować /usrczystość tylko dla „rzeczy” systemowych.

To było na długo przed istnieniem FHS. Kiedy został stworzony, obejmował (i sformalizował) obecną tradycję i zachował nazwę /usr, chociaż w tym czasie nie miał już nic wspólnego z „użytkownikiem”. Więc tak, fantazyjne nazwy „ U NIX s ródło r epository” lub „ U NIX s ystem R esources” są wszystkie nazwy gotowe, a to zbyt późno, aby zmienić jego nazwę tak. (ale nie za późno, aby się /binz nim połączyć )

„Ok, a co /usr/sbin?” , ty pytasz. Cholera, miałem nadzieję, że zapomniałeś. Ok ... /usr/sbindotyczy poleceń, które mogą być (lub mają znaczenie tylko wtedy, gdy) wykonywane przez rootużytkownika, takie jak mounti fdisk.

„Ale czy to nie prawie to samo, co /bin?” . Tak, jasne, ale ...

„Zaczekaj, więc dlaczego też istnieje /sbin? To nie ma sensu!” . Cóż, to z powodu… eee… humm…

Spójrz, trójgłowa małpa za tobą!

Ok, mam nadzieję, że byłeś wystarczająco rozproszony. Iść dalej...

(jeśli uważasz, że oszukuję, tak, masz rację. Ale tak samo jest z „oficjalną” odpowiedzią) niezbędnymi poleceniami, które można wykonać tylko przez rootowanie i muszą być dostępne, zanim jeszcze się zamontujesz /”. Prawda jest taka: linia jest rzeczywiście rozmyta i istnieje wiele starszych nazw, które po prostu „utknęły”, a teraz trudno jest się ich pozbyć.

Więcej o sprawie dotyczącej /usrscalenia , z systemddokumentów:

Historyczne uzasadnienie oddzielenia / bin, / sbin i / lib od / usr nie ma już dziś zastosowania. Zostali rozdzieleni, aby wybrać narzędzia na szybszym dysku twardym (który był mały, ponieważ był droższy) i zawierać wszystkie narzędzia niezbędne do zamontowania wolniejszej partycji / usr. Dzisiaj osobna partycja / usr musi już zostać zamontowana przez initramfs podczas wczesnego rozruchu, co uzasadnia oddzielną dyskusję. Ponadto wiele narzędzi w / bin i / sbin w status quo straciło już możliwość uruchamiania bez wstępnie zamontowanego / usr. Nie ma już żadnego uzasadnionego powodu, aby system operacyjny rozłożyć na wiele hierarchii, stracił on swój cel.

I niesamowita lektura /usrRoba Landleya na temat podziału i jego uzasadnienia:

Zrozumienie podziału bin, sbin, usr / bin, usr / sbin split

dzisiaj

Jeśli chodzi o katalogi instalacyjne, najlepszym sposobem na zrozumienie tego jest myślenie w ten sposób:

  • /usr - wszystkie ogólnosystemowe pliki tylko do odczytu instalowane przez (lub dostarczane) przez system operacyjny

  • /usr/local- ogólnosystemowe pliki tylko do odczytu instalowane przez lokalnego administratora (zwykle ty). I dlatego większość nazw katalogów /usrjest tutaj zduplikowana.

  • /opt- okrucieństwo przeznaczone dla ogólnosystemowego, tylko do odczytu i samodzielnego oprogramowania. Oznacza to, że oprogramowanie, które nie dzieli swoje pliki na bin, lib, share, includejak grzeczne oprogramowanie powinno.

  • ~/.local- odpowiednik na użytkownika /usr/local, to znaczy: oprogramowanie instalowane przez (i dla) każdego użytkownika

  • ~/.local/opt - odpowiednik na użytkownika dla /opt

Gdzie więc zainstalować oprogramowanie?

Powyższa lista stanowi już połowę odpowiedzi na twoje pytanie Oracle JDK, przynajmniej daje kilka wskazówek. Lista kontrolna do „Gdzie mam zainstalować oprogramowanie X?” przechodzi przez:

  • Czy jest to całkowicie samodzielne oprogramowanie z jednym katalogiem, takie jak Eclipse IDE i inne pobrane aplikacje Java, i chcesz, aby było ono dostępne dla wszystkich użytkowników? Następnie zainstaluj/opt

  • Tak jak powyżej, ale nie obchodzą Cię inni użytkownicy, a ja chcę zainstalować tylko dla tego użytkownika? Następnie zainstaluj~/.local/opt

  • Jego pliki są podzielone na wiele katalogów, takich jak bini share, podobnie jak tradycyjne oprogramowanie skompilowane i zainstalowane ./configure && make && sudo make install, i czy powinny być dostępne dla wszystkich użytkowników? Następnie zainstaluj/usr/local

  • Tak jak powyżej, ale tylko dla twojego użytkownika? Następnie zainstaluj~/.local

  • Oprogramowanie instalowane przez system operacyjny lub za pośrednictwem menedżerów pakietów (takich jak Software Center), a co najważniejsze, które modyfikacje lokalne mogą zostać zastąpione, gdy menedżer aktualizacji uaktualni je do nowej wersji ? To idzie do/usr

Uwagi:

  • To wyjaśnia, dlaczego jest domyślny prefiks instalacji skompilowanego oprogramowania /usr/locali dlaczego należy go zmienić na ./configure --prefix=$HOME/.localpodczas instalowania oprogramowania tylko dla własnego użytkownika

  • Być może zauważyłeś, że wszystkie powyższe katalogi są tylko do odczytu (z wyjątkiem, oczywiście, podczas instalowania / usuwania oprogramowania). Zapisywalne pliki (takie jak pliki konfiguracyjne) zwykle przechodzą do /etc(w przypadku oprogramowania systemowego) i ~/.config(w przypadku ustawień poszczególnych użytkowników). Chociaż korzysta z niego wiele starszych programów (i, niestety, niektóre nowoczesne) ~/.<software-name>, zaśmiecają folder domowy miliardami katalogów i plików.

  • ~/.locali ~/.confignie są częścią specyfikacji FHS. FHS nie zajmuje się folderem domowym użytkownika. Są próbą XDG, kolejnej standardowej organizacji ukierunkowanej na środowiska pulpitu (takie jak Gnome, KDE i Unity), aby spróbować ustalić pewne konwencje dotyczące struktury domu użytkownika. Nie wszystkie programy przestrzegają go (na przykład ~/.local/binnie ma go w ustawieniach domyślnych użytkownika $PATH, a logika powinna to robić ) i żaden użytkownik nie jest zmuszony do jego przestrzegania, ale obaj zyskują wiele korzyści interoperacyjnych, jeśli to zrobią.

Mam nadzieję, że to pomoże trochę wyjaśnić. Nie wahaj się pytać o nic, więc mogę poprawić odpowiedź!

(i mam również nadzieję, że puryści nie zabiją mnie za tak niezwykle nieformalny język i wyjaśnienia. Było to celowe i na pewno ma wiele nieścisłości, ale uważam, że to dobry sposób, aby nowicjusz miał krótki przegląd zrozumienia instalacji katalogi racjonalne)

MestreLion
źródło
1
Podsumowałeś to bardzo zwięźle i tak, to prawda - pełna odpowiedź to znacznie dłuższa historia niż powyższe!
papashou
Dlaczego nie? Obowiązuje ta sama logika: atakujący może utworzyć plik wykonywalny w katalogu głównym lub jego podkatalogu, nazwanym na cześć polecenia systemowego.
ignis
3
@ignis: jeśli osoba atakująca ma dostęp do tworzenia i modyfikowania plików w domu użytkownika, oznacza to, że użytkownik ten jest już całkowicie zagrożony i nie $PATHma znaczenia. Atakujący może nawet zmienić to poprzez ~/.profile, więc punkt jest sporny. ~/.local/binjest tak bezpieczny (lub niepewny, jeśli chcesz) jak ~/bin, co jest powszechną praktyką w większości dystrybucji. Pomysł, że użytkownik nie powinien mieć żadnych dir, aby utrzymać i wykonywać skrypty osobowych $PATHjest absurdem.
MestreLion
Jest więc ~/bintak bezpieczny, jak ~/.profilei $PATHnie chroni mnie przed złośliwym oprogramowaniem przeze mnie (które ma uprawnienia do pisania we własnym domu). Przepraszam, nie znałem tego pliku. Dziękuję za wyjaśnienie, przepraszam za mój poprzedni komentarz.
ignis
Im dłuższa historia, tym większa poprawa / bałagan.
smwikipedia