![Почему пользовательские программы всегда устанавливаются в /opt, /srv, /usr/local и т. д., а не в папку ~/ (home)?](https://rvso.com/image/38709/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B5%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B%20%D0%B2%D1%81%D0%B5%D0%B3%D0%B4%D0%B0%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%B0%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D1%8E%D1%82%D1%81%D1%8F%20%D0%B2%20%2Fopt%2C%20%2Fsrv%2C%20%2Fusr%2Flocal%20%D0%B8%20%D1%82.%20%D0%B4.%2C%20%D0%B0%20%D0%BD%D0%B5%20%D0%B2%20%D0%BF%D0%B0%D0%BF%D0%BA%D1%83%20~%2F%20(home)%3F.png)
LTS-репозиторий довольно хорош, но по какой-то причине я предпочитаю метод "сборки из исходников" для некоторых программ. Одна из причин в том, что я получаю предпочтительную версию (PHP на LTS находится на 5.3, тогда как я могу скомпилировать 5.4 из исходников). Аналогичное положение дел для nginx
, node.js
, и т. д.
Теперь я хотел бы узнать, почему все руководства настаивают на установке программ в папки «root-owned», такие как /opt
, /srv
, или /usr/local
. Я обнаружил, что гораздо проще установить их в мою домашнюю папку, например:
/home/prahlad/programs/PHP-5.4
Одно преимущество в том, что мне не нужно использовать sudo
для установки этих программ. Второе и связанное преимущество в том,безопасностьбеспокойство. А что если (предположим) какой-либо из этих источников содержит вредоносное ПО (хотя это менее вероятно на Linux)? Разве лишение их привилегий root не является хорошей идеей?
Мне бы хотелось узнать хотя бы один пример, когда возникает необходимость установки программы в папку, принадлежащую пользователю root?
решение1
В руководствах говорится, что их нужно установить /usr/local/
или /opt
т. п., чтобы другие могли ими пользоваться.
Если вы устанавливаете в свой домашний каталог, то только вы будете иметь к ним доступ. Если вы просто компилируете для себя, то это нормально.
решение2
Это не жесткое и быстрое правило, но вещи, которые по умолчанию, /opt
обычно являются самодостаточными и могут потребовать копирования или символической ссылки на исполняемые файлы в исполняемый путь или добавления внутренней папки в $PATH
. Это достаточно просто, чтобы понять, предпочитаете ли вы поместить его в другое место и использовать $HOME/bin
.
Исходный код, который по умолчанию установлен на /usr/local
, однако, может также устанавливать общие библиотеки и страницы руководства. Если вы хотите разместить его где-то еще, обычно вы сначала экспортируете переменную PREFIX
(или указываете ее в командной строке с make
); ./configure --help
может подтвердить и объяснить это.
В этом случае вам нужна некоторая иерархия каталогов в пути, который вы хотите использовать. Это должно выглядеть так:
bin/
lib/
include/
share/
man/
man1/
Существуют и другие manX
каталоги, которые вы можете создать (посмотрите на /usr/share/man
модель), хотя установщикиможетсоздайте их, если они не существуют. Затем вам понадобится следующее, например, ~/.profile
:
export PATH=~/bin:$PATH
export LD_LIBRARY_PATH=~/lib:$LD_LIBRARY_PATH
export MANPATH=~/share/man:$MANPATH
Если пакет использует общие библиотеки, это LD_LIBRARY_PATH
имеет решающее значение, иначе исполняемые файлы не смогут с ними связаться. MANPATH
может работать не на всех системах и в любом случае не является строго необходимым — если man foobar
возникнет сбой, вы, вероятно, знаете, где его искать.