Где должен быть размещен локальный исполняемый файл?

63

У меня есть исполняемый файл для клиента контроля версий Perforce ( p4). Я не могу поместить это, /opt/localпотому что у меня нет привилегий root. Есть ли стандартное место, куда его нужно поместить $HOME?

Есть ли в иерархии файловой системы соглашение, согласно которому необходимо размещать локальные исполняемые файлы / двоичные файлы $HOME/bin?

Я не мог найти такое соглашение, упомянутое в статье Википедии для FHS .

Кроме того, если действительно существует соглашение, я должен был бы явно указать путь к $HOME/binкаталогу или как там находится binкаталог?

user640378
источник

Ответы:

65

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

Если вы являетесь единственным пользователем бинарного файла, установка в $HOME/binэто подходящее место, поскольку вы можете установить его самостоятельно, и вы будете единственным потребителем. Если вы компилируете программный пакет из исходного кода, также целесообразно создать частичную или полную локальную иерархию в вашем $HOMEкаталоге. Полная локальная иерархия будет выглядеть следующим образом.

  • $HOME/bin Локальные двоичные файлы
  • $HOME/etc Конфигурация конкретной системы для локальных двоичных файлов
  • $HOME/games Локальные игровые файлы
  • $HOME/include Локальные файлы заголовков C
  • $HOME/lib Локальные библиотеки
  • $HOME/lib64 Локальные 64-битные библиотеки
  • $HOME/man Местные онлайн-руководства
  • $HOME/sbin Двоичные файлы локальной системы
  • $HOME/share Локальная архитектура-независимая иерархия
  • $HOME/src Локальный исходный код

При запуске configureвы должны определить свою локальную иерархию для установки, указав $HOMEв качестве префикса установки по умолчанию.

./configure --prefix=$HOME

Теперь, когда make && make installони запущены, скомпилированные двоичные файлы, пакеты, справочные страницы и библиотеки будут установлены в вашей $HOMEлокальной иерархии. Если вы не создали вручную $HOMEлокальную иерархию, make installбудут созданы каталоги, необходимые для пакета программного обеспечения.

После установки в $HOME/bin, вы можете добавить $HOME/binв свой $PATHили вызвать двоичный файл, используя абсолют $PATH. Некоторые дистрибутивы будут включены $HOME/binв ваш $PATHпо умолчанию. Вы можете проверить это, либо echo $PATHпосмотрев, есть ли $HOME/binтам, либо вставить двоичный файл $HOME/binи выполнить which binaryname. Если он возвращается с $HOME/bin/binaryname, то он по умолчанию находится в вашем $ PATH.

Джордж М
источник
5
пока $ HOME не находится на смонтированной файловой системе noexec. / tmp / обычно тоже монтируется noexec.
ewanm89
3
Это правильно, это часть стандарта иерархии файловой системы (FHS). pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Патрик
29
Я бы не рекомендовал использовать $HOME. Это наводняет ваш домашний каталог многочисленными каталогами, которые вам совсем не интересны. Кто хочет иметь man, libи т.д. в одних домашнем каталоге? Я бы лучше создал иерархию ниже $HOME/binили $HOME/local. Это добавляет только один подкаталог к ​​вашему домашнему каталогу вместо десяти. Они PATHмогут быть легко адаптированы для включения $HOME/bin/binили $HOME/local/bin.
Марко
18
Одним из вариантов является использование $ HOME / .local / {BIN, LIB и др.}, Используемый, например , путем в BASEDIR спецификации XDG ( standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ) и питона ( python.org/dev/peps/pep-0370 )
Янв
4
@janneb Спецификация базового каталога XDG, на которую вы ссылаетесь только $HOME/.local/share(версия 0.7, 24 ноября 2010 г.).
Петр Доброгост
28

Как уже упоминалось , /usr/localон предназначен в качестве префикса для программного обеспечения, установленного системным администратором, и /usrдолжен использоваться для программного обеспечения, установленного из пакетов дистрибутива.

Идея заключается в том, чтобы избежать столкновений с распределенным программным обеспечением (например, rpmи debпакетами) и дать администратору полный контроль над префиксом «local».

Это означает, что администратор может установить пользовательское скомпилированное программное обеспечение, все еще используя дистрибутив, такой как Debian.

От FHS

Программное обеспечение, помещенное в / или / usr, может быть перезаписано при обновлении системы (хотя мы рекомендуем, чтобы при этих обстоятельствах дистрибутивы не перезаписывали данные в / etc). По этой причине локальное программное обеспечение не должно размещаться за пределами / usr / local без уважительной причины.

При установке пользовательского программного обеспечения Утер предлагает использовать $HOMEв качестве префикса, поскольку это гарантирует, что у вас есть права на запись. Лично я чувствую, $HOME/.localчто это более элегантное решение, так как оно позволяет избежать загромождения вашего (надеюсь) красивого и аккуратного домашнего каталога!

$HOME/.local/shareуже используется в спецификации XDG Base Directory freedesktop.org , поэтому вам не нужно много думать , чтобы добавить $HOME/.local/binк себе $PATHи сделать $HOME/.local/lib, и т. д., пока вы на нем.

Если вы не хотите, чтобы ваш префикс был скрытым каталогом, вы можете легко создать символическую ссылку на него, например:

ln -s .local ~/local

Примечание

Стоит отметить, что .config(не .local/etc) является значением по умолчанию, $XDG_CONFIG_HOMEиспользуемым для пользовательских файлов конфигурации. Следует также отметить, что, к сожалению, большая часть программного обеспечения игнорирует XDG и создает файлы конфигурации там, где им нравится (обычно в корне $HOME). Также обратите внимание, что $XDG_CONFIG_HOMEможет быть не установлен, если $HOME/.configтребуется значение по умолчанию .

Как ни странно, нет каталога, зарезервированного для конфигурационных файлов по умолчанию дистрибутива, поэтому нет способа узнать, был ли файл в /etcдистрибутиве или отредактирован системным администратором.

MattSturgeon
источник
1
Я не могу найти упоминания .localв FHS
Даниэль Серодио
@DanielSerodio Это в спецификации каталога XDG, более новом стандарте, который получает все большее распространение. См. Unix.stackexchange.com/questions/316765/… и superuser.com/questions/1170793/…
ivan_pozdeev
Это замечание на /etcсамом деле чертовски раздражает при управлении сервером с несколькими администраторами - довольно сложно отследить пользовательские изменения в файлах conf.
naught101