Unix/Linuxプログラミング 理論と実践

Last-modified: 2008-12-27 (土) 09:01:14

どんな本?

こんな本。http://www.amazon.co.jp/Unix-Linux%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%B7%B5-Bruce-Molay/dp/4048700219

3つの問い

p.31より。

私たちは、次の3つの問いをくり返し考えながら、Unix システムを学んでいくのである。

3つの問いとは以下の通り。

  1. それは何をするのか。
  2. それはどんな仕組みなのか。
  3. 自分にも試してみることはできるか。

演習

本を元に、自分で作った演習問題と解答。
答えを見る前に自分の頭で考えた答えなので、正しいことを書いている保証は全くない。
鵜呑みにしないように。

ログイン~プログラム実行~ログアウト(p.31)

それは何をするのか?

  1. ログインプロンプトにユーザ名とパスワードを入れてログインする。
  2. シェルが起動する。
  3. シェル上でコマンドを入力すると色々なプログラムが実行される。
  4. 特別なコマンド(exitとか)を入力すると、シェルが終了しログアウトする。

それはどんな仕組みなのか?

ログインプロセスがいる。
このプロセスがユーザ名とパスワードを受け取ると、しかるべき場所(/etc/passwdとか)と照合する。
(この辺でPAMとか絡んだりするだろうがそれは置いておく)
認証が成功したらシェルを起動(exec)する。
シェルは、与えられたパスについて、存在するかどうか、実行権があるかどうかなどをチェックする。
実行ファイルであることがわかれば、そのファイルをexecする。
exitが与えられた場合はプロセスを終了し、親プロセス(この場合ログインプロセス)に処理を戻す。

自分にも試してみることはできるか?

これを全て実装するのであれば、最低限必要なものは以下の通り。

  • ログインプログラム
  • シェルプログラム
  • シェルが実行するプログラム

パスワードを平文ファイルで保存するとか、セキュリティ完全無視で考えれば無理ではない……と思う。
今のところやり方が全くわからないのは、

  • OS起動時にログインプログラムを起動する方法

ぐらいか。
それ以外は今すぐにできなくても、方法はなんとなく検討がつくし、調べ方もわかる。多分。