Где хорошее постоянное место для установки пользовательских скриптов bash?

32

Я собираюсь установить "leiningen", который является bash-скриптом для языка программирования clojure с большой полезностью ... ... но я не уверен, где уместно -put- исполняемый скрипт в linux система, так что она постоянно и стабильно доступна.

Я не думаю, что где-либо в / home имеет смысл, но я не знаю, какие каталоги / каталоги должны использоваться для этого.

/ USR / доли?

Kzqai
источник
1
pathname.com/fhs/pub/fhs-2.3.html
Игнасио Васкес-Абрамс

Ответы:

45

(Примечание: ~переводится как /home/userв этом посте)

Лично я вставил все свои индивидуальные системные скрипты /usr/local/binи все мои личные скрипты bash ~/bin. Очень немногие программы, которые я устанавливаю, помещают себя в /usr/local/binкаталог, так что это не очень загромождено, и это было уже в $PATHпеременной на большинстве моих машин.

Чтобы добавить /usr/local/binв системный путь (если его там еще нет), добавьте это в /etc/profile:

PATH=$PATH:/usr/local/bin
export PATH

Чтобы добавить ~/binк пути вашего пользователя, добавьте это в ~/.bash_profile:

PATH=$PATH:$HOME/bin
export PATH

Иногда .bash_profileфайл по умолчанию будет содержать оператор if, который автоматически добавляет ~/binк нему, $PATHесли он существует, поэтому создайте ~/binи откройте новый терминал, чтобы увидеть, делает ли это уже ваш.

Трей Ханнер
источник
BSD делают это по умолчанию.
Крис С
@Chris: BSD поместили много вещей в / usr / local / bin
Дэн Андриатта
В чем разница между вашими скриптами bash и системными, и есть ли причина, по которой вы разделяете их?
Хашим
@Hashim Я, конечно, не могу говорить за Trey, но инструменты, которые вы разрабатываете для своих личных потребностей, имеют тенденцию «переходить» к системным инструментам, когда вы замечаете, что они решают проблему, с которой сталкиваются другие, или у вас есть другая общесистемная установка, которая зависит на одном из этих инструментов. Я подозреваю, что порог установки чего-то общесистемного достаточно высок для большинства программистов. Кроме того, инструмент, которым вы делитесь, должен иметь документацию и т. Д., Которую многие разработчики редко пишут иначе.
tripleee
Кроме того, нет необходимости в exportпеременной несколько раз (и, возможно, ваша система уже помечена PATHдля экспорта, так что вам вообще не придется делать это самостоятельно).
tripleee
9

/ usr / local / действительно правильное место, тогда как / opt действительно для сторонних приложений; «/ opt зарезервирован для установки дополнительных программных пакетов приложений.» Это часть стандарта иерархии файловой системы.

См. Http://www.pathname.com/fhs/pub/fhs-2.3.html для обсуждения / opt.

Для / usr / local / это «для использования системным администратором». Просто не забывайте о том, что там есть - документируйте это.

Джеймисон Беккер
источник
Ссылка, которую вы указали, говорит: «Каталоги / opt / bin, / opt / doc, / opt / include, / opt / info, / opt / lib и / opt / man зарезервированы для использования локальным системным администратором». В / usr / local ничего нет. Там упоминается только / usr / local / share. С другой стороны, скомпилированные программы обычно устанавливаются в / usr / local в Linux. Не думаете ли вы, что / opt / bin - лучшее место для использования системным администратором?
гонщик
1
@ raacer По моему опыту, /usr/localкак следует из названия, он предназначен для локального администратора и /optдля вещей, которые официально не распространяются, таких как коммерческое стороннее программное обеспечение, которое управляется аналогичным процессом (может быть заменено или стерто при обновлении с upstream), но не управляемый менеджером пакетов дистрибутива, или, возможно, фактически распространяемый как RPM или .debпакеты, но не организованный и не упакованный в соответствии со всеми политиками и соглашениями дистрибутива.
tripleee
1
@raacer В этом документе есть отдельный раздел, посвященный чуть /usr/localпозже.
tripleee
@ raacer tripleee прав. Вот ссылка: pathname.com/fhs/pub/… .. правильные, скомпилированные программы (обычно с открытым исходным кодом), которые скомпилированы / собраны специально для этой системы или совместно используются несколькими системами (но не являются частью обычной упаковки / распространения ОС, но это в значительной степени зависит от разделяемых библиотек) должно быть установлено в / usr / local (в основном отражает иерархию / usr). Стороннее программное обеспечение, скомпилированное в возможно другой системе, возможно, с собственной библиотечной поддержкой (например, firefox, userify), должно входить в / opt.
Джеймисон Беккер
3

Исторически вы использовали что-то вроде / opt. Все хорошо, пока оно обновляется в $ PATH для пользователей, которые должны его иметь (следовательно, что-либо в / home - плохая идея).

Тони
источник
2

/usr/share/clojureКажется, что это обычное место для размещения двоичных файлов и библиотек clojure - почему я не знаю, это кажется естественным для /usr/local/share/clojure- поэтому создание siteподкаталога для этих сценариев bash кажется вполне подходящим.

Суть в том, что имеет смысл организовывать сценарии по функциям, а не располагать все сценарии bash в одном месте.

Чарльз Стюарт
источник
1
Для этого есть несколько проблем /usr/share. Прежде всего shareозначает файлы, не зависящие от архитектуры (то есть разделяемые между архитектурами). По этой причине библиотеки и исполняемые файлы не принадлежат shareкаталогу. Во-вторых, за исключением /usr/localтого, что менеджер дистрибутива не должен писать /usr.
kasperd
2

/usr/localЯ считаю, что есть некоторое замешательство в значении «местный».

Насколько я понимаю, «локальный» не означает «происходящий на / с локальной машины», а, проще, «специфичный для локальной машины», который может или не может происходить на / с локальной машины.

Hatebit
источник