alternatives を使って使うプログラムを切替えるには
update-alternatives --config プログラム名
実際に editor を切替えてみる.
takuya@atom:~$ update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).
Selection Path 優 Status
------------------------------------------------------------
* 0 /bin/nano 40 auto mode
1 /bin/ed -100 manual mode
2 /bin/nano 40 manual mode
3 /usr/bin/vim.basic 30 manual mode
4 /usr/bin/vim.tiny 10 manual mode
Press enter to keep the current choice[*], or type selection number: 3 # ←vim 指定
editor をVimにした
alternatives候補一覧表示
takuya@atom:~$ update-alternatives --list editor
/bin/ed
/bin/nano
/usr/bin/vim.basic
/usr/bin/vim.tiny
alternativesとは
alternatives は同じソフトを使い分けるのに使われてる。
たとえばJava。JavaならSunJDKとOpenJDK。
たとえばエディタ。Editorではnano/emacs/vim/ed など
たとえばmta.メールサーバーでは sendmail/postfix/qmailなど
たとえば同じソフトウェアのバージョン違い
ruby だと ruby1.8 と ruby19 とか
python だと python 2.4 python 2.5 python 3 など
名前が同じソフトウェアで機能も似ているものを一括管理してしまう仕組み.
仕組みと言っても単なるsymbolicリンクで、ファイルの保存先が約束事になっているだけ
もともとDebianが競合するソフトをAptで管理するのに使われていたが
いまではどのディストリビューションでも採用されているみたい。
alternativesの仕組み
通常 vim は /usr/bin/vim になるが
/usr/bin/vim -> /etc/alternatives/vim -> /usr/bin/vim.basic
みえるもの →リンク→ 中間 管理 → 実際に起動するプログラム
のようにシンボリックリンクがクッションの役目を果たす.
使うときは /usr/bin/vim を見るだけ。
管理するとき /etc/alternatives で実体を指定する
ファイルの実体
もともとDebianがパッケージ管理に使っている由来のためDebianでは
/var/lib/dpkg/alternativesにAlternativesの実体(設定)がある
alternatives のファイルの中身など
ls -l /var/lib/dpkg/alternatives
合計 408
-rw-r--r-- 1 root root 53 2011-02-01 20:30 aptitude
-rw-r--r-- 1 root root 269 2011-03-05 22:37 automake
-rw-r--r-- 1 root root 207 2010-10-08 00:57 awk
(略)
-rw-r--r-- 1 root root 718 2011-04-09 13:07 editor
(略)
-rw-r--r-- 1 root root 42 2011-02-01 20:30 vim
-rw-r--r-- 1 root root 46 2011-02-01 20:30 vimdiff
-rw-r--r-- 1 root root 107 2010-10-08 00:57 w
-rw-r--r-- 1 root root 122 2010-10-08 01:12 write
-rw-r--r-- 1 root root 127 2010-10-08 01:13 www-browser
alternatives はシンボリックリンクで管理されている
/etc/alternatives にシンボリックリンクの実体がある
takuya@atom:~$ ls -l /etc/alternatives
lrwxrwxrwx 1 root root 24 2011-02-01 20:30 aptitude -> /usr/bin/aptitude-curses
lrwxrwxrwx 1 root root 22 2011-03-05 22:37 automake -> /usr/bin/automake-1.11
lrwxrwxrwx 1 root root 13 2011-02-01 19:30 awk -> /usr/bin/mawk
(略)
rwxrwxrwx 1 root root 18 2011-04-09 13:07 editor -> /usr/bin/vim.basic
(略)
lrwxrwxrwx 1 root root 18 2011-02-01 20:30 vim -> /usr/bin/vim.basic
lrwxrwxrwx 1 root root 18 2011-02-01 20:30 vimdiff -> /usr/bin/vim.basic
lrwxrwxrwx 1 root root 17 2011-02-01 19:30 w -> /usr/bin/w.procps
lrwxrwxrwx 1 root root 33 2011-02-01 19:30 w.1.gz -> /usr/share/man/man1/w.procps.1.gz
lrwxrwxrwx 1 root root 18 2011-02-01 19:30 write -> /usr/bin/bsd-write
lrwxrwxrwx 1 root root 12 2011-02-01 19:30 www-browser -> /usr/bin/w3m
管理されているモノはどう見えるか
vim は alternatives を指している
takuya@atom:~$ ls -l `which vim `
lrwxrwxrwx 1 root root 21 2011-02-01 20:30 /usr/bin/vim -> /etc/alternatives/vim
alternatives の vim は プログラム本体を指している
takuya@atom:~$ ls -l /etc/alternatives/vim
lrwxrwxrwx 1 root root 18 2011-02-01 20:30 /etc/alternatives/vim -> /usr/bin/vim.basic
alternatives のさらなる詳細表示
takuya@atom:~$ update-alternatives --display editor
editor - manual mode
link currently points to /usr/bin/vim.basic
/bin/ed - priority -100
slave editor.1.gz: /usr/share/man/man1/ed.1.gz
/bin/nano - priority 40
slave editor.1.gz: /usr/share/man/man1/nano.1.gz
/usr/bin/vim.basic - priority 30
slave editor.1.gz: /usr/share/man/man1/vim.1.gz
slave editor.fr.1.gz: /usr/share/man/fr/man1/vim.1.gz
slave editor.it.1.gz: /usr/share/man/it/man1/vim.1.gz
slave editor.pl.1.gz: /usr/share/man/pl/man1/vim.1.gz
slave editor.ru.1.gz: /usr/share/man/ru/man1/vim.1.gz
/usr/bin/vim.tiny - priority 10
slave editor.1.gz: /usr/share/man/man1/vim.1.gz
slave editor.fr.1.gz: /usr/share/man/fr/man1/vim.1.gz
slave editor.it.1.gz: /usr/share/man/it/man1/vim.1.gz
slave editor.pl.1.gz: /usr/share/man/pl/man1/vim.1.gz
slave editor.ru.1.gz: /usr/share/man/ru/man1/vim.1.gz
Current 'best' version is '/bin/nano'.
また、デフォルトの状態に戻すには、--auto オプションで指定
update-alternatives --auto editor