Pat*_*hes 529 fhs directory-structure
根据Filesystem Hierarchy Standard,/opt用于“附加应用程序软件包的安装”。 /usr/local是“供系统管理员在本地安装软件时使用”。这些用例看起来非常相似。未包含在发行版中的软件通常默认配置为安装在他们选择的任何一种/usr/local或/opt没有特定的韵律或原因。
我是否遗漏了某些差异,或者两者都做同样的事情,但由于历史原因而存在?
jll*_*gre 484
虽然两者都旨在包含不属于操作系统的文件,/opt并且/usr/local不打算包含相同的文件集。
/usr/local是安装管理员构建的文件的地方,通常使用make命令(例如,./configure; make; make install)。这个想法是为了避免与作为操作系统一部分的文件发生冲突,否则这些文件将被覆盖或覆盖本地文件(例如,/usr/bin/foo是操作系统的一部分,/usr/local/bin/foo而是本地替代品)。
下面的所有文件/usr都可以在操作系统实例之间共享,尽管在 Linux 中很少这样做。这是 FHS 有点自相矛盾的部分,因为/usr定义为只读,但/usr/local/bin需要读写才能成功本地安装软件。SVR4 文件系统标准是 FHS 的主要灵感来源,建议避免/usr/local并使用它/opt/local来克服这个问题。
/usr/local是原始 BSD 的遗产。当时,/usr/bin操作系统命令的源代码在/usr/src/bin和 中/usr/src/usr.bin,而本地开发的命令的源在 中/usr/local/src,它们的二进制文件在/usr/local/bin. 没有包装的概念(在 tarball 之外)。
另一方面,/opt是一个用于安装非捆绑包(即包不是操作系统发行版的一部分,而是由独立来源提供)的目录,每个包都在其自己的子目录中。它们已经是由独立的第三方软件分销商提供的完整软件包。与/usr/local东西不同,这些包遵循目录约定(或者至少应该遵循)。例如,someapp将安装在 中/opt/someapp,其命令之一是/opt/someapp/bin/foo,其配置文件在 中/etc/opt/someapp/foo.conf,其日志文件在/var/opt/someapp/logs/foo.access.
Šim*_*óth 109
基本的区别是/usr/local针对不由系统打包者管理但仍遵循标准的unix部署规则的软件。
这就是为什么你有/usr/local/bin,/usr/local/sbin /usr/local/include等等......
/opt另一方面是用于不遵循此规则并以整体方式部署的软件。这通常包括以“Windows”风格打包的商业和/或跨平台软件。
pep*_*uan 16
就我个人而言,这就是比尔在@philfr 的链接中所说的:
在开发系统或沙箱上,拥有一个 /opt 目录,您可以在其中扔东西并查看它们是否有效,这很有意义。我知道我不会自己尝试包装东西。如果应用程序不起作用,您可以简单地 rm /opt/mytestapp 目录,该应用程序就是历史记录。当您运行大型部署时,打包可能有意义(有时我会打包应用程序),但很多时候,将内容扔到 /opt 中会很好。
不幸的是,大多数make install脚本将文件推入/usr/local而不是仅仅在那里制作符号链接:-/
小智 14
首先,我认为没有严格的答案;不同的管理员根据他们的背景会有不同的意见。从历史上看,/usr/local先到先得;这是 IIRC 伯克利的会议。在 System V 开发过程中的某个时刻,如果我没有记错的话(这都是很久以前的事了,我没有做笔记),有一个决定或希望能够以/usr只读方式挂载,这意味着您无法向其中添加新软件;这可能就是/opt
发明的原因。碰巧的是,有太多现有的软件确实写了/usr这个想法,但从未真正实现过。
我个人的偏好是/opt,每个产品都有一个单独的子目录;这使得删除产品成为一个简单的案例
rm -fr。但是如果你所有的软件都是通过一个好的包管理器安装的,那没关系,如果你安装的软件没有严格遵守这些约定,并且在/usr.出于相反的原因。
Dan*_*i_l 11
我对这个问题的看法略有不同。
虽然jlliagre的答案中的所有内容都是正确的,但对我而言,在集群中部署软件时的实际应用归结为默认环境变量和默认重用库。
简单地说 -/usr/local并且它的所有子目录都在适当的环境变量中,例如PATHand MANPATH,并且/usr/local/lib{,64}在 ldconfig 的 ( /etc/ld.so.conf.d/) 中。
/opt/OTOH 不是——这在需要多个版本或冲突包在系统中共存时有利,但需要某种环境管理(例如,环境模块或软件集合),不利之处在于它可能会“浪费” " 通过复制共享库来存储空间,因为每个安装/opt都可以完全独立。
为了工作的共享性质,/usr/local假设例如二进制文件直接安装到/usr/local/bin(和手册页到适当的/usr/local/share/man/...)而不是/usr/local/app/{bin,share/man,...}等。
我对这个老话题的看法略有不同。
/usr/local并要求我的本地用户对其进行 alpha 测试。/opt因为对他们来说这是第三方产品。/usr/local0.X.Y。/usr/local/opttarball如果我希望能够顺利接受,那么我就遵循FHS,从一开始就妥善包装。
如果我一开始就是一个牛仔,并且没有遵循 FHS,或者只是制作了 tarball 并且从未打包过它,那么在它被接受之前需要进行重构工作。
有些packages/tarballs永远无法摆脱/opt,有些永远无法摆脱/usr/local
但在我看来,这个流程很可能就是当时选择的初衷。
| 归档时间: |
|
| 查看次数: |
380376 次 |
| 最近记录: |