Różnice między / bin, / sbin, / usr / bin, / usr / sbin, / usr / local / bin, / usr / local / sbin

282

Mam sześć katalogów z plikami poleceń. Są to /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bini /usr/local/sbin.

Jakie są między nimi różnice? Jeśli piszę własne skrypty, gdzie mam je dodać?


Związane z:


źródło
1
Powiązane pytanie: unix.stackexchange.com/questions/8656/…
Gabriel Staples
@Keelan Twoje pytanie jest zbliżone do pytania, które wysłałem
WinEunuuchs2Unix

Odpowiedzi:

348

W tym celu zapoznaj się z Standardem hierarchii systemu plików (FHS) dla systemu Linux .

  • /bin: W przypadku plików binarnych używanych przed /usrzamontowaniem partycji. Jest to używane w przypadku trywialnych plików binarnych używanych na bardzo wczesnym etapie uruchamiania lub takich, które muszą być dostępne w trybie uruchamiania dla jednego użytkownika. Pomyśl o plikach binarnych, takich jak cat, lsitp

  • /sbin : Tak samo, ale w przypadku plików binarnych z uprawnieniami administratora (root) .

  • /usr/bin: Taki sam jak pierwszy, ale dla ogólnych plików binarnych całego systemu .

  • /usr/sbin : Tak samo jak powyżej, ale w przypadku plików binarnych z uprawnieniami administratora (root).


jeśli piszę własne skrypty, gdzie mam je dodać?

Żadne z powyższych. Powinieneś używać /usr/local/binlub /usr/local/sbindo skryptów dostępnych w całym systemie. localŚcieżka oznacza, że nie jest zarządzany przez pakietów systemowych (jest to błąd pakietów Debian / Ubuntu).

W przypadku skryptów o zasięgu użytkownika użyj ~/bin(osobistego folderu bin w katalogu domowym).

FHS mówi o /usr/local:

Trzeciorzędna hierarchia danych lokalnych, specyficzna dla tego hosta . Zwykle ma dalsze podkatalogów, na przykład bin/, lib/, share/.

gertvdijk
źródło
więc / bin to miejsce, w którym są zainstalowane wszystkie podstawowe pliki. jak ls, cat, pwd itp? A więc / usr / bin to miejsce, w którym znajdują się aplikacje zainstalowane przez użytkownika? jakie są przykłady tego, co powinno być w / usr / bin?
Patoshi パ ト シ
1
Czy umieszczanie skryptów /binpowoduje jakieś problemy? Przesunąłem swoje skrypty zgodnie z twoją odpowiedzią, ale nadal jestem ciekawy
Rumesh
5
@RumeshSudhaharan nie powinieneś tego robić, ponieważ zarządza nim zarządzanie pakietami. Jeśli jakikolwiek inny pakiet również chce użyć tej ścieżki, nadpisze twój plik. Pliki w pakietach nigdy nie mogą się nakładać (przynajmniej w przypadku oficjalnych repozytoriów), więc jesteś bardziej bezpieczny podczas instalacji w lokalnej ścieżce. Również dla Twojej wygody i bezpieczeństwa. W lokalnej ścieżce nie możesz zepsuć systemu w tak zły sposób i nie możesz przypadkowo zastąpić binarnego systemu.
gertvdijk
8
Podoba mi się wyjaśnienie na stronie błędu:Severity:Serious Certainty:Certain
cutrightjm,
1
Umieściłem niektóre pliki w / usr / local / bin i mogę je wykonać, jednak nie mogę ich edytować, ls -lanic nie pokazuje
M. Reza Nasirloo
6

Już rok temu miałem podobne pytanie: najlepszy katalog do umieszczenia moich skryptów bash?

Katalogi systemowe dla plików binarnych

man hier(hierarchia) zawiera listę wszystkich katalogów. Aby uzyskać te tylko dla plików binarnych, użyj:

$ man hier | grep -E 'bin$|sbin$|^.{7}(/bin)|^.{7}(/sbin)' -A2

       /bin   This directory contains executable programs which are needed in single user
              mode and to bring the system up or repair it.

--
       /sbin  Like  /bin,  this  directory  holds commands needed to boot the system, but
              which are usually not executed by normal users.

--
       /usr/X11R6/bin
              Binaries  which  belong  to the X-Window system; often, there is a symbolic
              link from the more traditional /usr/bin/X11 to here.
--
       /usr/bin
              This  is the primary directory for executable programs.  Most programs exe
              cuted by normal users which are not needed for booting or for repairing the
--
       /usr/local/bin
              Binaries for programs local to the site.

--
       /usr/local/sbin
              Locally installed programs for system administration.

--
       /usr/sbin
              This directory contains program binaries for  system  administration  which
              are  not  essential  for the boot process, for mounting /usr, or for system

Gdzie umieścić własne skrypty?

Aby wszyscy użytkownicy mieli dostęp do twoich skryptów, możesz je umieścić /usr/local/bin. Pamiętaj, że potrzebujesz sudodostępu do dodawania / zmiany plików tutaj. Zobacz: Czy istnieje standardowe miejsce do umieszczania niestandardowych skryptów systemu Linux?

Wstaw własne skrypty identyfikatora użytkownika /home/YOUR_NAME/bin. Pamiętaj, że musisz najpierw utworzyć ten katalog i ponownie uruchomić terminal, aby automatycznie skonfigurować ścieżkę ~/.profile. Zobacz: Jak dodać / home / username / bin do $ PATH?


Co wiem, nie wiem

Zastanawiam się nad pobraniem niektórych bardziej złożonych skryptów bash w Ask Ubuntu i skonfigurowaniem ich przy użyciu skryptów instalacyjnych github. Oto kilka przykładów:

Myślę, że skrypty powinny zostać zainstalowane, w /usr/binktórych znajduje się $ PATH, ale nie jestem jeszcze pewien, jakie jest właściwe miejsce.

WinEunuuchs2Unix
źródło
1
Doceniam twój wysiłek, ale oprócz części „Co wiem, że nie wiem” powtórzyłeś odpowiedź gertvdijk.
danzel
1
@danzel Myślę, że kluczową częścią jest man hiersekcja, której odpowiedź gertvdijk nie dotyczyła. tzn. możesz uzyskać hierarchiczną strukturę katalogu w wierszu poleceń bez konieczności uciekania się do czytania go w Internecie (tj. tutaj).
WinEunuuchs2Unix
1
to interesująca informacja, zgadzam się. Ale gertvdijk wspomniał już o standardzie Hierarchii Systemów Plików (który man hierjest niewystarczającym informacyjnie fragmentem IMO). Może to być jednak moja osobista opinia.
danzel
@danzel Zgadzam się, że strony internetowe mają dużo bardziej dogłębną analizę niż zawartość naszych dysków twardych. Próbuję tylko wskazać, że informacje znajdują się na naszych dyskach twardych bez korzystania z Internetu. Poza link wikipedia cytowany jest brakuje /usr/X11R6/bin i /usr/local/binktóry jest zawarty w man heir.
WinEunuuchs2Unix
@ WinEunuuchs2Unix, re last para; Dlaczego nie, /usr/local/binskoro nie jesteś menedżerem pakietów?
Pacerier