Почему пользовательские программы всегда устанавливаются в /opt, /srv, /usr/local и т. д., а не в папку ~/ (home)?

Почему пользовательские программы всегда устанавливаются в /opt, /srv, /usr/local и т. д., а не в папку ~/ (home)?

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возникнет сбой, вы, вероятно, знаете, где его искать.

Связанный контент