为什么自定义程序总是安装在 /opt、/srv、/usr/local 等目录中,而不是安装在 ~/ (home) 文件夹中?

为什么自定义程序总是安装在 /opt、/srv、/usr/local 等目录中,而不是安装在 ~/ (home) 文件夹中?

LTS 存储库非常好,但出于某种原因,我更喜欢某些程序的“从源代码构建”方法。原因之一是我得到了首选版本(LTS 上的 PHP 是 5.3,而我可以从源代码编译 5.4)。nginxnode.js等情况也类似。

现在我想知道,为什么所有教程都坚持将程序安装到“root 拥有的”文件夹中,例如/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失败,您可能会知道在哪里寻找它。

相关内容