使用替代二进制文件的正确方法是什么

使用替代二进制文件的正确方法是什么

我使用的是 Linux Mint 18 Cinnamon 64 位。

我的系统上有这些二进制文件7z及其版本:

/usr/bin/7z

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18

/usr/local/share/PeaZip/res/7z/7z

7-Zip [32] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21

由于我总是使用后者,因此编写它的完整路径变得越来越烦人。

我应该定义一个alias还是有更干净的方法?

答案1

除了上面 Rui F Ribeiro 给出的答案之外,我还想提出update-alternatives一些内容。管理同一程序可用的不同二进制文件之间的切换非常方便。

首先,检查安装的二进制文件是否是实际的二进制文件/usr/bin或只是符号链接。这可以通过以下方式完成ls -la

$ ls -la $(which 7z)

# If it is a binary, it will look like this:
-rwxr-xr-x 1 root root 39 Aug 15  2016 /usr/bin/7z

# If a symlink, something like this:
lrwxrwxrwx 1 root root 20 Apr  9 12:58 /usr/bin/7z -> /some/another/path/7z

如果您找到了二进制文件,请使用以下命令将其移离当前位置dpkg-divert

$ sudo dpkg-divert --divert /usr/bin/7z.dist --rename /usr/bin/7z

现在您可以使用替代管理器。该命令具有以下格式:

$ sudo update-alternatives --install <link> <name> <path> <priority>

将两个二进制文件添加到7z替代组中:

$ sudo update-alternatives --install /usr/bin/7z 7z /usr/bin/7z.dist 10
$ sudo update-alternatives --install /usr/bin/7z 7z /usr/local/share/PeaZip/res/7z/7z 20

将创建一个符号链接 at /usr/bin/7z,指向列表中具有最高优先级的二进制文件。如果您出于任何原因需要在二进制文件之间切换,只需执行以下操作:

$ sudo update-alternatives --config 7z

交互式提示将询问您要使用哪个二进制文件:

There are 2 choices for the alternative 7z (providing /usr/bin/7z).

  Selection    Path                                   Priority   Status
-------------------------------------------------------------------------
* 0            /usr/local/share/PeaZip/res/7z/7z       20        auto mode
  1            /usr/bin/7z.dist                        10        manual mode
  2            /usr/local/share/PeaZip/res/7z/7z       20        manual mode

Press <enter> to keep the current choice[*], or type selection number: 

输入Selection您想要的号码,然后按 Enter 键。完毕!这种方法的好处是可以立即应用于整个系统,包括所有打开的 shell 会话。无需操作PATH,也可以在需要时更轻松地切换回原始二进制文件。

答案2

在 Debian 中,将二进制文件替换为另一个二进制文件以使其在软件包更新后继续存在的一种方法(例如,替换 BIND 软件包的 init 文件)是进行文件转移。

基本上,文件转移将原始文件安装/移动到另一个位置,并指示包管理系统将该文件的任何后续安装更新放置在新位置,而不影响原始位置。

根据 Debian政策手册——改道,在你的情况下:

dpkg-divert --divert /usr/local/share/PeaZip/res/7z/7z.old --rename /usr/bin/7z
cp /usr/local/share/PeaZip/res/7z/7z /usr/bin/7z

要删除转移:

dpkg-divert --remove /usr/bin/7z

在尝试转移之前,先备份两个二进制文件。

更多命令请参见:用 dpkg-divert 替换二进制文件和文件

另一个更简单的选择是保留原始包,例如告诉包管理器不要对其应用更新,并复制新的二进制文件,如下所示:

echo "p7zip hold" | dpkg --set-selections

或者更简单:

apt-mark hold p7zip

看:如何防止 Debian 中的软件包被更新

另一个更简洁的选择是使用新的 p7zip 版本构建 deb,但是由于方法和具体步骤因软件包而异,我不会在这里尝试描述它。

答案3

您可以调整 PATH 环境变量以包含以下特定目录7z

export PATH=/usr/local/share/PeaZip/res/7z:$PATH

是否可以将其安装7z/usr/local/bin链接到该目录中?

通常,/usr/local/lib是在之前/usr/bin,这样可以找到好的二进制文件。

相关内容