ls -1 | wc -l
...
$ ls --help | grep -- ' -1'
-1 list one file per line
...
$ wc --help | grep -- ' -l'
-l, --lines print the newline counts
PS: Отметьте ls - <номер один> | туалет - <буква L>
В то время как оба разработаны для содержания файлов, не принадлежащих операционной системе, /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
. Не было никакого понятия упаковки (снаружи tarballs).
С другой стороны, /opt
каталог для установки несвязанных пакетов (т.е. пакетов не часть распределения Операционной системы, но обеспеченный независимым источником), каждый в его собственном подкаталоге. Они уже создаются целые пакеты, обеспеченные независимым дистрибьютором внешнего программного обеспечения. В отличие от этого, /usr/local
материал, эти пакеты следуют конвенциям каталога (или по крайней мере они должны). Например, someapp
был бы установлен в /opt/someapp
, с одним из его команды того, чтобы быть /opt/someapp/bin/foo
, его конфигурационный файл был бы в /etc/opt/someapp/foo.conf
, и его файлы журнала в /var/opt/someapp/logs/foo.access
.
Основное различие - это /usr/local
для программного обеспечения, не управляемого системным поставщиком программного блока, но все еще после стандартных правил развертывания Unix.
Вот почему Вы имеете /usr/local/bin
, /usr/local/sbin
/usr/local/include
и т.д...
/opt
с другой стороны, для программного обеспечения, которое не следует за этим и развертывается монолитным способом. Это обычно включает коммерческое и/или межплатформенное программное обеспечение, которое упаковывается в стиле "Windows".
Для меня, лично, это - то, что Bill сказал в ссылке @philfr:
В системе разработки или песочнице, имея / выбирают каталог, куда можно просто бросить вещи и видеть, работают ли они, имеет большой смысл. Я знаю, что не собираюсь проходить усилие упаковочных вещей сам для испытания их. Если приложение не удается, Вы можете просто комната,/opt/mytestapp каталог и то приложение являются историей. Упаковка может иметь смысл при выполнении большого развертывания (существуют времена, когда я действительно упаковываю приложения), но много времен, хорошо бросить материал в/, выбирают.
К сожалению, большинство make install
сценарии продвигают файлы в /usr/local
вместо того, чтобы просто делать символьную ссылку там :-/
make install
целевые файлы продвижения в /usr/local
; эта функциональность легко изменяема путем передачи a --prefix=
параметр командной строки к ./configure
сценарий, или если существует нет ./configure
сценарий, можно передать параметр make
будьте нацелены как так: make --prefix=/usr install
.
– Sean C.
18.04.2011, 14:45
/opt/foo-1.1
и /opt/foo-1.2
. Когда я обновляю, foo
символьная ссылка в /usr/local/bin
точки к нечто 1.2. Если по некоторым причинам я должен откатывать, я просто заменяю символьную ссылку той, которая указывает на нечто 1.1 вместо этого. Если 1.2 хорошо после нескольких недель, быстрого rm -rf /opt/foo-1.1
удаляет более старую версию быстро и чисто.
– pepoluan
18.04.2011, 17:41
Во-первых, я не думаю, что существует строгий ответ; другой adminstrators будет иметь различные мнения, согласно их образованию. Исторически, /usr/local
был на первом месте; это была конвенция в Berkley, IIRC. Однажды во время разработки System V, если я не ошибаюсь (это - все давным-давно, и я не сделал заметки), было решение или требование смочь смонтироваться /usr
только для чтения, который означал, Вы не могли добавить новое программное обеспечение к нему; это, возможно, было то, почему /opt
был изобретен. Как это происходит, было именно так много существующего программного обеспечения, которое действительно писало в /usr
то, что та идея, никогда действительно успешно начатая.
Мое персональное предпочтение /opt
, с отдельным подкаталогом для каждого продукта; это делает удаление продукта простым случаем rm -fr
. Но если все Ваше программное обеспечение установлено через хороший диспетчер пакетов, не имеет значения, и если программное обеспечение, которое Вы устанавливаете, строго не повинуется этим конвенциям и пишет конфигурации и такой где-нибудь под /usr
, это не имеет значения также, хотя по противоположным причинам.
У меня несколько другой взгляд на этот вопрос.
Хотя все в jlliagre ответе верно, для меня практическое применение при развертывании программного обеспечения в кластере сводится к переменным среды по умолчанию и повторное использование библиотек по умолчанию.
Проще говоря - / usr / local
и все его дочерние каталоги находятся в соответствующих переменных окружения, таких как 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, ...}
и т. д.
Пользуясь справедливой долей FreeBSD, начиная с версии 2.2.6, и Red Hat Linux, начиная с версии 9...
/usr/local == Old School Conventions
/opt == New School Conventions
Расположение вещей в файловых системах UNIX/Linux больше связано с соглашениями и традициями, чем с абсолютной логикой.
В остальном я в основном согласен со всеми остальными.:-)
Всегда есть некоторые исключения из правил. В конце концов, вы решаете, что лучше всего подходит для вашей установки (, когда это возможно ).