将类似的程序分组到单个路径目录中有什么好处吗?

将类似的程序分组到单个路径目录中有什么好处吗?

我正在 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 损坏。

相关内容