Где должен быть размещен локальный исполняемый файл?
63
У меня есть исполняемый файл для клиента контроля версий Perforce ( p4). Я не могу поместить это, /opt/localпотому что у меня нет привилегий root. Есть ли стандартное место, куда его нужно поместить $HOME?
Есть ли в иерархии файловой системы соглашение, согласно которому необходимо размещать локальные исполняемые файлы / двоичные файлы $HOME/bin?
В общем, если несистемный установленный и поддерживаемый двоичный файл должен быть доступен для всей системы нескольким пользователям, он должен быть размещен администратором /usr/local/bin. Существует полная иерархия, /usr/localкоторая обычно используется для локально скомпилированных и установленных пакетов программного обеспечения.
Если вы являетесь единственным пользователем бинарного файла, установка в $HOME/binэто подходящее место, поскольку вы можете установить его самостоятельно, и вы будете единственным потребителем. Если вы компилируете программный пакет из исходного кода, также целесообразно создать частичную или полную локальную иерархию в вашем $HOMEкаталоге. Полная локальная иерархия будет выглядеть следующим образом.
$HOME/bin Локальные двоичные файлы
$HOME/etc Конфигурация конкретной системы для локальных двоичных файлов
При запуске 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.
Я бы не рекомендовал использовать $HOME. Это наводняет ваш домашний каталог многочисленными каталогами, которые вам совсем не интересны. Кто хочет иметь man, libи т.д. в одних домашнем каталоге? Я бы лучше создал иерархию ниже $HOME/binили $HOME/local. Это добавляет только один подкаталог к вашему домашнему каталогу вместо десяти. Они PATHмогут быть легко адаптированы для включения $HOME/bin/binили $HOME/local/bin.
@janneb Спецификация базового каталога XDG, на которую вы ссылаетесь только $HOME/.local/share(версия 0.7, 24 ноября 2010 г.).
Петр Доброгост
28
Как уже упоминалось , /usr/localон предназначен в качестве префикса для программного обеспечения, установленного системным администратором, и /usrдолжен использоваться для программного обеспечения, установленного из пакетов дистрибутива.
Идея заключается в том, чтобы избежать столкновений с распределенным программным обеспечением (например, rpmи debпакетами) и дать администратору полный контроль над префиксом «local».
Это означает, что администратор может установить пользовательское скомпилированное программное обеспечение, все еще используя дистрибутив, такой как Debian.
Программное обеспечение, помещенное в / или / 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дистрибутиве или отредактирован системным администратором.
Это замечание на /etcсамом деле чертовски раздражает при управлении сервером с несколькими администраторами - довольно сложно отследить пользовательские изменения в файлах conf.
$HOME
. Это наводняет ваш домашний каталог многочисленными каталогами, которые вам совсем не интересны. Кто хочет иметьman
,lib
и т.д. в одних домашнем каталоге? Я бы лучше создал иерархию ниже$HOME/bin
или$HOME/local
. Это добавляет только один подкаталог к вашему домашнему каталогу вместо десяти. ОниPATH
могут быть легко адаптированы для включения$HOME/bin/bin
или$HOME/local/bin
.$HOME/.local/share
(версия 0.7, 24 ноября 2010 г.).Как уже упоминалось ,
/usr/local
он предназначен в качестве префикса для программного обеспечения, установленного системным администратором, и/usr
должен использоваться для программного обеспечения, установленного из пакетов дистрибутива.Идея заключается в том, чтобы избежать столкновений с распределенным программным обеспечением (например,
rpm
иdeb
пакетами) и дать администратору полный контроль над префиксом «local».Это означает, что администратор может установить пользовательское скомпилированное программное обеспечение, все еще используя дистрибутив, такой как Debian.
При установке пользовательского программного обеспечения Утер предлагает использовать
$HOME
в качестве префикса, поскольку это гарантирует, что у вас есть права на запись. Лично я чувствую,$HOME/.local
что это более элегантное решение, так как оно позволяет избежать загромождения вашего (надеюсь) красивого и аккуратного домашнего каталога!$HOME/.local/share
уже используется в спецификации XDG Base Directory freedesktop.org , поэтому вам не нужно много думать , чтобы добавить$HOME/.local/bin
к себе$PATH
и сделать$HOME/.local/lib
, и т. д., пока вы на нем.Если вы не хотите, чтобы ваш префикс был скрытым каталогом, вы можете легко создать символическую ссылку на него, например:
Примечание
Стоит отметить, что
.config
(не.local/etc
) является значением по умолчанию,$XDG_CONFIG_HOME
используемым для пользовательских файлов конфигурации. Следует также отметить, что, к сожалению, большая часть программного обеспечения игнорирует XDG и создает файлы конфигурации там, где им нравится (обычно в корне$HOME
). Также обратите внимание, что$XDG_CONFIG_HOME
может быть не установлен, если$HOME/.config
требуется значение по умолчанию .Как ни странно, нет каталога, зарезервированного для конфигурационных файлов по умолчанию дистрибутива, поэтому нет способа узнать, был ли файл в
/etc
дистрибутиве или отредактирован системным администратором.источник
.local
в FHS/etc
самом деле чертовски раздражает при управлении сервером с несколькими администраторами - довольно сложно отследить пользовательские изменения в файлах conf.