それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

alternatives を使って使うプログラムを切替えるには

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 は同じソフトを使い分けるのに使われてる。
たとえばJavaJavaなら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