使用替代二進製文件的正確方法是什麼
我在 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
另一個更簡潔的選擇是使用新的 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
,還可以在需要時更輕鬆地切換回原始二進製文件。