update-alternatives コマンド

alternatives システムでデフォルトコマンドを決定するシンボリックリンクを管理します。

概要

update-alternatives は、ユーザーが特定のコマンド名を入力したときに実行されるコマンドを決定するシンボリックリンクの作成、削除、管理、および情報表示を行います。これは Debian の alternatives システムの一部で、同じプログラムの複数のバージョンが共存し、そのうちの1つをデフォルトとして指定できるようにします。

オプション

--install

新しい alternative リンクグループを作成します

$ sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim 50
update-alternatives: /usr/bin/vim を提供するために /usr/bin/editor (editor) を自動モードで使用します

--config

リンクグループに使用する alternative を設定します

$ sudo update-alternatives --config editor
editor の alternative は 3 個あります (which provide /usr/bin/editor)。

  選択肢    パス                優先度   状態
------------------------------------------------------------
* 0            /usr/bin/vim         50        自動モード
  1            /usr/bin/emacs       40        手動モード
  2            /usr/bin/nano        30        手動モード
  3            /usr/bin/vim         50        手動モード

現在の選択[*]を保持するには Enter、さもなければ選択肢の番号のキーを押してください:

--display

リンクグループに関する情報を表示します

$ update-alternatives --display editor
editor - 自動モード
  最適バージョンへのリンクは /usr/bin/vim です
  リンクは現在 /usr/bin/vim を指しています
  リンク editor は /usr/bin/editor です
  スレーブ editor.1.gz は /usr/share/man/man1/editor.1.gz です
  スレーブ editor.fr.1.gz は /usr/share/man/fr/man1/editor.1.gz です
  /usr/bin/emacs - 優先度 40
  /usr/bin/nano - 優先度 30
  /usr/bin/vim - 優先度 50

--remove

リンクグループから alternative を削除します

$ sudo update-alternatives --remove editor /usr/bin/emacs
update-alternatives: 自動モードから editor (/usr/bin/emacs) を削除しています

--set

特定の alternative を選択済みとしてリンクグループに設定します

$ sudo update-alternatives --set editor /usr/bin/nano
update-alternatives: /usr/bin/nano を提供するために /usr/bin/editor (editor) を手動モードで使用します

--auto

リンクグループを自動モードに設定します(最も優先度の高い alternative が使用されます)

$ sudo update-alternatives --auto editor
update-alternatives: /usr/bin/vim を提供するために /usr/bin/editor (editor) を自動モードで使用します

使用例

Java alternatives の設定

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-11-openjdk/bin/java 1100
update-alternatives: /usr/lib/jvm/java-11-openjdk/bin/java を提供するために /usr/bin/java (java) を自動モードで使用します

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk/bin/java 1000
update-alternatives: /usr/lib/jvm/java-11-openjdk/bin/java を提供するために /usr/bin/java (java) を自動モードで使用します

$ sudo update-alternatives --config java
java の alternative は 2 個あります (which provide /usr/bin/java)。

  選択肢    パス                                      優先度   状態
------------------------------------------------------------
* 0            /usr/lib/jvm/java-11-openjdk/bin/java     1100      自動モード
  1            /usr/lib/jvm/java-8-openjdk/bin/java      1000      手動モード
  2            /usr/lib/jvm/java-11-openjdk/bin/java     1100      手動モード

現在の選択[*]を保持するには Enter、さもなければ選択肢の番号のキーを押してください:

コマンドで利用可能な alternatives を確認する

$ update-alternatives --list editor
/usr/bin/emacs
/usr/bin/nano
/usr/bin/vim

ヒント

優先度の値について理解する

優先度の値が高いほど(例えば50より100の方が)、自動モードで選択される可能性が高くなります。alternatives を設定する際は、優先するバージョンに高い数値を割り当ててください。

関連コマンドのグループ管理

複数のコマンド(Javaのjava、javac、jarなど)を持つプログラムの場合、すべてのツールで一貫したバージョン管理を確保するために、各コマンドの alternatives を作成してください。

自動モードと手動モード

自動モードでは、システムは最も優先度の高い alternative を選択します。手動モードでは、より高い優先度の alternative が後でインストールされても、選択した選択肢が維持されます。

スレーブリンク

関連ファイル(メインの alternative と一緒に変更されるべきマニュアルページなど)を管理するには、スレーブリンク(--slave オプション付き)を使用してください。

よくある質問

Q1. 自動モードと手動モードの違いは何ですか?

A. 自動モードでは、システムは最も優先度の高い alternative を選択します。手動モードでは、明示的に変更するまで選択した選択肢が維持されます。

Q2. コマンドで利用可能なすべての alternatives を確認するにはどうすればよいですか?

A. update-alternatives --list コマンド名 を使用してすべての alternatives を確認するか、update-alternatives --display コマンド名 でより詳細な情報を確認できます。

Q3. alternative を完全に削除するにはどうすればよいですか?

A. update-alternatives --remove リンク名 パス を使用して、グループから特定の alternative を削除します。

Q4. alternatives をインストールする際にどの優先度の数値を使用すべきですか?

A. 優先度は任意の整数です。高い数値(100など)は低い数値(10など)よりも優先度が高くなります。優先順位を反映した値を選択してください。

参考資料

https://manpages.debian.org/bullseye/dpkg/update-alternatives.1.en.html

改訂履歴