Debian

使用替代二進製文件的正確方法是什麼

  • April 9, 2019

我在 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還是有一個更清潔的方法?

在 Debian 中用另一個二進製文件替換二進製文件以使其在包更新後仍然存在(例如,替換 BIND 包的 init 文件)的一種方法是進行文件轉移。

基本上,文件轉移將原始文件安裝/移動到另一個位置,並指示包管理系統將對該文件的任何後續安裝更新放置在新位置,保持原始位置不變。

根據 Debian政策手冊 - diversions,在您的情況下:

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,但是由於方法和具體步驟因包而異,我不會在這裡嘗試描述它。

除了上面 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

將創建一個符號連結/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,還可以在需要時更輕鬆地切換回原始二進製文件。

引用自:https://unix.stackexchange.com/questions/324241