我正在 Web 服务器中设置 prometheus,我注意到每个导出器都是它自己的程序,必须将其添加到 $PATH 中的目录中。
我的问题是,为这些创建一个专门的目录(例如,“/usr/exporters/bin”,以构成一些示例)并将所有导出程序放在其中,然后将该文件添加到 $PATH 是否有任何优势?或者最好将程序推送到存放二进制文件的默认目录?
答案1
唯一的好处是 中的目录较少$PATH
,因此在查找可执行文件时要搜索的目录也较少,但是:
这种事件(搜索 中的所有目录
$PATH
)很少见。$PATH
条目(可执行文件)保存在 内的哈希表中bash
,该哈希表在启动时或通过 进行更新rehash
。不需要$PATH
每次都去寻找。这个活动并不昂贵。所有需要的信息(文件存在并且权限允许执行)都可以从文件的目录条目中收集 - 无需访问每个文件。只需阅读目录即可。
不将可执行文件移动到公共其他目录的原因包括:
您将拥有一个非标准环境。当你寻求帮助时,需要付出额外的努力来解释这一点。特别是非标准环境引起的问题将很难解决。
您将拥有一个非标准环境。当更新版本发布时,您的环境将与更新所期望的不匹配。
您将拥有一个非标准环境。您必须记住并在本周、下周、下周……永远进行非标准环境更新。
这是没有任何好处的猴子运动。
答案2
将二进制文件保存在具有匹配库的目录中是很常见的。用例是版本控制。假设您安装了多个版本的 python(2.7、2.7、3...)并且需要全部版本,但想要定义一个标准。
通常,这使用来自alternatives
例如的套件和到二进制文件的软链接/usr/bin
(定义在/etc/alternatives
)。
一个主要优点也可能是在 中使用从左到右的顺序$PATH
。例如,当您通过本地版本或执行预检查的脚本(例如在 ding 文件之前放置警告的脚本shred
)覆盖标准命令时,会将它们放在 开头列出的目录中$PATH
,因此本地(用户的)版本是运行标准版和标准版仅通过其完整路径。
关于您的问题的更多信息:移动二进制文件不是一个好主意:它们可能依赖于其目录中的其他文件。最多软链接它们。或者只使用alternatives
工具集 - 这也有助于保持更多概览。
答案3
这取决于...
如果您有数百个这样的程序,那么也许可以。
否则,由于/usr/local/bin/
位于您的 $PATH 中,因此请将您的程序放在用户目录中某个合理的位置,并将每个程序的相应软链接放置在/usr/local/bin/
.它并不完美,但避免了 PATH 损坏。