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の仕組み
/usr/bin/vim -> /etc/alternatives/vim -> /usr/bin/vim.basic みえるもの →リンク→ 中間 管理 → 実際に起動するプログラム
のようにシンボリックリンクがクッションの役目を果たす.
使うときは /usr/bin/vim を見るだけ。
管理するとき /etc/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