Linux Mint 18 Cinnamon64ビットを使用しています。
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に置き換えます
もう1つの簡単な方法は、元のパッケージを保持することです。パッケージマネージャーに更新を適用しないように指示し、次のように新しいバイナリをコピーします。
echo "p7Zip hold" | dpkg --set-selections
またはより単純:
apt-mark hold p7Zip
参照: Debianでパッケージが更新されないようにする方法
もう1つのよりクリーンなオプションは、新しいp7Zipバージョンでdebを構築することですが、方法と特定の手順はパッケージによって異なるため、ここでは説明しません。
上記のRuiF 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
これで、AlternativesManagerを使用できます。コマンドの形式は次のとおりです。
$ 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キーを押します。完了!このアプローチの良いところは、開いているすべてのシェルセッションを含め、システム全体に即座に適用されることです。 PATH
を操作する必要はなく、必要なときにいつでも元のバイナリに簡単に戻すことができます。
PATH環境変数を調整して、7z
の特定のディレクトリを含めることができます。
export PATH=/usr/local/share/PeaZip/res/7z:$PATH
7z
を/usr/local/bin
にインストールしたり、このディレクトリにリンクしたりすることはできますか?
多くの場合、/usr/local/lib
は/usr/bin
の前にあるため、適切なバイナリが見つかります。