Zgodnie ze standardem hierarchii systemów plików , /opt
służy do „instalacji dodatkowych pakietów aplikacji”. /usr/local
jest „do użytku przez administratora systemu podczas lokalnej instalacji oprogramowania”. Te przypadki użycia wydają się dość podobne. Oprogramowanie nie dołączone do dystrybucji zwykle jest domyślnie skonfigurowane do instalacji w jednym /usr/local
lub /opt
bez określonego wiersza lub powodu, dla którego wybrali.
Czy brakuje mi jakiejś różnicy, czy oba robią to samo, ale istnieją z powodów historycznych?
directory-structure
fhs
Łatki
źródło
źródło
/usr/local
jest to lokalna wersja/usr
systemu plików, podczas gdy/opt
jest miejscem zastępczym dla różnych rzeczy.Odpowiedzi:
Oba są zaprojektowane tak, aby zawierały pliki nienależące do systemu operacyjnego,
/opt
i/usr/local
nie mają zawierać tego samego zestawu plików./usr/local
to miejsce do instalowania plików zbudowanych przez administratora, zwykle za pomocąmake
polecenia (np./configure; make; make install
.). Chodzi o to, aby uniknąć kolizji z plikami, które są częścią systemu operacyjnego, które w przeciwnym razie zostałyby zastąpione lub zastąpiłyby pliki lokalne (np./usr/bin/foo
Jest częścią systemu operacyjnego, podczas gdy/usr/local/bin/foo
jest lokalną alternatywą).Wszystkie pliki poniżej
/usr
można udostępniać między instancjami systemu operacyjnego, chociaż rzadko dzieje się tak w przypadku systemu Linux. Jest to część, w której FHS jest nieco wewnętrznie sprzeczny, ponieważ/usr
jest zdefiniowany jako tylko do odczytu, ale/usr/local/bin
musi być do odczytu i zapisu, aby lokalna instalacja oprogramowania zakończyła się pomyślnie. Standard systemu plików SVR4, który był głównym źródłem inspiracji FHS, zaleca unikanie tego problemu/usr/local
i używanie go/opt/local
zamiast tego./usr/local
jest dziedzictwem oryginalnej BSD. W tym czasie kod źródłowy/usr/bin
komend OS były/usr/src/bin
i/usr/src/usr.bin
, podczas gdy źródło lokalnie opracowanych poleceń było/usr/local/src
, a ich binaria/usr/local/bin
. Nie było pojęcia opakowania (poza kulkami).Z drugiej strony
/opt
jest katalogiem do instalowania wydzielonych pakietów (tj. Pakietów nie stanowiących części dystrybucji systemu operacyjnego, ale dostarczonych przez niezależne źródło), każdy w swoim własnym podkatalogu. Są już zbudowane całe pakiety dostarczone przez niezależnego zewnętrznego dystrybutora oprogramowania. W przeciwieństwie do/usr/local
rzeczy, te pakiety są zgodne z konwencjami katalogowymi (a przynajmniej powinny). Na przykładsomeapp
zostałby zainstalowany w/opt/someapp
, z jednym poleceniem/opt/someapp/bin/foo
, jego plikiem konfiguracyjnym byłby/etc/opt/someapp/foo.conf
, a pliki dziennika w/var/opt/someapp/logs/foo.access
.źródło
Podstawowa różnica polega na tym, że
/usr/local
oprogramowanie nie jest zarządzane przez program pakujący system, ale nadal przestrzega standardowych zasad wdrażania unix.Dlatego trzeba
/usr/local/bin
,/usr/local/sbin
/usr/local/include
etc .../opt
z drugiej strony dotyczy oprogramowania, które nie przestrzega tego i jest wdrażane w sposób monolityczny. Zwykle obejmuje to oprogramowanie komercyjne i / lub wieloplatformowe, które jest spakowane w stylu „Windows”.źródło
Są bardzo podobne, a użycie jednego lub drugiego jest bardziej kwestią opinii. Czasopismo Linux miał ten punkt / kontrapunkt dyskusję o dokładnym ten temat tutaj .
źródło
Dla mnie osobiście tak powiedział Bill w linku @ philfr:
Niestety, większość
make install
skryptów wpycha pliki/usr/local
zamiast tworzyć tam tylko dowiązanie symboliczne: - /źródło
make install
docelowy plik wypychający do/usr/local
; Ta funkcjonalność jest łatwo zmieniane przez przekazanie--prefix=
parametru wiersza polecenia do./configure
skryptu, lub jeśli nie ma./configure
skrypt, można przekazać parametr domake
celu tak:make --prefix=/usr install
./opt/foo-1.1
i/opt/foo-1.2
. Kiedy aktualizuję,foo
dowiązanie symboliczne/usr/local/bin
wskazuje na foo-1.2. Jeśli z jakiegoś powodu muszę wycofać, po prostu zastępuję dowiązanie symboliczne takim, które wskazuje na foo-1.1. Jeśli 1.2 jest w porządku po kilku tygodniach, szybkierm -rf /opt/foo-1.1
usuwanie starszej wersji szybko i czysto.Po pierwsze, nie sądzę, że istnieje ścisła odpowiedź; różni administratorzy będą mieli różne opinie, w zależności od ich pochodzenia. Historycznie
/usr/local
było pierwsze; była to konwencja w Berkley, IIRC. W pewnym momencie rozwoju Systemu V, jeśli się nie mylę (to było dawno temu, a ja nie robiłem notatek), pojawiła się decyzja lub chęć zamontowania/usr
tylko do odczytu, co oznaczało, że nie można dodać do niego nowego oprogramowania; być może dlatego/opt
został wynaleziony. Tak się składa, że istniało tak wiele istniejących programów, które napisały,/usr
że ten pomysł nigdy tak naprawdę się nie zaczął.Osobiście preferuję
/opt
oddzielny podkatalog dla każdego produktu; powoduje to, że usunięcie produktu jest prostym przypadkiemrm -fr
. Ale jeśli całe twoje oprogramowanie jest zainstalowane za pomocą dobrego menedżera pakietów, nie ma to znaczenia, a jeśli instalowane oprogramowanie nie przestrzega ściśle tych konwencji i zapisuje konfiguracje/usr
itp., To nie ma znaczenia, chociaż z przeciwnych powodów.źródło
Mam nieco inne podejście do tej kwestii.
Choć wszystko w jlliagre „s odpowiedź jest poprawna, praktyczne zastosowanie dla mnie, podczas wdrażania oprogramowania w klastrze, sprowadza się do domyślnych zmiennych środowiskowych i domyślnej ponownego wykorzystania bibliotekami.
Mówiąc najprościej -
/usr/local
a wszystkie jego potomne katalogi znajdują się w odpowiednich zmiennych env, takich jakPATH
iMANPATH
, i/usr/local/lib{,64}
są w ldconfig's (/etc/ld.so.conf.d/
)./opt/
OTOH nie jest - co jest zarówno korzystne, gdy wymaga współistnienia wielu wersji lub sprzecznych pakietów w systemie, ale wymaga pewnego rodzaju zarządzania środowiskiem (np. Modułów środowiska lub kolekcji oprogramowania ), i jest niekorzystne, ponieważ potencjalnie „zmarnowałoby” „miejsce do przechowywania poprzez kopiowanie bibliotek współdzielonych, ponieważ każda instalacja/opt
może być całkowicie samodzielna.Dla wspólnego charakteru
/usr/local
pracy zakłada się, że np. Pliki binarne są instalowane bezpośrednio na/usr/local/bin
(i stronach man odpowiednio/usr/local/share/man/...
) zamiast/usr/local/app/{bin,share/man,...}
itp.źródło