代替バイナリを使用する正しい方法は何ですか

代替バイナリを使用する正しい方法は何ですか

私は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

私はいつも後者を使用しているので、フルパスを書くことがますます迷惑になっています。

1つを定義する必要がありますかalias、それともよりきれいな方法がありますか?

ベストアンサー1

上記のRui F Ribeiroが提供した答えに加えて、update-alternatives1つを提出したいと思います。同じプログラムで利用可能な異なるバイナリ間の遷移を管理することは非常に便利です。

まず、インストールされているバイナリが実際のバイナリ/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代替グループに2つのバイナリを追加します。

$ 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必要に応じて元のバイナリに戻すのは簡単です。

おすすめ記事