Co to jest / usr / local / bin?


85

Wcześniej korzystałem z terminala w ograniczonym zakresie do wchodzenia i wychodzenia z katalogów oraz zmiany dat plików za pomocą touchpolecenia. Zdałem sobie sprawę z pełnego zakresu terminala po zainstalowaniu zabawnego skryptu na komputerze Mac i konieczności chmod 755uruchomienia pliku, aby później był wykonywalny.

Chciałbym jednak wiedzieć, co to /usr/local/binjest. /usr/Zakładam, że jest użytkownikiem komputera. Nie jestem jednak pewien, dlaczego /local/tam jest. Oczywiście oznacza lokalny komputer, ale skoro jest na komputerze (lub serwerze), czy naprawdę byłby potrzebny? Nie /usr/binbyłoby dobrze?

A co to jest /bin? Dlaczego ten obszar jest zwykle używany do instalowania skryptów na terminalu?

Odpowiedzi:


77

/usr/local/bin dotyczy programów, które może uruchomić normalny użytkownik.

  • /usr/localHierarchia jest do wykorzystania przez administratora systemu podczas instalacji oprogramowania lokalnie.
  • Przed aktualizacją oprogramowania systemowego należy zabezpieczyć go przed nadpisaniem.
  • Może być używany do programów i danych, które można udostępniać w grupie hostów, ale których nie można znaleźć w /usr.
  • Oprogramowanie zainstalowane lokalnie musi być umieszczone w /usr/localkatalogu / usr, chyba że jest instalowane w celu wymiany lub aktualizacji oprogramowania /usr.

To źródło pomaga objaśnić standard hierarchii systemu plików na głębszym poziomie.

Możesz znaleźć ten artykuł na temat używania i nadużywania/usr/local/bin interesujących.


„” „chyba że jest instalowany w celu zastąpienia lub aktualizacji oprogramowania w / usr” „”, co oznacza?
Pacerier

63

/ usr /, zakładam, że jest użytkownikiem komputera.

Blisko.

Unix zaczynał jako system operacyjny dla wielu użytkowników, więc nie jest to „użytkownik”, to „ użytkownicy ” w liczbie mnogiej.

Przed wydaniem AT&T Unix System V Release 4 (SVR4) w 1988 r. Z narzędziami zarządzania użytkownikami domyślnie tworzącymi katalogi domowe użytkowników /home, konwencjonalna lokalizacja to /usr.¹ Twój $HOMEkatalog mógł znajdować /usr/jfwsię w pudełku Systemu III .

/usrrównież zawarte, wtedy jak i teraz /usr/bin, /usr/libitp Doświadczenie wykazało, że segregacji katalogów domowych była dobra praktyka zarządzania systemem, więc ze /homezmianą polityki w SVR4, to pozostawił wszystko, co obecnie uważamy za przynależności /usr.

/usrwciąż miał dobry powód, by trzymać się tej nazwy: pozostały tylko pliki, które nie musiały być dostępne, dopóki system nie uruchomił się wystarczająco daleko, by obsługiwać normalne interaktywne użytkowanie. Oznacza to, że pozostały zorientowane na użytkownika części systemu operacyjnego. Oznaczało to, że /usrmoże on znajdować się na innym woluminie fizycznym, co było dobrą rzeczą w czasach 92 MB dysków twardych wielkości pralek .

Wczesne systemy uniksowe /usrstarały się unikać podstawowych plików systemu operacyjnego, aby nadal można było uruchomić system w trybie pojedynczego użytkownika², nawet jeśli z /usrjakiegoś powodu wolumin był niemożliwy do zamontowania . Wolumin główny zawierał wystarczające narzędzia do przywrócenia /usrwoluminu online.

Kilka smaki Unix teraz pominąć tę starą zasadę konstrukcyjną, ponieważ nawet małe systemy wbudowane mają wystarczająco dużo miejsca zarówno dla tradycyjnych plików głośności korzeń i wszystko /usrna jednym volume.³ Red Hat Enterprise Linux, Solaris i Cygwin dowiązanie symboliczne /bindo /usr/bini /libaby /usr/libtak, że nie ma dłuższa różnica między tymi katalogami.

... / local / ... oczywiście oznacza lokalny komputer ...

Tak. Odnosi się do faktu, że pliki poniżej /usr/localpowinny być specyficzne dla tego pojedynczego systemu. Pliki, które są w jakikolwiek sposób ogólne, powinny znajdować się gdzie indziej.

Ma to również swoje korzenie w sposobie, w jaki systemy Unix były powszechnie używane dekady temu, kiedy wszystko to zostało znormalizowane. Ponownie, dyski twarde w tamtych czasach były nieporęczne, naprawdę drogie i mało przechowywane według dzisiejszych standardów. Aby zaoszczędzić pieniądze i miejsce na dyskach, laboratorium komputerowe pełne skrzynek Unix często /usrdzieliło większość z NFS lub innego sieciowego protokołu udostępniania plików, więc każde pudełko nie musiało mieć własnej nadmiarowej kopii. Pliki specyficzne dla pojedynczego pole pójdzie pod /usr/local, co byłoby oddzielnym tomem od /usr.

To historyczne dziedzictwo jest powodem, dla którego większość programów uniksowych innych firm jest instalowana /usr/localręcznie. Większość takiego oprogramowania pozwala zainstalować pakiet w innym miejscu, ale nie dokonując wyboru, otrzymujesz bezpieczne ustawienie domyślne, które nie koliduje z innymi popularnymi lokalizacjami instalacji o bardziej szczegółowych celach.

Istnieją dobre powody, aby zamiast tego instalować oprogramowanie w innym miejscu. Zespół Apple MacOS robi to, gdy buduje, powiedzmy, bashz kodu źródłowego GNU Bash . Używają /jako prefiksu instalacji, zastępując /usr/localdomyślny, więc Bash kończy się w /bin.

Innym przykładem jest sposób, w jaki starsze systemy Linux segregowały swoje oprogramowanie GUI /usr/X11R6, aby oddzielić je od tradycyjnego wiersza poleceń i cursesoprogramowania opartego na oprogramowaniu. Dokonano tego po prostu nadpisując domyślny /usr/localprzedrostek za pomocą /usr/X11R6.⁵

A co to jest / bin?

Jest skrótem od „binarny”, co w tym kontekście oznacza „plik, który nie jest zwykłym tekstem”. Większość takich plików to pliki wykonywalne w systemie Unix, więc te dwa terminy stały się synonimami w niektórych kręgach. („Proszę, zbudujcie mnie plik binarny dla RHEL 7, Fred.”)

Pliki tekstowe na polu Unix żyć gdzie indziej: /etc, /usr/include, /usr/share, itd.

Dawno, dawno temu nawet skrypty powłoki - które są zwykłymi plikami tekstowymi - były trzymane poza binkatalogami, ale ta linia również się zacierała. Dziś binkatalogi zazwyczaj zawierają dowolny plik wykonywalny, czy to ściśle „binarny”, czy nie


Przypisy i dygresje :

  1. Prymitywna natura narzędzi do zarządzania użytkownikami przed SVR4 oznaczała, że HOME=/usr/$NAMEschemat został jedynie udokumentowany jako konwencja, a nie domyślnie wymuszony przez narzędzia programowe.

    Możesz to zobaczyć na str. 4-8 „ Podręcznika administratora systemu AT&T Unix System V Release 3.2 : tutaj AT&T zaleca stary /usr/$NAMEschemat ostatniej ostatniej wersji Unixa przed wydaniem SVR4.

    W starszych systemach uniksowych administratorzy systemu dość często wybierali inny schemat, który był dla nich bardziej sensowny. Ludzie będący ludźmi oznaczali, że wymyślono wiele różnych schematów.

    Jednym ze schematów, z którym się zetknąłem, /home/$NAMEstał się standardem /u/$NAME.

    Inny system użyłem na początku 1990 mieliśmy tak wielu użytkowników, którzy nie mogli dopasować wszystkie katalogi domowe na jednym tomie fizycznej, dlatego stosowany schemat podobny /u1/$NAME, /u2/$NAMEi tak dalej, o ile pamiętam. To, na którym dysku skończył się Twój katalog domowy, było po prostu kwestią tego, który z nich miał miejsce w momencie tworzenia konta.

  2. Możesz uruchomić system macOS w trybie pojedynczego użytkownika, przytrzymując go Cmd-Spodczas uruchamiania. Puść, gdy ekran zmieni kolor na czarny i zobaczysz jasnoszary tekst. To tak, jakby działało pod terminalem, ale przejmuje cały ekran, ponieważ GUI jeszcze się nie uruchomił.

    Uważaj, biegniesz jak root.

    Wpisz „exit” w monicie użytkownika root, aby wyjść z trybu jednego użytkownika i kontynuować uruchamianie w trybie GUI dla wielu użytkowników.

  3. Uniksowe systemy operacyjne, które nadal wydają się utrzymywać krytyczne pliki trybu pojedynczego użytkownika, /usrmogą w rzeczywistości tego nie robić. Kiedyś sprawiłem, że pudełko FreeBSD 9 nie uruchamia się, przechodząc /usrna wolumin ZFS. Zapomniałem, że funkcje ZFS-on-root nie wylądowały aż do FreeBSD 10, tworząc Catch 22 : system operacyjny potrzebował plików /usrdo zamontowania /usr!

    To było wystarczająco złe, ale gdyby FreeBSD 9 nadal /usrnie pozwalał na uruchomienie jednego użytkownika , mógłbym to naprawić. Ponieważ nie uruchomiłby się nawet w trybie pojedynczego użytkownika, ponieważ nie można go /usrbyło zamontować, jasne jest, że tradycja została w jakiś sposób naruszona. Musiałem uruchomić komputer z ratunkowej płyty CD, aby ponownie uruchomić system.

  4. Tutaj też otrzymujemy /usr/share: segreguje pliki, które mogą być współużytkowane nawet między skrzynkami Unix z różnymi typami procesorów. Zwykle pliki tekstowe: strony podręcznika, słownik itp.

  5. „X11R6” odnosi się do wersji systemu X Window, która stanowiła podstawę graficznych interfejsów systemu Linux w czasie, gdy ta konwencja była powszechna. Systemy Linux generalnie przestały segregować oprogramowanie GUI w momencie, gdy X11R6 zostało zastąpione X.Org .

  6. Oryginalne systemy uniksowe zachowały swoje podstawowe skrypty powłoki /etc, aby uniknąć mieszania ich z prawdziwymi plikami binarnymi /bin.


3
Uwielbiałem to zdjęcie pralki!
asgs

@Warren, Jakie są godne uwagi systemy operacyjne przed systemem III?
Pacerier

@Pacerier: Wersje UNIX od 1 do 7, UNIX / 32V, 1BSD do 4BSD nie uwzględniają wersji kropkowych 4BSD (4.1BSD było mniej więcej równoczesne z AT&T Unix System III) i PWB Unix. Źródło . Dlaczego pytasz i co to ma wspólnego z tym pytaniem?
Warren Young,

@Warren, cóż, mogły w jakiś sposób
wpłynąć na defacto

@Pacerier: Będę przy swoim twierdzeniu: przed Systemem V nie było „standardu”, tylko konwencje i lokalne praktyki.
Warren Young,

9

Poleciłbym odwoływać się do Wikipedii w celu uzyskania ogólnych pytań dotyczących struktury, obejmie ona podstawy.

Aby jednak bezpośrednio odpowiedzieć na twoje pytanie:

  • / usr to luźno niekrytyczne biblioteki systemowe i pliki wykonywalne
  • / usr / local znów jest luźno dla bibliotek niesystemowych i plików wykonywalnych

Dlatego masz tendencję do znajdowania podobnej struktury między nimi; / usr / {, local /} {bin, sbin, lib}. Będąc nowym w powłoce, ten kawałek z {} jest rozszerzeniem powłoki. Spróbuj wykonać

ls -ld /usr/{,local/}{bin,sbin,lib}

z lokalnej powłoki, aby zobaczyć, jak to działa.


9

/usr/local/bin pokazuje unikatowe korzenie najnowszego systemu Mac OS (pod nim opartego na BSD).

  • „usr” oznacza zasoby systemowe UNIX. Jest to miejsce, w którym przechowywane są programy systemowe i biblioteki.
  • „lokalny” oznacza zasoby, które nie zostały dostarczone ze standardową dystrybucją i zwykle są kompilowane i utrzymywane dla poszczególnych witryn.
  • „bin” oznacza skompilowane pliki binarne.

Zmieniło się to od wczesnych wdrożeń UNIX do Linuksa i BSD, ale konwencja pozostała. Teraz /usr/binbyłoby dla „głównych” lub podstawowych programów i bibliotek, gdzie /usr/local/binbyłoby dla dodatkowych i niekrytycznych programów i bibliotek.


12
Korzystam z Unixa krótko po upadku muru berlińskiego i do dziś nie słyszałem o rozszerzeniu „Unix System Resources” dla „usr”; to backronym. „usr” ma swoją nazwę, ponieważ pierwotnie znajdowały się katalogi domowe użytkowników. Oznacza to, że jeśli logowałeś się na starym polu Systemu III, początkowym katalogiem roboczym byłby /usr/nzwulfindomyślnie. Kolejny wspólny schemat. zanim /homeprzejął program SVR4 , był /u. Jeden system, z którego korzystałem wcześniej, miał tak wielu użytkowników, że potrzebowali wielu fizycznych dysków do przechowywania plików użytkownika, więc mieli takie rzeczy /u/d5/tangent.
Warren Young,

3
@Warren Ja też tego nie słyszałem i przez jakiś czas przeszukiwałem Google; wygląda na to, że jest sporo backronimów
Michael Mrozek

4

/usr/local/bin jest najpopularniejszą domyślną lokalizacją plików wykonywalnych, zwłaszcza tych typu open source.

Jest to jednak prawdopodobnie zły wybór, ponieważ w systemach Unix /usrna początku lat dziewięćdziesiątych został znormalizowany, aby zawierał hierarchię plików należących do systemu operacyjnego, a zatem może być współdzielony przez wiele systemów korzystających z tego systemu operacyjnego.

Ponieważ pliki te są statyczne, /usrsystem plików można zamontować tylko do odczytu. /usr/localpokonuje ten standard, ponieważ jest projektowany lokalnie, dlatego nie jest współdzielony, więc należy go czytać i zapisywać, aby umożliwić lokalną kompilację i nie jest częścią systemu operacyjnego. Szkoda, że /opt/localzamiast tego nie wybrano czegoś takiego ...


1

Polecam używać /usr/localprogramów komercyjnych, które możesz zainstalować, takich jak Mathematica. Podczas konfiguracji umieść go we własnej partycji. Po uaktualnieniu systemu operacyjnego ta partycja nie zostanie zakłócona i nie będziesz musiał ponownie instalować jej zawartości. Używaj go więc do przechowywania rzeczy między aktualizacjami systemu operacyjnego.

Z /hometego samego powodu upewnij się, że podałeś własną partycję.


0

Ta odpowiedź może być również pomocna.

/ usr / local

Pierwotnym pomysłem /usr/localbyło posiadanie osobnego („lokalnego”) katalogu / usr na każdej maszynie oprócz tego /usr, który mógłby być montowany tylko do odczytu z innego miejsca. Kopiuje strukturę /usr.

Obecnie /usr/localjest powszechnie uważany za dobre miejsce do przechowywania programów kompilowanych samodzielnie lub programów innych firm. /usr/localHierarchia jest do wykorzystania przez administratora systemu podczas instalacji oprogramowania lokalnie. Przed aktualizacją oprogramowania systemowego należy zabezpieczyć go przed nadpisaniem.

Może być używany do programów i danych, które są współużytkowane przez grupę hostów, ale nie znajdują się w /usr. Oprogramowanie zainstalowane lokalnie musi być umieszczone w nim /usr/local, /usrchyba że jest instalowane w celu wymiany lub aktualizacji oprogramowania /usr.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.