Наш системный администратор установил на сервере программное приложение (Maven) и сказал всем добавить /usr/local/maven/bin/
папку в свой путь.
Я думаю, что было бы удобнее просто связать несколько программ в этой папке из /bin
папки (или другой папки, которая есть у каждого на своем пути) следующим образом:
ln -s /usr/local/maven/bin/* /bin
Это верно? Есть ли скрытые побочные эффекты в моем предложении?
symlink
path
directory-structure
Эрель Сегал-Халеви
источник
источник
/opt
.Ответы:
По ссылкам
Вы обычно не связываетесь
/usr/local/*
с/bin
, но это больше историческая практика. В общем, есть несколько «технических» причин, по которым вы не можете делать то, что предлагаете.Создание ссылок на исполняемые файлы в
/bin
может вызвать проблемы:Вероятно, самым большим предупреждением будет то, что в вашей системе есть пакеты, управляемые каким-либо менеджером пакетов, таким как RPM, dpkg, APT, YUM, pacman, pkg_add и т. Д. В этих случаях вам, как правило, нужно разрешить пакет менеджер делать свою работу и управлять каталогами , таких как
/sbin
,/bin
,/lib
, и/usr
. Единственным исключением будет то,/usr/local
что обычно это безопасное место, которое вы можете сделать по своему усмотрению, без необходимости беспокоиться о том, что менеджер пакетов может помешать работе ваших файлов.Часто исполняемые файлы, созданные для,
/usr/local
будут жестко запрограммированы в своих исполняемых файлах. Также могут быть файлы конфигурации, которые включены/usr/local
как часть установки этих приложений. Так что ссылка только на исполняемый файл может вызвать проблемы с этими приложениями, которые находят.cfg
файлы позже. Вот пример такого случая:Та же проблема, что и при поиске
.cfg
файлов, может возникать и с исполняемыми файлами-помощниками, которые должны запускаться основным приложением. С ними тоже нужно будет связать/usr/bin
, зная, что это может быть проблематично и появиться только тогда, когда вы действительно попытаетесь запустить связанное приложение.ПРИМЕЧАНИЕ: в общем, лучше избегать соблазна связать одно приложение с другим
/usr/bin
./etc/profile.d
Вместо этого, чтобы все пользователи обеспечивали это управление, администратор мог бы очень легко добавить это к каждому
$PATH
на коробке, добавив соответствующий файл в/etc/profile.d
каталог.Файл, такой как этот
/etc/profile.d/maven.sh
,:Вы обычно делаете это как администратор, а не загрязняете все настройки пользователей этим.
Использование альтернатив
Большинство дистрибутивов теперь предоставляют другой инструмент под названием
alternatives
(Fedora / CentOS) илиupdate-alternatives
(Debian / Ubuntu), который вы также можете использовать для включения в$PATH
инструменты, которые могут находиться за пределами/bin
. Использование таких инструментов предпочтительнее, поскольку они в большей степени соответствуют тому, что большинство администраторов считают «стандартной практикой», и, таким образом, упрощают передачу систем от одного администратора другому.Этот инструмент делает то же самое при создании ссылок в
/bin
; но он управляет созданием и уничтожением этих ссылок, поэтому легче понять предполагаемую настройку системы, когда она выполняется с помощью инструмента, а не напрямую, как вы предлагаете.Здесь я использую эту систему для управления Oracle Java на коробке:
Вы можете увидеть эффект этого:
Мои 0,02 доллара
Создание ссылок
/bin
, хотя и правдоподобных, вероятно, будет крайне обескуражено большинством системных администраторов:источник
/bin
каталогом. Вот пример. В дистрибутивах Red Hat, использующих RPM, если файл уже существует в/bin
RPM, не будет устанавливаться поверх, как вы описали, если только вы не сделаете этого, используя--replacefiles
переключатель. Так что это не совсем техническая причина. То же самое с другими каталогами. Я понимаю, что вы говорите о «владении» ОС,/bin
но это не так явно, как вы заявляете.Отвечая на заданные вопросы:
Нет , это плохая практика.
Да, есть несколько побочных эффектов. Ваше предложение может сработать или не работать в зависимости от приложения, и может регрессировать или быть сломанным в долгосрочной перспективе.
Есть веские причины не создавать такую символическую ссылку:
Администраторы не являются «собственниками»
/bin
(см. Примечание 1), поскольку этот каталог принадлежит разработчикам операционной системы / дистрибутива. С другой стороны/usr/local
, это традиционное расположение для программного обеспечения, созданного локальным администратором,/opt/<packagename>
а также для разрозненного программного обеспечения. Если вы создаете файл или ссылку/bin
, существует риск, что он будет перезаписан установкой пакета, в вашем случае - гипотетическимmaven
пакетом, предоставленным операционной системой, что может привести к регрессии, если созданный локально создан из более новой версии. Исходный код этой версии ОС. Например, тарболы SVR4pkgadd
, debiandpkg
, red-hatrpm
и slackware слепо перезаписывают вашу символическую ссылку.Некоторые приложения обращаются к месту, где они вызываются, для получения файлов конфигурации, плагинов и подобных ресурсов. Если вы вызываете приложение по символической ссылке, его код может не следовать за ним, а затем искать эти файлы ресурсов
/usr/bin
там, где их нет.Там могут быть другие двоичные файлы,Удалено, поскольку вы уже учли это в своей команде, связав все потенциальные команды./usr/local/maven/bin
и если вы не добавите этот каталог в PATH, они будут недоступны.Страница maven2 говорит добавить этот каталог в вашу PATH (точнее: добавить переменную среды M2 к вашему пути, например, экспортировать PATH = $ M2: $ PATH .), Используя другой подход, вы нарушаете этот шаг, поэтому переходите на неподдерживаемый путь. Конечно, если большинство пользователей системы являются потенциальными
maven
пользователями, было бы более разумно установитьPATH
глобально, а не на всех и каждого.profile
.Примечание 1:
Документация Slackware:
Стандарт иерархии файловых систем Debian
Документация Solaris:
Простой тест, показывающий, что Debian
dpkg
не сохраняет существующую ссылку, даже если--force-overwrite
опция не используется:источник
/bin
или/usr/bin
. После обнаружения проблем со скрытыми или поврежденными двоичными файлами системы (наиболее известными из которых былиtest
) наилучшая практика установки несистемных двоичных файлов где-то еще была постепенно принята.Если вы хотите использовать символическую ссылку, было бы лучше использовать символическую ссылку
/usr/local/bin
. На моем сервере я использовал для установки локального программного обеспечения/opt/NAME
и ссылки на двоичные файлы/usr/local/bin
.источник
Альтернативой двум предлагаемым методам является создание сценария оболочки, в
/usr/local/bin
котором при выполнении исполняется любой двоичный файл, указанный в сценарии. Например, используя maven в качестве примера, я бы создал сценарий оболочки в/usr/local/bin
namedmaven
, у которого есть небольшой скрипт для выполнения двоичного файла maven, где он находится, и передачи ему любых аргументов:Недостатком этого является необходимость делать это для каждого двоичного файла, который вы хотите «связать», но он позволяет вам вызывать эти двоичные файлы из командной строки без необходимости вносить изменения в
$PATH
переменную среды.источник