Стоит ли устанавливать приложения Linux в / var или / opt?

83

Я запускаю много приложений с открытым исходным кодом, включая Java и Tomcat. Кажется, что в большинстве инструкций мои приложения выполняются из /varкаталога. Но время от времени я также вижу /optкаталог. Пока я на это, я тоже вижу /usr/local/и даже /etcтак же.

Когда следует устанавливать приложения в одну папку или в другую? Есть ли плюсы и минусы каждого? Имеет ли это отношение к истории изменений (Solaris против Linux или Red Hat против Ubuntu)?

Тревор Оллред
источник
8
/ etc - это странное и неподходящее место для того, чтобы оставлять приложения ...
user5336
Я видел, как люди помещали вещи в / etc, такие как модули Perl. Это странно, но это случается ...
ℝaphink
6
На каждый абсурд существует защитник, защищающий его.
womble

Ответы:

133

Стандарт для этих проблем - Стандарт Файловой Иерархии . Это довольно большой документ. В основном (и очень грубо), стандартные пути в Linux:

  • /bin& /sbinдля жизненно важных программ для ОС, sbin только для администраторов;
  • /usr/bin& /usr/sbinдля не жизненно важных программ, sbin только для администраторов;
  • /varдля живых данных для программ. Это могут быть данные кэша, данные буфера, временные данные (если они отсутствуют /tmp, которые стираются при каждой перезагрузке) и т. Д .;
  • /usr/localдля локально установленных программ. Как правило, он содержит программы, которые соответствуют стандартам, но не были упакованы для ОС, а скорее установлены вручную администратором (с помощью, например ./configure && make && make install), а также сценариями администратора;
  • /optдля программ, которые не упакованы и не соответствуют стандартам. Вы просто поместите все библиотеки вместе с программой. Часто это быстрое и грязное решение, но его также можно использовать для программ, которые созданы вами и для которых вы хотите иметь определенный путь. Вы можете создать свой собственный путь (например /opt/yourcompany) внутри него, и в этом случае вам рекомендуется зарегистрировать его как часть стандартных путей;
  • /etc не должны содержать программы, а скорее конфигурации.

Если ваши программы относятся к услугам, предоставляемым сервисом, /srvтакже может быть хорошим местом для них. Например, я предпочитаю использовать /srv/wwwдля веб-сайтов, а не /var/wwwдля того, чтобы убедиться, что каталог будет содержать только данные, которые я сам добавил, и ничего из пакетов программного обеспечения.

Есть некоторые различия между дистрибутивами. Например, системы RedHat используют libexecкаталоги , а системы Debian / Ubuntu - нет.

FHS в основном используется дистрибутивами Linux (на самом деле я не знаю ни одной другой ОС, которая бы действительно соответствовала ему). Другие системы Unix не следуют этому. Например, системы BSD, как правило, используют /usr/localдля упакованных программ, что не относится к Linux. Солярис имеет очень разные стандартные пути.

Я настоятельно рекомендую вам прочитать документ FHS, на который я ссылался выше, если вы хотите узнать больше об этом.

ℝaphink
источник
1
Один из немногих списков с
маркерами, которые
6
+1 за /srv. Я искал место для своих git-репозиториев, и мне не нравилось, что мой контент Apache находится внутри /var/www. /srvкажется идеальным местом.
г-н Еж
@ ℝaphink, так почему это называется varвместо data?
Pacerier
@ Mr.Hedgehog, что значит "не нравится"? Хотите объяснить?
Pacerier
@Pacerier Еще в 90-х вам сказали, /varчто это потому , что это для "различных данных". В первые дни Unix был размещен на одном диске. Когда этого было недостаточно, они получили новый, подключили его /usrи переместили туда все пользовательские данные. Но этого было недостаточно, и старый диск снова был переполнен. Поэтому они переместили все двоичные файлы, без которых система могла загружаться, из /binв /usr/bin. Им просто не хватает места. Позже им нужно было обмениваться данными между пользователями, чтобы они создали /varи использовали их в качестве выпадающего списка. FHS полон унаследованных решений, подобных этому, и их следует принимать с щепоткой соли.
cprn
4

optобозначает дополнительное программное обеспечение. varобозначает переменные системные файлы. Поэтому ваши приложения должны идти в /opt.

Эдуард Вирх
источник
8
/varпредназначен для различных системных файлов, а не для "различных".
womble
4
/ var для "переменных файлов данных". Сказать, что это для «различных системных файлов», неоднозначно и может ввести в заблуждение. о_О Вы правы насчет "выбрать", хотя.
Phoenix8
@Eduard, а как насчет / opt / var? И </ usr / var>, </ usr / local / var> ...
Pacerier
@womble Это ложная этимология. Это то, что говорит FHS, но это не правда. Еще в 90-х вам сказали, /varчто это потому , что это для «различных данных». У меня все еще есть заметки из прединтернет-книги, которую я тогда читал.
1818 года
2

Это зависит от вашего местного стандарта.

Лично я ничего не устанавливаю в / var без веской причины. Мой / usr / local почти всегда монтируется nfs вне сети, поэтому все, что не упаковано, устанавливается в / opt.

Дэвид Макинтош
источник
1
Что бы вы положили в / var в любом случае, кроме данных?
ℝaphink
1
обычно программы вставляют свои вещи в / var. В основном поставляется поставщиком - журналы, некоторые библиотеки, управляющие файлы, файлы .pid, и тому подобное.
Дэвид Макинтош
2
Я не совсем согласен. Библиотеки, если они статичны, должны войти /usr. Динамически генерируемые ЛИЭС может в конечном итоге в /var/libиногда, но я не вижу , что вы на самом деле установить в /var, с точки администратора зрения. Программа может широко его использовать, но она должна быть совершенно пустой перед запуском программы.
ℝaphink
1
Прямо сейчас единственное, что я намеренно установил в / var, это nfsen / nfdump, и это потому, что след приложения - это все файлы nfdump, которые он накапливает. (И потому, что это тестовая установка, которая каким-то образом добралась до производства. Так что - «для обычного нет веской причины».) Но это в значительной степени так. Конечно, поскольку я не делаю разделы на своем жестком диске, в любом случае / var, / opt и / usr находятся в одной файловой системе.
Дэвид Макинтош
1
Qmail устанавливается в / var. Это одна из многочисленных критических замечаний против этого.
staticsan