Для программного обеспечения только вам нужно использовать свой домашний каталог вместо /usr/local
.
Вместо того, чтобы менять владельца /usr/local
или запускать команды от имени пользователя root, когда вы этого не хотите, вам следует просто настроить свои сборки так, чтобы они устанавливались в вашем домашнем каталоге вместо /usr/local
. Это решает все потенциальные проблемы с изменением владельца /usr/local
, включая то, как его bin
и sbin
подкаталоги находятся на root
пути России.
Если вам нужно разрешить другим пользователям запускать ваше программное обеспечение, вы можете предоставить им доступ. На самом деле, они, вероятно, уже смогут, потому что по умолчанию ваш домашний каталог имеет разрешающий доступ для чтения и выполнения . (Если вы не хотите этого, вы можете изменить его довольно легко, просто используя chmod
любые файлы или каталоги, которые вы хотите сделать приватными, и, возможно, также изменив свой umask
.)
С установленным программным обеспечением в вашей домашней директории, исполняемые файлы , которые пошли бы в /usr/local/bin
вместо этого идти . Вы получите другие подкаталоги вашего домашнего каталога, соответствующие подкаталогам того программного обеспечения, которое вам нужно установить. Обычно это происходит автоматически при установке программного обеспечения из исходного кода./home/username/bin
/usr/local
Конфигурирование ваших сборок
Большая часть программного обеспечения, которое вы создаете из исходного кода, имеет этап, на котором вы запускаете
./configure
Для подавляющего большинства программного обеспечения, поставляемого со configure
скриптом, который может быть запущен таким образом, по умолчанию конфигурируется сборка для установки внутри, /usr/local
когда вы в конечном итоге запускаете sudo make install
ее установку. Причина в том, что это неявно эквивалентно выполнению:
./configure --prefix=/usr/local
Чтобы настроить сборку для установки в домашний каталог, используйте вместо этого:
./configure --prefix="$HOME"
На практике в Ubuntu пути к домашним каталогам не содержат пробелов, других пробелов или других символов, которые будут обрабатываться подобной оболочкой, например *
, если вы не настроили свою учетную запись довольно странно, вы можете просто набрать:
./configure --prefix=$HOME
(Однако я не рекомендую использовать это для написания сценариев . Кроме того, в некоторых других ОС, таких как macOS, пути к домашним каталогам пользователей нередко содержат пробелы.)
Или, если вы предпочитаете, вы можете ввести полный путь к домашней директории:
./configure --prefix=/home/username
( username
Конечно, замените ваше фактическое имя пользователя. Если по какой-то причине вашего домашнего каталога нет, /home
вам придется соответствующим образом изменить его.)
Установка ваших сборок
После запуска make
вы можете привыкнуть к запуску sudo make install
, но когда вы устанавливаете в свой домашний каталог, вам не нужно запускать его как root, так что вы можете - и должны --omit sudo
. Просто беги:
make install
Точно так же для программного обеспечения, которое поддерживает uninstall
цель:
make uninstall
Это именно то, что вы просили ... просто в вашем домашнем каталоге, а не /usr/local
.
Запуск ваших программ
Возможноbin
подкаталог вашего домашнего каталога является:
- уже в вашем
$PATH
, или
- будет в вашем,
$PATH
если вы просто выйдите и вернетесь.
Причина в том, что .profile
файл в вашем домашнем каталоге, который содержит команды, которые запускаются при входе в систему, содержит это по умолчанию для учетных записей пользователей, созданных в большинстве версий Ubuntu (включая первоначальную учетную запись администратора, созданную при установке ОС):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Этот код запускается, когда вы входите в систему (потому что он есть .profile
) и размещает ваш личный bin
каталог $PATH
только в том случае, если он существует в то время. Вот почему вам может потребоваться выйти из системы и вернуться обратно.
Старые версии, такие как Ubuntu 14.04, а также новые версии, такие как Ubuntu 17.10, поставляются с этим. Тем не менее, Ubuntu 16.04, который, вероятно, является самым популярным релизом на момент написания этой статьи, имеет следующее:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Это просто добавляет bin
подкаталог вашего домашнего каталога - а также .local/bin
подкаталог - в ваш $PATH
, не проверяя, существуют ли эти каталоги на самом деле. Так что если вы используете 16.04, или при обновлении от системы , которая была 16,04 , когда была создана ваша учетная запись пользователя, то bin
подкаталог вашего домашнего каталога, скорее всего , уже в вашем $PATH
.
Ваш .profile
файл копируется из /etc/skel
каталога при создании учетной записи пользователя. Если ваша учетная запись пользователя была создана в более старом выпуске Ubuntu, она получила эту версию .profile
и не была изменена - для вашей учетной записи пользователя - путем обновления до более позднего выпуска.
Как только bin
подкаталог вашего домашнего каталога окажется в вашем $PATH
, вы сможете запускать программы, исполняемые файлы которых установлены там, просто вводя их имена, так же, как вы могли бы делать это с программами, установленными менеджером пакетов Ubuntu или установленными внутри /usr/local
.
.local
Вариант
Возможно, вы заметили, что .profile
файл по умолчанию для учетных записей пользователей, созданный в некоторых выпусках Ubuntu, в том числе в 16.04, как описано выше, добавляет не только $HOME/bin
ваш путь, но и $HOME/.local/bin
. Если ваш .profile
не добавляет это, но вы хотите, чтобы, то вы можете просто отредактировать его в.
Хотя это часто используется для хранения настроек и кэшированных данных , вы также можете установить программное обеспечение внутри .local
подкаталога вашего домашнего каталога. Вы должны чувствовать себя свободными в этом, так как с точки зрения юзабилити и безопасности --prefix="$HOME/.local"
это похоже на --prefix="$HOME"
.
Помните, что файлы и каталоги, которые начинаются с .
, не отображаются по умолчанию в графических браузерах файлов (используйте Ctrl+, Hчтобы их отобразить или скрыть) или ls
командой (передайте флаг -A
или, -a
чтобы показать их). Это может быть не то, что вы хотите, или это может быть именно то, что вы хотите. Это вопрос личных предпочтений.
Однако я заметил, что некоторые автоматизированные менеджеры пакетов на основе исходного кода, которые создают и устанавливают программное обеспечение в своем домашнем каталоге, используют $HOME/.local
. На самом деле я не знаю, насколько это распространено - я надеюсь продолжить исследование и обновить этот ответ - но вы можете предпочесть просто использовать $HOME
вещи, которые вы компилируете вручную. Таким образом, будет ясно, откуда все пошло. И если есть столкновение, программное обеспечение все еще может сосуществовать приемлемо.
Вы также можете намеренно установить некоторое программное обеспечение в $HOME/.local
и другое программное обеспечение в $HOME
. Тебе решать. Какая бы bin
директория ни была первой в вашей $PATH
переменной среды, это та, из которой будет выполняться команда, в случае, если команды с одинаковыми именами существуют в обеих.
Заслуга Zanna и Videonauth для указывая на ошибки в предыдущей версии этого ответа, о том, каких релизах Ubuntu есть какой код по умолчанию в .profile
, и помогают мне исправить их (смотрите также здесь ).