it-swarm-ru.tech

В чем разница между / opt и / usr / local?

В соответствии с Стандарт иерархии файловой системы , /opt для "установки дополнительных программных пакетов приложений". /usr/local "для использования системным администратором при локальной установке программного обеспечения". Эти варианты использования кажутся довольно похожими. Программное обеспечение, не включенное в дистрибутивы, обычно по умолчанию настроено для установки в /usr/local или /opt без конкретной рифмы или причины, по которой они выбрали.

Есть ли какая-то разница, по которой я скучаю, или оба делают одно и то же, но существуют по историческим причинам?

440
Patches

Хотя оба предназначены для хранения файлов, не принадлежащих операционной системе, /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.

393
jlliagre

Основное отличие состоит в том, что /usr/local Предназначено для программного обеспечения, которое не управляется системным упаковщиком, но все еще следует стандартным правилам развертывания Unix.

Вот почему у вас есть /usr/local/bin, /usr/local/sbin/usr/local/include И т. Д ...

/opt С другой стороны, для программного обеспечения, которое не следует этому и развернуто монолитным способом. Обычно это коммерческое и/или кроссплатформенное программное обеспечение, упакованное в стиле "Windows".

89
Šimon Tóth

Они на самом деле очень похожи, и использование того или другого - это вопрос мнения. Журнал Linux обсуждал эту тему/контрапункт именно по этой теме здесь .

18
philfr

Лично для меня это то, что Билл сказал в ссылке @ philfr:

В системе разработки или в песочнице наличие каталога/opt, в котором вы можете просто бросить вещи и посмотреть, работают ли они, имеет большой смысл. Я знаю, что я не собираюсь самостоятельно собирать вещи, чтобы попробовать их. Если приложение не работает, вы можете просто запустить каталог/opt/mytestapp, и это приложение станет историей. Упаковка может иметь смысл, когда вы запускаете большое развертывание (бывают случаи, когда я создаю пакетные приложения), но во многих случаях приятно бросать вещи в/opt.

К сожалению, большинство make install скрипты помещают файлы в /usr/local вместо того, чтобы просто сделать символическую ссылку там: - /

13
pepoluan

Во-первых, я не думаю, что есть строгий ответ; разные администраторы будут иметь разные мнения, в зависимости от их происхождения. Исторически, /usr/local пришел первым; это была конвенция в Беркли, IIRC. В какой-то момент во время разработки System V, если я не ошибаюсь (это все давно, и я не делал заметок), было решение или желание иметь возможность смонтировать /usr только для чтения, что означало, что вы не можете добавлять в него новое программное обеспечение; возможно, именно поэтому /opt было изобретено. Так получилось, что существовало так много программного обеспечения, которое писало в /usr что эта идея так и не началась.

Мое личное предпочтение /opt, с отдельным подкаталогом для каждого продукта; это делает удаление продукта простым случаем rm -fr. Но если все ваше программное обеспечение установлено через хороший менеджер пакетов, это не имеет значения, и если программное обеспечение, которое вы устанавливаете, не подчиняется строго этим соглашениям и записывает конфигурации и тому подобное где-то в /usr, это тоже не имеет значения, хотя по противоположным причинам.

12
James Kanze

У меня немного другое мнение по этому вопросу.
Хотя все в jlliagre s answer верно, практическое применение для меня при развертывании программного обеспечения в кластере сводится к переменным среды по умолчанию и по умолчанию повторное использование библиотек.

Проще говоря - /usr/local и ​​все его дочерние каталоги находятся в соответствующих переменных env, таких как PATH и ​​MANPATH, /usr/local/lib{,64} находятся в ldconfig (/etc/ld.so.conf.d/).

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

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

10
Dani_l

Таким образом, мой внутренний ответ ...

Используя мою справедливую долю FreeBSD с 2.2.6 и Red Hat Linux с версии 9 ...

/usr/local == Old School Conventions
/opt       == New School Conventions

Расположение вещей в файловых системах UNIX/Linux больше связано с соглашениями и традициями, чем с абсолютной логикой.

В остальном я в основном согласен со всеми остальными. :-)

Всегда есть какое-то исключение из правила. В конце дня вы решаете, что лучше для вашей установки (когда вы можете).

0
Anthony Rutledge