いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.151 / 読者数:1311名

こんばんは、うすだです。

わたしの属する会社では、週に1回、自分の開発に関することを、 同じ部のひとたちに対して、さらりと発表する義務があります。

名古屋は人数が少ないため、今まで行われずにいたのですが、今年から、 インターネットのTV電話的なものを使用して、本社の方々のご指導の下、 行われることになりました。

毎週資料を作って発表内容を考える、というのは思った以上に大変です。
でも、発表ごとの苦手なわたしにとっては、ちょうどよい練習の場になると思い、 なるべく前向きに取り組もうと思っています。

ちなみに、本社とは、Gmail のビデオチャット機能や Skype を使用して、 やりとりをしています。しかし、 ときによっては音が聞き取れなかったり通信が途切れたりしますので、 円滑に進まないことがあります。

とはいっても、悪いことばかりではありません。
わたしは、その場で質問に答える能力がものすごく乏しいので、 通信状況が悪いのをいいことに、 質問を聞き返すなどして時間を稼ぐことができるのです。ま、それでも、 ちゃんと回答できないことが多いのですが…。

結局、前向きにとらえるつもりでいても、多少なりとも逃げ道があると、 そっちに引っ張られてしまう、という自分の弱さを再発見した次第です。

それでも、やらないよりはやったほうがましだ、と思うことにしまして、 今回も、はりきってまいりたいと思います。

今回のお題 - alternatives に対応させる

前回は、alternatives の使いかたを、簡単にご紹介しました。

Vol.150 - alternatives でいろんなものを共存させる
http://www.usupi.org/sysad/150.html

すでに alternatives に対応しているモノがいくつかあるという前提で、 それらを切り替えて使う手順を、お知らせしました。

しかし、みんながみんな alternatives に対応しているとは限りません。
ですが、せっかくそういう仕組みが用意されているのですから、 使わないともったいないですよね。

というわけで今回は、自力で alternatives に対応させる方法を、以下の順番で、 ご紹介していきたいと思います。

  1. 今回使用する架空のコマンド
  2. alternatives への登録
  3. 登録した候補への切り替え
  4. 登録の解除
  5. 付随するコマンドの登録と切り替え

なにはともあれやってみましょう! と言いたいところですが、その前に、 今回使用するモノについて、ご説明したいと思います。

それは、実行すると謝ってくれる、gomen というコマンドです。
2つのバージョンがあり、 alternatives で切り替えて使えるようにしたいと思います。
ちなみに、バージョン 0.1 では軽いノリで謝りますが、 バージョン 0.2 ではもう少し真面目に謝ります。

 

…もちろん、そんなモノは存在しませんので、今からでっちあげます。
まずは、バージョン 0.1 の gomen を作成します。
たとえば、以下のようにして、/usr/local/bin/gomen-0.1 を作ります。

  # cat > /usr/local/bin/gomen-0.1 << E-O-F
  > #!/bin/sh
  > echo "Sumimase-n"
  > E-O-F
  # chmod +x /usr/local/bin/gomen-0.1

念のため、実行してみましょう。
(/usr/local/bin にパスが通っていなければ、絶対パスで実行します。)

  # gomen-0.1
  Sumimase-n

…ああ、気軽に謝ってくれました。
では、同様の手順で、バージョン 0.2 も作成しておきます。

  # cat > /usr/local/bin/gomen-0.2 << E-O-F
  > #!/bin/sh
  > echo "Moushiwakearimasen"
  > E-O-F
  # chmod +x /usr/local/bin/gomen-0.2

こちらも念のため実行しますと、以下のように、やや真面目に謝ります。

  # gomen-0.2
  Moushiwakearimasen

ターゲットとなるモノを作りましたので、次にやることは、 alternatives への登録ですね。
登録するためには、 --install オプションをつけて update-alternatives を実行します。 用法は以下の通りです。

  update-alternatives --install リンク 名前 実際のパス 優先度

「リンク」には、実際に使用するコマンドのパスを指定します。
すると、指定したパスのシンボリックリンクが作成されます。
たとえば今回の場合は、/usr/local/bin/gomen を指定します。

「名前」には、管理対象となるモノの名前を指定します。
今回の場合は、コマンド名と同じく gomen で行きたいと思います。

「実際のパス」には、実際のコマンドのパスを指定します。
/usr/local/bin/gomen-0.1 などですね。

「優先度」には、登録するモノの優先度を、数値で指定します。
候補が複数あるときに、優先度によって、デフォルトで選択されるモノが決まります。 (値の大きい方が優先度が高いです。)

 

たとえば、バージョン 0.1 の gomen を登録するには、以下のように実行します。 ちなみに、優先度は 10 にしておきました。

  # update-alternatives --install /usr/local/bin/gomen gomen \
  /usr/local/bin/gomen-0.1 10

特に問題がなければ、シンボリックリンク /usr/local/bin/gomen が作成されます。

  # ls -l /usr/local/bin/gomen
  lrwxrwxrwx 1 root root 23 Jan 31 21:29 gomen -> /etc/alternatives/gomen

実体は /etc/alternatives/gomen のようですね。

  # ls -l /etc/alternatives/gomen
  lrwxrwxrwx 1 root root 24 Jan 31 21:29 gomen -> /usr/local/bin/gomen-0.1

これもシンボリックリンクで、その実体は gomen-0.1 です。
ですので、/usr/local/bin/gomen を実行すると、 以下のように軽いノリで謝ってくれるはずです。

  $ gomen
  Sumimase-n

 

同様に、バージョン 0.2 も登録します。優先度は 20 にしておきます。

  # update-alternatives --install /usr/local/bin/gomen gomen \
  /usr/local/bin/gomen-0.2 20

そして、gomen を実行しますと、今度は、やや真面目に謝ります。

  $ gomen
  Moushiwakearimasen

バージョン 0.2 の優先度の方が高いため、登録時に切り替わりました。
以下のように、update-alternatives --display を実行しますと、確認ができます。

  $ update-alternatives --display gomen
  gomen - status is auto.
   link currently points to /usr/local/bin/gomen-0.2
  /usr/local/bin/gomen-0.1 - priority 10
  /usr/local/bin/gomen-0.2 - priority 20
  Current 'best' version is /usr/local/bin/gomen-0.2.

というわけで、候補となるモノの登録が終わりました。
次は、それらの選択を行いますが、その方法は、すでに先週ご紹介したと思います。
(--config オプションや --set オプションを使用します。)

Vol.150 - alternatives でいろんなものを共存させる
http://www.usupi.org/sysad/150.html

ですので、説明などは割愛させていただきます。


さて、時を経ますと、古いバージョンは、だんだん使われなくなります。
使わないので候補から外したい、というときには、 --remove オプションをつけて update-alternatives を実行します。 用法は以下の通りです。

  update-alternatives --remove 名前 実際のパス

たとえば、バージョン 0.1 を解除するには、以下のように実行します。

  # update-alternatives --remove gomen /usr/local/bin/gomen-0.1

特に問題なければ、さくっと解除されます。

  $ update-alternatives --display gomen
  gomen - status is auto.
   link currently points to /usr/local/bin/gomen-0.2
  /usr/local/bin/gomen-0.2 - priority 20
  Current 'best' version is /usr/local/bin/gomen-0.2.

ちなみに、--remove-all オプションを使いますと、全部解除されます。

  # update-alternatives --remove-all gomen

すると、 /etc/alternatives/gomen や /usr/local/bin/gomen 自体が消し去られます。
恐ろしいオプションですので、ドキドキしながら使ってみてください。


以上、基本的な設定方法を、それなりにご紹介しました。

ただ、管理対象となるモノが、コマンド1個だけとは限りません。
たとえば、sendmail の場合、mailq や newalias コマンドなども、 場合によっては、同時に切り替える必要があると思います。

そんなとき、一緒に切り替えられると便利ですよね。
もちろん、alternatives には、その機能があります。
登録する際に、以下のように、--slave オプションをつけて指定します。

  update-alternatives --install リンク 名前 実際のパス 優先度 \
  --slave リンク 名前 実際のパス

複数ある場合は、その個数分、--slave オプションを指定します。
たとえば、suman というコマンドを、gomen と同様に切り替えたい場合、 以下のように登録します。(すでに登録済でも、実行できます。)

  # update-alternatives --install /usr/local/bin/gomen gomen \
  /usr/local/bin/gomen-0.1 10 --slave /usr/local/bin/suman suman \
  /usr/local/bin/suman-0.1
  # update-alternatives --install /usr/local/bin/gomen gomen \
  /usr/local/bin/gomen-0.2 20 --slave /usr/local/bin/suman suman \
  /usr/local/bin/suman-0.2

登録した内容を確認しますと、以下のようになっています。

  $ update-alternatives --display gomen
  gomen - status is auto.
   link currently points to /usr/local/bin/gomen-0.2
  /usr/local/bin/gomen-0.1 - priority 10
   slave suman: /usr/local/bin/suman-0.1
  /usr/local/bin/gomen-0.2 - priority 20
   slave suman: /usr/local/bin/suman-0.2
  Current `best' version is /usr/local/bin/gomen-0.2.

以上、alternatives に対応させる方法を、ご紹介しました。

実のところ、つい最近まで、alternatives の存在を知りませんでした。
ですので、alternatives で解決できるシチュエーションのときに、 手動で切り替えて対処していました。

いま、その存在を知りましたので、 これからは積極的に適用していこうと思っています。みなさんも、 是非やってみてください。

宿題の答え

前回の宿題は、

  alternatives の管理下にあるソフトの一覧を出力してみましょう。

でした。

やや冗長な解答例を、以下に示します。シェルスクリプトです。
(主要なディストリビューションには対応している…はずです。)

#!/bin/sh
for dir in /var/lib/alternatives /var/lib/dpkg/alternatives \
    /var/lib/rpm/alternatives; do
    if [ -d $dir ]; then
        if [ $# -gt 0 ]; then
            for file in $dir/*; do
                bname=`basename $file`
                echo ""
                echo "[$bname]"
                update-alternatives $* $bname
            done
        else
            ls $dir
        fi
    fi
done

たとえば、上記を alternatives-list.sh という名前で保存しましたら、 まずは、以下のように実行してみてください。

  % chmod +x alternatives-list.sh
  % ./alternatives-list.sh
  apache2  cpp  emacs  g++  gcc  pear  php  print  totem  vi  xemacs

このように、引数なしで実行しますと、そっけない一覧表示をします。

引数つきで実行しますと、引数をオプションとみなし、 それぞれに対してオプションをつけて update-alternatives を実行します。
たとえば、以下のように、引数に --display を指定して実行しますと、 それぞれに対して update-alternatives --display を実行した結果が、 どどどどっと得られます。

  % ./alternatives-list.sh --display

  [apache2]
  apache2 - status is auto.
   link currently points to /usr/sbin/apache2.prefork
  ...中略...

  [cpp]
  cpp - status is manual.
   link currently points to /usr/bin/cpp-4.0.2
  ...後略...

スクリプトを見ればわかると思いますが、引数のチェックはしていませんので、 --remove や --install などをつけて実行すると、 叱られたり予期せぬ結果になったりする恐れがあります。ご注意ください。
(一般ユーザの権限で動かせば、叱られるだけで済むと思います。)

以上、便利かどうかわかりませんが、個人的には満足しました。(^ε^;

もうちょっときれいにしたり、他の用途を考えたりといった工夫を、 各自行っていただけますと、今後の糧になってよいと思われます。

今回の宿題

今回の宿題は、

  設定ファイルやディレクトリなどを、alternatives で切り替えられる
  かどうか、試してみましょう。

です。

切り替えたいものが、コマンドだけとは限りませんよね。
おそらく大丈夫だと思いますが、思うだけでは「実践」とは言えませんので、 実際に試してみたいと思います。じゃなくて、試してみてください。

あとがき

前回の冒頭に、中古で買って4年経つ ThinkPad がまだまだ使える、 的なことを書きました。

しかし、いまこうして使っていて、ときどきキー入力をすっぽかす現象を体験しますと、 そろそろダメになるんじゃなかろうか、 ダメになってから購入を検討していては間に合わないんじゃなかろうか…的な恐怖が、 頭の中をかけめぐります。
(新しいのが欲しいという本当の理由には、目をそむけております。)

また、購入資金はありませんが、一家3人全員分の定額給付金を費せば、 Linux な Netbook くらいは買えるのでは的な悪魔のささやきが、 前回の決意っぽいものを覆そうと、わたしの心に揺さぶりをかけます。

というわけで、というわけでもないのですが、先日、某大手電気屋さんへ行ったときに、 Netbook 売り場をちょっとひやかしてきました。

話題の、ポケットにちょっとだけ入る VAIO typeP もありました。
わたくし、PC で絵を描く習慣があるのですが、 トラックポイントでしか描けませんので、この VAIO typeP には、 ひそかに過大なる関心をよせておりました。

…が、実際にピコピコ触ってみますと、キータッチがわたしの好みと違うのです。 いや、そもそも Netbook にキータッチを求めてはいけないのだとは思いますけれども。

絵を描くとはいえ、キーボードの方が圧倒的に使いますので、 キータッチがなじまない時点で、残念ですが、 VAIO typeP は候補から外しました。
(向こうから断られるよというご意見にも、目をそむけております。)

さて、他にもいろいろ触りましたが、大半はキーボードに馴染めません。
そんなわけで、一通り触ってみた後、Netbook をメインに使うのは無理、 というごく当り前な結論に達したのでした。

ただ、唯一、これなら使えるかもしれない…と思えたのは、 ThinkPad を世に出しつづける、われらが(?) Lenovo の IdeaPad でした。
もし、マウスがトラックポイントで、CPU がマルチコアだったら、 確実に買っていたかもしれません。まあ、 そうじゃなくて(家計的には)よかったと思います(思うことにします)。

それにしても、Netbook って、判を押したようにみんな同じですね。
スペックで差が出ないなら、他でもっとひねればいいのに、と思います。

 

今回も、ここまで読んでいただき、ありがとうございました。
次回は、2月15日(日) 頃に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−まぐまぐさんのおすすめに載っていました! 感謝感激です!
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本