gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

update-alternativesの使い方

update-alternativesとは

 Linuxを使う時、シンボリックリンクを使う時があります。例えばgccでは、生成したバイナリを動かす環境に応じて、バージョンを使い分ける必要があります。この時、毎回必要なバージョン以外のgccを削除することもできますが、シンボリックリンクを使ってバージョン管理をするのが便利です。lnコマンドを使ってシンボリックリンクを張ることもできますが、管理対象が別のパッケージに依存しており、かつそのパッケージのバージョンも変更しないといけないときは面倒です。update-alternativesコマンドはそうした時に使う、目的とするパッケージとそれに従属するパッケージのシンボリックリンクを、一括で切り替えることができるコマンドです。

f:id:graziegrazie:20151112051352p:plain
Fig.1 update-alternativesコマンドのイメージ

update-alternativesコマンドの使い方

 update-alternativesの主要なオプションは、
・--install
 シンボリックリンクの作成・登録
・--slave
 installオプションで作成したシンボリックリンクに従属するシンボリックリンクの作成・登録
・--set
 使用するシンボリックリンクの設定(コマンド)
・--config
 使用するシンボリックリンクの設定(一覧から選択)
・--display
 現在選択されているシンボリックリンクの内容を表示
の5つがあります。下記ではそれぞれのオプションについて説明します。

--install

 installオプションを使う時は下記の様に記載します。

 sudo update-alternatives --install <作成するシンボリックのパス> <グループ名> <実体へのパス> <優先度>

例えばgccの管理を行う時は、
 作成するシンボリックのパス = /usr/bin/gcc
 グループ名 = gcc
 実体へのパス = /usr/bin/gcc-4.8(管理したいバージョンのパスを設定)
 優先度 = 10(任意の数字)
とします。

--slave

 slaveオプションを使う時は、下記の様にinstallオプションを登録する時に、関連するシンボリックリンクを全て記載して使います。

 sudo update-alternatives --install <作成するシンボリックのパス> <グループ名> <実体へのパス> <優先度>\
--slave <作成するシンボリックのパス> <グループ名> <実体へのパス>\
            ・・・・・・・・
--slave <作成するシンボリックのパス> <グループ名> <実体へのパス>

例えばgccと連動してg++のバージョンを変更したい場合は、
 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 10\
--slave /usr/bin/gcc g++ /usr/bin/g++-4.8
として実行する。

--set

 コマンドライン上でグループ名をタイプした時、呼び出される実体が、グループの中のどれを指すか、下記の様にコマンドラインで指定する。

 sudo update-alternatives --install <グループ名> <実体へのパス>

例えばgccとタイプした時、gccの4.8を使いたい場合、
 sudo update-alternatives --install gcc /usr/bin/gcc-4.8
として実行する。

--config

 --setと同じことを、下記の様に対話形式で行います。
 sudo update-alternatives --install <グループ名>

例えばgccとして4.8, 4.9を登録している場合、

There are 2 programs which provide 'gcc'.

Selection Command
-----------------------------------------------
*+ 1 /usr/bin/gcc-4.8
2 /usr/bin/gcc-4.9

として、選択したいバージョンの番号を入力します。

--display

例えばgccを管理する場合、

 sudo update-alternatives --display gcc
 ruby - auto mode
  リンクは現在 /usr/bin/gcc-4.8 を指しています
 /usr/bin/gcc-4.8 - 優先度 20
 /usr/bin/gcc-4.9 - 優先度 10
 現在の `最適' バージョンはgcc-4.8です。

となります。