Яка різниця між / opt та / usr / local?


403

Згідно стандарту ієрархії файлової системи , /optпризначений для "встановлення додаткових програмних пакетів програм". /usr/local"для використання системним адміністратором при локальній установці програмного забезпечення". Ці випадки використання здаються досить схожими. Програмне забезпечення, що не входить до дистрибутивів, зазвичай за замовчуванням конфігурується для встановлення /usr/localабо /optбез конкретної рими, або з причини, яку вони обрали.

Чи є якась різниця, якої я пропускаю, чи обидва роблять те саме, але існують з історичних причин?


3
Я розумію, що /usr/localце локальна версія /usrфайлової системи, тоді як /optє власником місця для різного вмісту .
yasouser


Поза темою з історичних причин: розуміння розбиття bin, sbin, usr / bin, usr / sbin .
Олексій

Відповіді:


357

Хоча обидва розроблені так, щоб містити файли, що не належать до операційної системи, /optі /usr/localне призначені для того, щоб вони містили однаковий набір файлів.

/usr/local- це місце для встановлення файлів, побудованих адміністратором, як правило, за допомогою makeкоманди (наприклад, ./configure; make; make install). Ідея полягає у тому, щоб уникнути сутичок з файлами, що входять до складу операційної системи, які б або перезаписати, або перезаписати локальні в іншому випадку (наприклад, /usr/bin/fooце частина ОС, а /usr/local/bin/fooє локальною альтернативою).

Усі файли в розділі /usrдоступні між екземплярами ОС, хоча це рідко робиться в Linux. Це частина, де FHS трохи суперечлива, як /usrце визначено, лише для читання, але її /usr/local/binпотрібно читати і записувати для локальної установки програмного забезпечення, щоб досягти успіху. Стандарт файлової системи SVR4, який був основним джерелом натхнення FHS, рекомендує уникати /usr/localта використовувати /opt/localзамість цього, щоб подолати цю проблему.

/usr/localє спадщиною від оригінальної BSD. У той час, вихідний код /usr/binкоманд ОС були /usr/src/binі /usr/src/usr.bin, в той час як джерело локально розроблених команд був /usr/local/src, і їх виконавчі файли в /usr/local/bin. Поняття про упаковку (поза тарботами) не було.

З іншого боку, /optце каталог для встановлення нерозділених пакетів (тобто пакетів, які не входять до дистрибутиву Операційної системи, але надаються незалежним джерелом), кожен з яких має свій власний підкаталог. Вони вже склали цілі пакети, надані незалежним дистрибутором програмного забезпечення. На відміну від /usr/localматеріалів, ці пакунки дотримуються конвенцій каталогів (або, принаймні, повинні). Наприклад, someappвін буде встановлений у /opt/someapp, якщо одна з його команд буде /opt/someapp/bin/foo, його файл конфігурації буде /etc/opt/someapp/foo.conf, а його файли журналу /var/opt/someapp/logs/foo.access.


53
/ usr / local, для самостійного, власного, складеного та підтримуваного програмного забезпечення. / opt призначений для несамобільної, зовнішньої, попередньо упакованої області встановлення бінарного / додаткового пакету. Хммм ... у нас немає програм C: \ програмні файли для всього ;-)
Nikhil Mulley

2
"З іншого боку, / opt - це каталог, де слід встановити нерозділені пакети. Що означає" нерозділені "пакети тут?
Кевін Вілер

1
@KevinWheeler Це пояснено в наступному реченні. Нерозділений означає пакети, які не є частиною дистрибуції Операційної системи, але надаються незалежним джерелом.
jlliagre

2
@jlliagre the centos docs * state "Наприклад, якщо / usr / каталог встановлено як NFS-доступ, доступний лише для читання, з віддаленого хоста, все-таки можна встановити пакет або програму в / usr / local / каталозі" Я не знаю, хто правий, але це, здається, суперечить вашим твердженням про область, де FHS слабкий. (* джерело centos.org/docs/5/html/5.1/Deployment_Guide/… )
Кевін Уілер

1
@KevinWheeler Саме про цю слабкість я маю на увазі. Встановити пакет або програму у віддалений каталог, доступний лише для читання, просто неможливо. Приблизним рішенням може бути встановлення локальної файлової системи на / usr / local, але це більше схоже на спрощену роботу, ніж на щось належним чином розроблене.
jlliagre

84

Основна відмінність полягає в тому, що /usr/localце програмне забезпечення, яке не управляється системним пакувальником, але все ще дотримується стандартних правил розгортання unix.

Ось чому у вас є /usr/local/binі /usr/local/sbin /usr/local/includeт.д. ...

/optз іншого боку, це програмне забезпечення, яке не слідує цьому, і розгорнуте монолітним способом. Зазвичай це включає комерційне та / або кросплатформене програмне забезпечення, яке упаковується у стилі "Windows".


12
Я не згоден з точки зору вашої монолітності. Стандарт FHS говорить, що пакети, встановлені в підкаталогах / opt, повинні встановлювати специфічні для хоста файли зовні / opt, відповідно під / etc / opt / package для файлів конфігурації та / var / opt / пакет для журналів, котушки тощо. / opt насправді ближче до правил розгортання unix, ніж / usr / local, що ставить все під каталог, який повинен бути лише для читання, але не може бути з зрозумілих причин.
jlliagre

5
Звичайно, якби я робив вибір на замовлення і хотів вимагати відповідності FHS. Інакше стандарт - це більше те, що ви б назвали "настановами". Тільки тому, що NetBeans не використовує / etc / opt / netbeans не заважає мені вводити / вибирати для загальної системи або $ HOME / .local / вибирати для одного користувача.
jla

1
@jla Я припускаю, що ваш останній коментар був спрямований до мене, тому будь ласка, використовуйте @ xxx, коли відповідаєте комусь іншому, що ОП або автор відповіді. Про / etc / opt, FHS не говорить, що це рекомендоване місце (як орієнтир), але обов'язкове місце. Ви або розробник Netbeans можете вільно порушувати цей стандарт, оскільки немає повноважень його застосовувати, але не кажіть зробити це неправильно - це шлях. Це просто нещасне непорозуміння або навмисне порушення.
jlliagre

8
@jlliagre Як адміністратор моєї системи, FHS - це набір вказівок. Каталог / opt - це здоровий сенс, де можна розмістити монолітне / opt / <package> або / opt / <provider> програмне забезпечення. Коли я встановлюю пакет, який хоче використовувати <пакет | постачальник> / всі / дані / обов'язковий / для / підтримки, він переходить у вибір / навіть якщо постачальник не дотримується кожної деталі останнього FHS. Я можу надіслати електронний лист або повідомити про помилку, але я не збираюся ставити цей монолітний пакет кудись інше, щоб відчувати себе краще щодо FHS у своїй системі.
jla

1
@jlliagre Я встановив багато матеріалів в / opt, і жоден файл не створюється в / etc / opt. Повинен?
erm3nda

18

Вони справді дуже схожі, і використання того чи іншого - це більше питання. Журнал Linux про цю точну тему тут обговорював точку / контрапункт .


9
О Боже. Я не хотів затягувати себе у "святу війну".
Патчі

13

Особисто для мене це те, що Білл сказав у посиланні @ philfr:

У системі розробки, або пісочниці, мати в своєму розпорядженні каталог / opt, де ви можете просто кидати речі та бачити, чи працюють вони, має багато сенсу. Я знаю, що я не збираюся сама намагатися упакувати речі, щоб спробувати їх. Якщо додаток не працює, ви можете просто запустити каталог / opt / mytestapp, і це додаток - історія. Упаковка може мати сенс, коли ви працюєте з великим розгортанням (бувають випадки, коли я роблю додатки для пакунків), але багато разів, приємно підкидати речі в / opt.

На жаль, більшість make installскриптів вписує файли, /usr/localа не просто створюють там посилання: - /


2
Який би був сенс? Якщо ви все одно збираєтесь зробити посилання, чому б просто не поставити первинний файл на перше місце?
Let_Me_Be

8
Просто прокоментувати make installцільове натискання файлів /usr/local; ця функціональність легко мінлива, передаючи --prefix=параметр командного рядка в ./configureскрипт, або якщо немає ./configureсценарію, ви можете передати параметр в makeцілі наступним чином: make --prefix=/usr install.
Шон К.

3
Чи / opt стандартний каталог включений у $ PATH? Я знаю / usr / local є.
LawrenceC

5
Перевага @Let_Me_Be полягає в тому, що зберігати старі версії дуже просто. Скажімо, у мене є 2 версії 'foo', розташовані в /opt/foo-1.1і /opt/foo-1.2. Коли я оновлююсь, fooпосилання посилає на /usr/local/binточки foo-1.2. Якщо мені чомусь потрібно відкатати, я просто замінюю симпосилання на таке, яке вказує на foo-1.1. Якщо через декілька тижнів 1,2 добре, швидка rm -rf /opt/foo-1.1програма швидко та чисто видаляє старішу версію.
pepoluan

7
@ultrasawblade ні, це не так. і ніколи не повинно бути. врешті-решт, згідно FHS, / opt має бути підрозділений на підкаталоги, що мають назву пакета. набивання всього в PATH - це надійний спосіб катастрофи. швидше, програми повинні встановлювати себе під / opt, і посилає свої програми, що викликаються користувачем, в / usr / local / bin (або sbin).
pepoluan

11

По-перше, я не думаю, що є суворої відповіді; різні адміністратори матимуть різні думки, відповідно до їхнього походження. Історично склалося /usr/localперше; це була конвенція в Берклі, IIRC. Одного разу під час розробки System V, якщо я не помиляюся (це все давно, і я не робив нотатки), було рішення чи бажання мати змогу встановити режим /usrлише для читання, що означало, що ви не можете додати до нього нове програмне забезпечення; це, можливо, /opt було придумано. Як це буває, існує просто стільки існуючого програмного забезпечення, яке написало, /usrщо ця ідея ніколи насправді не збилася з землі.

Мої особисті переваги - /optз окремим підкаталогом для кожного продукту; це робить вилучення продукту простим випадком rm -fr. Але якщо все ваше програмне забезпечення встановлено за допомогою хорошого менеджера пакунків, це не має значення, і якщо встановлене вами програмне забезпечення не суворо підкоряється цим умовам, а також записує конфігурації та інше під ним /usr, це також не має значення, хоча з протилежних причин.


1
"" "все ваше програмне забезпечення встановлюється через хорошого менеджера пакунків, що" "неможливо, якщо ви не використовуєте лише часто використовуване програмне забезпечення.
Pacerier

1
@Pacerier це можливо, це залежить від того, який дистрибутив ви використовуєте. Яке б не було програмне забезпечення, воно, мабуть, знаходиться в сховищі Arch Arch, а якщо його немає, PKGBUILD написати досить просто.
StarlitGhost

9

Я трохи по-іншому ставлюсь до цього питання.
У той час як всі в jlliagre «s відповідь є правильним, практичне застосування для мене, при розгортанні програмного забезпечення в кластері, зводиться до змінних оточення по замовчуванням і повторне використання LIBS по замовчуванням.

Простіше кажучи - /usr/localі все його дочірні каталоги знаходяться у відповідному окр вари , такі як PATHі MANPATH, і /usr/local/lib{,64}в LDCONFIG ( в /etc/ld.so.conf.d/).

/opt/OTOH - це не вигідно, що вимагає спільного існування декількох версій або конфліктуючих пакетів у системі, але вимагає певного управління оточенням (наприклад, модулі навколишнього середовища чи колекції програмного забезпечення ), і невигідне тим, що потенційно воно може "витрачати" "простір для зберігання шляхом дублювання спільних бібліотек, оскільки кожна установка в /optможе бути повністю самодостатньою.

Для спільного характеру /usr/localроботи передбачається, що, наприклад, бінарні файли встановлюються безпосередньо на /usr/local/bin(а підручні сторінки, що відповідають /usr/local/share/man/...), а не /usr/local/app/{bin,share/man,...}тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.