/ usr / bin vs / usr / local / bin w systemie Linux

445

Dlaczego jest tak wiele miejsc do umieszczenia pliku binarnego w Linuksie? Jest ich co najmniej pięć:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

A na mojej biurowej szafie nie mam uprawnień do zapisu na niektóre z nich.

Jaki typ pliku binarnego wchodzi w które z nich bin?

Lazer
źródło
28
Zapomniałeś /usr/sbin/.
Cześć71,
15
I ~/bin/na rzeczy osobiste.
Calmarius
1
Obecnie jest mniej miejsc, ponieważ /binzostały połączone /usr/bini /sbinzostały połączone /usr/sbin- patrz The Case for the / usr Merge .
Piotr Dobrogost
Powiązane pytanie: askubuntu.com/questions/308045/…
Gabriel Staples
@Calmarius, co? nie powinieneś używać /usr/local/bin?
Pacerier

Odpowiedzi:

558
  1. /bin(i /sbin) były przeznaczone dla programów, które musiały znajdować się na małej /partycji przed /usrzamontowaniem większych itp. Obecnie służy głównie jako standardowa lokalizacja dla takich kluczowych programów /bin/sh, chociaż pierwotne zamiary mogą być nadal istotne np. W przypadku instalacji na małych urządzeniach wbudowanych.

  2. /sbin, w odróżnieniu od /bin, dotyczy programów do zarządzania systemem (zwykle nie używanych przez zwykłych użytkowników) potrzebnych przed /usrzamontowaniem.

  3. /usr/bin jest przeznaczony dla normalnych programów użytkownika zarządzanych przez dystrybucję.

  4. Istnieje /usr/sbintaki sam związek z tym, /usr/binco /sbinmusi /bin.

  5. /usr/local/binjest dla zwykłych programów użytkownika nie zarządzanych przez menedżera pakietów dystrybucyjnych, np. pakietów skompilowanych lokalnie. Nie należy ich instalować, /usr/binponieważ przyszłe aktualizacje dystrybucji mogą je modyfikować lub usuwać bez ostrzeżenia.

  6. /usr/local/sbin, Jak można się domyślić w tym momencie, to /usr/local/binjak /usr/sbinsię /usr/bin.

Oprócz tego istnieje także /optpakiet monolityczny dla nie-dystrybucji, chociaż zanim zostały one właściwie zintegrowane, różne dystrybucje umieszczają tam Gnome i KDE. Zasadniczo powinieneś zarezerwować go na duże, źle zachowujące się pakiety stron trzecich, takie jak Oracle.

geekozaur
źródło
37
Myślę, że ta odpowiedź świetnie wyjaśnia wyjaśnienie wspólnego zestawu konwencji, ale ten post Roba Landleya jest naprawdę świetną lekturą, jeśli chcesz wgląd w bzdury ... lists.busybox.net/pipermail/busybox/2010- grudnia /074114.html
Subfuzion,
3
refspecs.linuxfoundation.org/fhs.shtml jako bieżące odwołanie kanoniczne. Link autorstwa @kojiro jest nieaktualny i nie ma nowej specyfikacji.
Didier A.
2
Gdzie mogę umieścić kosz, który pobrałem z Internetu? Z twojego opisu wygląda na to, że powinien on być w / usr / local / bin lub / usr / bin. Czy / usr / bin jest czymś, czego nigdy nie powinienem ręcznie dotykać i pozwalam grać tylko menedżerowi pakietów?
Didier A.
3
@DidierA. włóż go ~/bini dodaj ten katalog do ŚCIEŻKI jako użytkownik ... Dzięki za notatkę usunąłem mój bardzo nieaktualny komentarz.
kojiro
3
Odpowiedź na pierwszą część mojego pytania znalazłem tutaj: superuser.com/a/238993/425838 . Pierwszeństwo opiera się na kolejności w PATHzmiennej systemowej , a echo $PATHdla mnie pokazuje /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games, co oznacza, że ​​pliki wykonywalne /usr/local/binmają pierwszeństwo przed tymi, w /usr/binktórych mają pierwszeństwo przed tymi w /bin.
Gabriel Staples
65

Polecam zajrzeć na stronę podręcznika hierarchii systemu plików:

man hier

Który jest również dostępny online, na przykład: http://linux.die.net/man/7/hier

davitenio
źródło
1
To nie odpowiada na pytanie użytkownika.
Billy ONeal,
14
Strona podręcznika zawiera wpis dla każdego z katalogów bin, wyjaśniający, co się w nich dzieje, co było jednym z pytań.
davitenio
34

Filesystem Hierarchy Standard wpis w Wikipedii pomógł mi odpowiedzieć na to pytanie, gdy miałem go, plus ma bardzo tabelę wyjaśniającą.

Fragment tej strony 1 :

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.

1 Pobrano 19 czerwca 2019 r .; bezpośredni link .

Humphrey Bogart
źródło
17

Do sbinkatalogów zawiera programy, które są na ogół tylko administrowanie systemem. Programy dla zwykłych użytkowników nigdy nie powinny w nich wchodzić.

Kilka programów jest potrzebnych podczas uruchamiania i kończy się w /bin/lub /sbin/. Muszą być one dostępne przed zamontowaniem systemów plików. Takie rzeczy mount, fsckktóre są wymagane do sprawdzania i montowania systemów plików, muszą tam być.

Większość programów w pakiecie kończy się w /usr/bin/i /usr/sbin/. Mogą znajdować się w systemie plików innym niż główny system plików. W niektórych przypadkach mogą znajdować się na dysku sieciowym.

Lokalne programy i skrypty należą do /usr/local/bin/i /usr/local/sbin/. To identyfikuje je jako wyraźnie niestandardowe i prawdopodobnie dostępne tylko na stronie.

W celu uzyskania dalszych wyjaśnień spróbuj uruchomić polecenie, man hierktóre powinno dostarczyć opis zalecanej hierarchii systemu plików dla twojej dystrybucji. Możesz także przeczytać o Hierarchii Systemów Plików na Wikipedii

BillThor
źródło
1
+1 Naprawdę zwięzłe wyjaśnienie, jeśli góra jest trochę za duża.
CppLearner
„Lokalne programy i skrypty należą do / usr / local / bin / i / usr / local / sbin /” - Masz na myśli programy lokalne jak w „nie we wszystkich częściach systemu operacyjnego, ale postanowiłem je zainstalować i chcę z nich korzystać „?
Jim Aho,
11

W latach siedemdziesiątych UNIXposiadał wszystkie oficjalne pliki wykonywalne /bini /usr/binznajdował się pod katalogami domowymi użytkowników (np. /usr/dmr), Który był dostępny dla każdego użytkownika do przechowywania własnych plików binarnych, które mogłyby zainteresować również innych.

Rezultatem tego otwarcia /usr/binbyło złomowisko nieudokumentowanego oprogramowania, dlatego Stephen Bournenapisałem, cron scriptże co noc sprawdzał nowe pliki binarne i usuwał wszystkie pliki binarne, które nie miały dokumentacji lub które zostały zaktualizowane bez aktualizacji ich dokumentacji.

Pod koniec lat siedemdziesiątych /usr/binzostał zintegrowany z podstawową dystrybucją systemu operacyjnego i ludzie zaczęli używać go /usr/local/bindo celów poprzedniej wersji open /usr/bin.

Po pewnym czasie, administratorów używany /usr/local/bindo przechowywania non-localoprogramowania, które zostało importowane z sieci (np Usenet) i jako firmy UNIX nie lubił powtarzać tego samego błędu jak w /usr/binkolejny, odbyła się konferencja hierarchii systemu plików około 1987, gdzie wszystkie firmy UNIX zgodził poddać się /usr/local/bini /opt/<vendor>/binzamiast tego użyć .

Niestety dystrybucje Linuksa nie podążyły za tą decyzją ...

schily
źródło
Chociaż jest to bardzo interesujące, nic z tego nie próbuje nawet odpowiedzieć na zadane pytanie, które nie dotyczyło /opti nie dotyczyło systemu UNIX, ale systemu Linux. To jest jak odpowiedź na pytanie „Dlaczego samochody mają 4 koła?” z „Rowery mają 2! Niestety samochody nie”. co nie pomaga OP zrozumieć, dlaczego samochody mają 4.
terdon
2
Jeśli nie możesz użyć podanego wyjaśnienia jako wyjaśnienia tła Linuksa i faktu, że Linux lubi naśladować system UNIX, być może brakuje Ci niezbędnego tła.
schily
1
Ciekawe, ale coś, co mnie dezorientuje i które może być również tylko historyczne. Dzisiaj pobieranie bin online i bin firmowych nie różni się bardzo. Jeśli Joe Blow tworzy program, a ja go pobieram, dlaczego nie umieścić go w / opt / JowBlow / bin zamiast / usr / local / bin. Czy to kwestia zaufanego dostawcy kontra niezaufanego? Wydaje mi się, że to nie ma sensu.
Didier A.
1
Chciałbym poznać tę „dokładną” historię kilka lat temu. a) Zastanawiałem się, dlaczego AIX uniknął / usr / local, używa / opt / IBM i / opt / ibm, a bullfreeware używa / opt / freeware - i dlaczego NALEŻY użyć innej ścieżki (nie tylko / opt / * sbin). Jeśli chodzi o pół-znaczenie w Linuksie - lepsze narzędzia GNU - domyślnym - prefiksem w automatycznych narzędziach jest / usr / local. Szkoda, że ​​autotools (automake, autoconf itp. Nie podążają za ...) Ale wszyscy przetrwamy i dowiadujemy się, gdzie dostawcy distrub. || umieszczają swoje programy.
Michael Felt
Czy możemy zorganizować kolejną z tych konferencji? Tym razem WSZYSCY SŁUCHAJĄ!
MemphiZ