替换系统二进制文件时的最佳实践是什么?

替换系统二进制文件时的最佳实践是什么?

我正在使用 Mac OS X,它附带了几个二进制文件,主要位于/usr/bin/和中/usr/sbin/。由于它没有像某些 Linux 发行版那样的本机包管理器,因此我习惯于管理自己的二进制文件,在/usr/local/<package_name>/.

这样,我就可以从系统中完全删除包,但需要手动更新文件中的PATH和变量。MANPATH.bashrc

这是一个简单的例子:

Mac OS X 附带 ant 1.7.0,位于/usr/bin.我需要使用最新版本,因此我从 Apache 下载它,然后将其解压缩(构建)到/usr/local/apache-ant-1.8.2.然后我.bashrc用以下内容更新我的文件:

# Mac OS X original PATH
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
# Apache Ant 1.8.2
PATH="$PATH:/usr/local/apache-ant-1.8.2/bin"
export PATH

我确保在之前导出/usr/bin/和,因为除了我不想覆盖的之外,通常还有其他二进制文件。/usr/sbin/ant/bin/ant

问题是,当我输入时,which ant我得到了/usr/bin/.因此,我将其重命名/usr/bin/ant/usr/bin/ant-old以便使用最新版本。

虽然这有效,但我想知道是否有更好的方法来替换系统二进制文件(主要是为了避免最后一次重命名)。

答案1

更换系统二进制文件应该是最后的手段。

我的建议是:

  • 将和其他系统目录/usr/local/bin放在./usr/binPATH
  • 建立/usr/local/bin/ant一个符号链接到/usr/local/apache-ant-1.8.2/bin/ant.
  • 根本不要包含/usr/local/apache-ant-1.8.2/bin在其中。PATH

这边走:

  • 您的自定义(在/usr/local/bin)会覆盖系统默认值。
  • 符号链接/usr/local/bin/ant会提醒您从哪里获得该版本的ant.
  • 如果您想使用默认设置测试某些内容,只需在测试期间将/usr/local/bin其从您的设置中删除即可。PATH

答案2

覆盖系统二进制文件的常用方法是将新的二进制文件安装在/usr/local/bin(或sbin) 中,然后确保它/usr/local/bin位于/usr/bin您的路径之前。

通常,您可以通过使用 配置包来实现这一点--prefix=/usr/local,这会导致它们将二进制文件安装在 下,而不是为每个包/usr/local/bin创建一个目录。/usr/local

您是说其中有/usr/local/apache-ant-1.8.2/bin您不想使用的二进制文件吗?在这种情况下,我建议将其安装在下面(就像您现在所做的那样),但然后在其中/usr/local/apache-ant-1.8.2创建符号链接(而不是放入您的路径)。/usr/local/bin../apache-ant-1.8.2/bin/ant/usr/local/apache-ant-1.8.2/bin

相关内容