アプリを別名定義して管理する。同名でほかに候補があれば優先度に応じて自動選択したり候補から選択できる。
目次
- ヘルプ
- 名前の一覧を取得する
- 名前に紐づくアプリ一覧
1. ヘルプ
$ update-alternatives --help 使い方: update-alternatives [<オプション> ...] <コマンド> コマンド: --install <リンク> <名前> <パス> <優先度> [--slave <リンク> <名前> <パス>] ... システムに alternatives のグループを追加する --remove <名前> <パス> <名前> のグループ alternative から <パス> を削除する --remove-all <名前> alternatives システムから <名前> のグループを削除する --auto <名前> マスターリンク <名前> を、自動モードに切り替える --display <名前> <名前> グループについての情報を表示する --query <名前> --display <名前> の機械解析向けバージョン --list <名前> <名前> グループのすべてのターゲットを表示する --get-selections マスター alternative 名およびその状態を一覧する --set-selections 標準入力から alternative 状態を読み込む --config <名前> <名前> グループの alternatives を表示し、ユーザに 使用したいものを尋ねる --set <名前> <パス> <名前> の alternative として <パス> を設定する --all すべての alternatives に対して --config を呼び出す <リンク> は /etc/alternatives/<名前> を指すシンボリックリンクです。 (例: /usr/bin/pager) <名前> はこのリンクグループのマスター名です。 (例: pager) <パス> は alternative ターゲットファイルのうちの 1 つの場所です。 (例: /usr/bin/less) <優先度> は整数です; より大きな数を持つ選択肢は、自動モードにおいてより高い 優先度を持ちます。 オプション: --altdir <ディレクトリ> alternatives ディレクトリを変更する --admindir <ディレクトリ> 管理ディレクトリを変更する --log <ファイル> ログファイルを変更する --force alternative リンク付きのファイルの置換を許容する --skip-auto 自動モードにおいて、正しく設定された alternatives のプロンプトをスキップする (--config にのみ関連) --verbose 冗長操作として、多く出力する --quiet 静かな操作として、最小限の出力にする --help このヘルプを表示する --version バージョン番号を表示する
2. 名前の一覧を取得する
$ update-alternatives --get-selections
名前だけを抽出する。
$ update-alternatives --get-selections | cut -f1 -d ' '
editor
という名前がつくものを抽出する。
$ update-alternatives --get-selections | grep 'editor'
3. 名前に紐づくアプリ一覧
$ update-alternatives --list editor
/bin/ed
/bin/nano
/usr/bin/vim.tiny
$ update-alternatives --config editor alternative editor (/usr/bin/editor を提供) には 3 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /bin/nano 40 自動モード 1 /bin/ed -100 手動モード 2 /bin/nano 40 手動モード 3 /usr/bin/vim.tiny 15 手動モード 現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:
$ update-alternatives --display editor $ update-alternatives --display editor editor - 自動モード 最適なリンクのバージョンは '/bin/nano' です リンクは現在 /bin/nano を指しています リンク 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 です スレーブ editor.it.1.gz は /usr/share/man/it/man1/editor.1.gz です スレーブ editor.ja.1.gz は /usr/share/man/ja/man1/editor.1.gz です スレーブ editor.pl.1.gz は /usr/share/man/pl/man1/editor.1.gz です スレーブ editor.ru.1.gz は /usr/share/man/ru/man1/editor.1.gz です /bin/ed - 優先度 -100 スレーブ editor.1.gz: /usr/share/man/man1/ed.1.gz /bin/nano - 優先度 40 スレーブ editor.1.gz: /usr/share/man/man1/nano.1.gz /usr/bin/vim.tiny - 優先度 15 スレーブ editor.1.gz: /usr/share/man/man1/vim.1.gz スレーブ editor.fr.1.gz: /usr/share/man/fr/man1/vim.1.gz スレーブ editor.it.1.gz: /usr/share/man/it/man1/vim.1.gz スレーブ editor.ja.1.gz: /usr/share/man/ja/man1/vim.1.gz スレーブ editor.pl.1.gz: /usr/share/man/pl/man1/vim.1.gz スレーブ editor.ru.1.gz: /usr/share/man/ru/man1/vim.1.gz
リンクを追ってみる。
$ which editor /usr/bin/editor $ ls -l $(which editor) lrwxrwxrwx 1 root root 24 11月 13 22:04 /usr/bin/editor -> /etc/alternatives/editor $ ls -l /etc/alternatives/editor lrwxrwxrwx 1 root root 9 11月 13 22:04 /etc/alternatives/editor -> /bin/nano
alternatives
の定義は以下ディレクトリにある。
$ ls -1 /var/lib/dpkg/alternatives
$ cat /var/lib/dpkg/alternatives/editor auto /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 editor.it.1.gz /usr/share/man/it/man1/editor.1.gz editor.ja.1.gz /usr/share/man/ja/man1/editor.1.gz editor.pl.1.gz /usr/share/man/pl/man1/editor.1.gz editor.ru.1.gz /usr/share/man/ru/man1/editor.1.gz /bin/ed -100 /usr/share/man/man1/ed.1.gz /bin/nano 40 /usr/share/man/man1/nano.1.gz /usr/bin/vim.tiny 15 /usr/share/man/man1/vim.1.gz /usr/share/man/fr/man1/vim.1.gz /usr/share/man/it/man1/vim.1.gz /usr/share/man/ja/man1/vim.1.gz /usr/share/man/pl/man1/vim.1.gz /usr/share/man/ru/man1/vim.1.gz
アプリを登録する
--install
--install <リンク> <名前> <パス> <優先度> <リンク> は /etc/alternatives/<名前> を指すシンボリックリンクです。 (例: /usr/bin/pager) <名前> はこのリンクグループのマスター名です。 (例: pager) <パス> は alternative ターゲットファイルのうちの 1 つの場所です。 (例: /usr/bin/less) <優先度> は整数です; より大きな数を持つ選択肢は、自動モードにおいてより高い 優先度を持ちます。
最初に<パス>の実体のみ必要。これは実行ファイルである。その他、<リンク>
、<名前>
は新規作成してくれる。
名前の確認
vim
の名前を登録したい。既存かどうか調べるとvim
は存在しない。
$ update-alternatives --get-selections | grep 'vim' ex auto /usr/bin/vim.tiny rview auto /usr/bin/vim.tiny vi auto /usr/bin/vim.tiny view auto /usr/bin/vim.tiny
登録する
$ sudo update-alternatives --install /usr/local/bin/vim vim /usr/local/bin/vim8.1.1017 50 update-alternatives: /usr/local/bin/vim (vim) を提供するために自動モードで /usr/local/bin/vim8.1.1017 を使います
以下のような意味になる。
/usr/local/bin/vim8.1.1017
※ のリンクを作る/usr/local/bin/vim
というリンクにする--config <名前>
で使う名前(グループ名)はvim
にするvim
グループにおける/usr/local/bin/vim8.1.1017
の優先度は50
である
引数 | 値 |
---|---|
<リンク> (リンクファイル) | /etc/alternatives/vim |
<名前> (グループ名) | vim |
<パス> (実行バイナリファイル) | editor /usr/local/bin/vim8.1.1017 |
<優先度> | 50 |
登録されたか確認する
リンクが作成されたか確認する。
$ ls -l /etc/alternatives/vim lrwxrwxrwx 1 root root 26 3月 27 16:01 /etc/alternatives/vim -> /usr/local/bin/vim8.1.1017
$ update-alternatives --list vim /usr/local/bin/vim8.1.1017
$ update-alternatives --display vim vim - 自動モード 最適なリンクのバージョンは '/usr/local/bin/vim8.1.1017' です リンクは現在 /usr/local/bin/vim8.1.1017 を指しています リンク vim は /etc/alternatives/vim です /usr/local/bin/vim8.1.1017 - 優先度 50
$ update-alternatives --config vim リンクグループ vim に 1 つの alternative のみがあります (/usr/local/bin/vim が提供): /usr/local/bin/vim8.1.1017 設定は行いません。
選択肢がないときは--config
で選ばせる必要がないためか上記のようなメッセージが出た。
$ vim --version VIM - Vi IMproved 8.1 (2018 May 18, compiled Mar 18 2019 13:12:10) 適用済パッチ: 1-1017 ...
万事OK。
さらに抽象化する
先述はバージョンを抽象化した。次は用途で抽象化する。すなわちグループ名editor
にvim
を候補として登録する。
editor
の既存アプリ一覧
まずは既存のeditor
グループに登録されているアプリ一覧を確認する。
$ update-alternatives --list editor
/bin/ed
/bin/nano
/usr/bin/vim.tiny
既存アプリの優先度も合わせて確認する。
$ update-alternatives --config editor alternative editor (/usr/bin/editor を提供) には 3 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /bin/nano 40 自動モード 1 /bin/ed -100 手動モード 2 /bin/nano 40 手動モード 3 /usr/bin/vim.tiny 15 手動モード
vimがない。ここにvimを追加していく。最優先にしたいので50
にしよう。41
でも可。
editor
グループにvim
を登録する
update-alternatives
が管理するeditor
リンクは以下にある。
$ ls -l /etc/alternatives/editor lrwxrwxrwx 1 root root 9 11月 13 22:04 /etc/alternatives/editor -> /bin/nano
グループeditor
にvim
を登録する。/etc
配下なのでsudo
が必要。
$ sudo update-alternatives --install /usr/bin/editor editor /usr/local/bin/vim 50 update-alternatives: /usr/bin/editor (editor) を提供するために自動モードで /usr/local/bin/vim を使います
登録確認
editor
グループの一覧にvim
がある。
$ update-alternatives --list editor /bin/ed /bin/nano /usr/bin/vim.tiny /usr/local/bin/vim
候補の選択としてvim
が出る。優先度50
。
$ update-alternatives --config editor alternative editor (/usr/bin/editor を提供) には 4 個の選択肢があります。 選択肢 パス 優先度 状態 ------------------------------------------------------------ * 0 /usr/local/bin/vim 50 自動モード 1 /bin/ed -100 手動モード 2 /bin/nano 40 手動モード 3 /usr/bin/vim.tiny 15 手動モード 4 /usr/local/bin/vim 50 手動モード 現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:
vimが追加されている。OK!
実行確認
$ editor
vimが実行された。OK!
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12
- python 2.7.13, pip 9.0.1
- python3 3.5.3, pip3 9.0.1
- ranger 1.9.2
$ uname -a Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux