我想在 Linux 中安装一个程序并将其作为守护进程运行。 (本例中为“团队发言 3”,但问题本质上是一般性的)。没有提供软件包,仅提供焦油二进制文件。
按照惯例,我应该将这样的程序放在目录结构中的哪个位置?
在网上我发现它/opt
适用于“可选插件应用程序”,而/usr
适用于“用户程序”。
我发现一个教程建议/opt
而另一个建议/usr
。
那么哪一个“更正确”呢?
答案1
“更正确”取决于您的分布。您应该检查您的发行版的指南,了解将不受软件包管理器管理的软件(通常/usr/local
)放在哪里,或者如何为其创建自己的软件包。
正如您所说,TeamSpeak 只是将所有内容放在一个文件夹中(并且可能不容易重新组织),是的/opt/
可能是最好的。
(但是,例如,在 Arch Linux 中,包管理器可以安装在那里,所以我仍然会创建一个 PKGBUILD 来安装在/opt
.)
还有发行版通常尝试遵循文件系统层次结构标准,所以这是寻找更通用约定的地方。
答案2
在哪里安装程序?
如果您要编译自己的软件,那么您最终可以控制安装位置。
- 按照惯例,手动编译和安装的软件(不是通过包管理器,例如 apt、yum、pacman)安装在
/usr/local
. - 一些套餐(程序)将在其中创建一个子目录
/usr/local
来存储所有相关文件,例如/usr/local/openssl
. - 其他套餐将把必要的文件安装到现有目录中,例如
/usr/local/sbin
和/usr/local/etc
。
这些只是默认位置,可以在编译期间更改。
运行./configure时定义安装位置
当你编译软件时,可以指定安装位置--prefix=
通过在运行时使用该选项./configure
。强烈建议您通过运行来查看包的所有可用选项$ ./configure --help | less
。此外,浏览包中提供的INSTALL
和文档也是一个好主意。README
它们往往包含特定于包的安装说明和依赖项信息。
请注意
还应该指出的是尽管您可以将软件存储在任何地方,根据FHS,本地安装的软件的源代码应该存储在/usr/local/src
!
如果您需要复制库存配置文件或二进制文件,标准化源树的存储位置将使您能够轻松找到树。即使某些软件包使用它,您的源代码也不应该存储在/usr/src
为系统软件(例如内核)指定的位置。
确保 PATH 找到您的位置
最后,您需要确保您的安装位置包含在您的$PATH
.如果您决定安装软件包,/opt
但它不在您的$PATH
shell 中,则您将找不到可执行文件,并且您将必须使用绝对路径来调用程序。这里有一些精彩的讨论非盟关于配置您的$PATH
补充阅读:man hier
答案3
这Linux 标准库和文件系统层次结构标准可以说是在 Linux 系统上安装软件的位置和方式的标准。我建议将未包含在您的发行版中的软件放置在/opt
其中/usr/local/
的子目录中(/opt/<package> /opt/<provider> /usr/local/bin
)。
最佳实践是将您下载的软件转换为您的发行版本机的可安装软件包,例如 dpkg 或 rpm 格式。这将有助于报告、升级和彻底删除软件。
答案4
二进制文件按照常见约定放入bin
文件夹中,如何组织包结构取决于您,我可以想到/opt/<prog_name>/
它是否只是二进制文件列表。