home
h o m e

HACKER生活入門


村上幸雄

No.001 UNIXを使う

 1960年代の中頃から、マサチューセッツ工科大学(M.I.T.)とAT&Tベル研究所、General Electric社は、MULTICS(MULTiplexed Information and Computing Service)と呼ばれるオペレーティングシステム(OS)開発のプロジェクトに携わった。MULTICSは、当時としては先進的なものだったが、プロジェクトが大規模になりすぎたなどの理由から、事実上、失敗に終わってしまった。結局、AT&Tベル研究所は、MULTICSの開発から撤退することになった。
 MULTICSプロジェクトに参加していたAT&Tベル研究所のKen Thompsonは、1969年、使われなくなった古いミニコンピュータDEC PDP-7に、自身のプログラミング作業を支援するという目的からOSを開発した。このOSはいくらかMULTICSに似ている部分があり、当初はUNICS(UNiplexed Information and Computing Service)と呼ばれていたが、後にUNIXと呼ばれる事になった。
 1973年になるとKen Thompsonは同僚のDennis Ritchieと、彼が開発したC言語と呼ばれるプログラミング言語で、UNIXを書き直した。C言語はコンピュータの機種に依存しないように設計されたプログラミング言語で、汎用的という意味では高級言語に属するが、マシンにより近い命令が記述できるのが特徴だ。UNIXはC言語に書き換えられることによって、多くのコンピュータに移植されることになった。
 また、UNIXは教育・研究機関に対しては、メディア(テープ等)代程度の値段で、ソースコード付きで配付された。その結果、UNIXとこれの類似システムは、世界中で使用されるようになった。

 UNIXの優れている点は、その思想にある。システムは小さなプログラムが結合したもので、結合の仕組みは簡単で汎用的なものになっている。システムの柔軟性は高く、ユーザの利用環境を自由にカスタマイズできる。そして、特殊な制限をユーザに科さないという点が、プログラマに好まれた。

loginとlogout

 UNIXを使うには、自分のユーザ名とパスワードを入力して、loginする必要がある。Free BSDやLinuxの場合、次のようなメッセージが表示される。

login:

 この"login:"というメッセージが表示されたら、ユーザ名を入力して、復帰(return)キーを押す。すると、次のようなメッセージが表示されるはずだ。

password:

 この"password:"というメッセージが表示されたら、パスワードを入力して、復帰キーを押す。
 ログインの方法は、コンピュータの設定に異なる。Mac OS Xの場合、「システム環境設定」の「ログイン」で、「自動的にログイン」をチェックしていると、コンピュータの起動時にloginを行わなくても、自動的にloginされる。

注意:Mac OS Xでは、ディベロッパ・ツールをインストールしないとUNIXコマンドの一部しか利用できない。ディベロッパ・ツールはMac OS XパッケージのDeveloper Tools CDに納められているが、最新版はApple Developer Connection(ADC)会員エリアからダウンロードできる。ADCでは無料のOnlineプログラムが用意されているので、ADCへの参加を勧める。
詳しくは以下のサイトを参照してほしい。

http://developer.apple.com/ja/membership/index.html

 次にコマンドを入力する方法を説明する。Free BSDやLinuxでは、loginすると、以下のような文字が表示される。

$

 これはプロンプトと呼ばれる文字で、このプロンプトの後ろに、例えば"date"と入力し、復帰キーを押すと、日付けと時刻が表示される。

$ date
Mon Jan 14 02:03:19 JST 2002
$

 UNIXでは、マニュアルもコマンド操作によって読むことができる。例をあげると、dateコマンドのマニュアルを読みたい場合は、以下のコマンドを実行する。

$ man date

 manコマンドは"q"と入力すれば終了するので、マニュアルを読み終えた場合は、この文字を入力する。

 コマンドの実行はシェルと呼ばれるプログラムが行っていて、上の例では、シェルがユーザの入力を読み取り、dateというプログラムを実行し、dateの実行結果を画面に表示している。
 シェルを動かす方法はコンピュータの環境によって異なっている。Mac OS Xの場合は、ApplicationsフォルダのUtilitiesフォルダにあるTerminalというアプリケーションのアイコンをダブルクリックして動作させる。

 シェルの種類は複数あり、以下のものがよく使われている。

  • sh
    Bourneシェル。標準的なシェルで、殆どのUNIXで利用できる。
  • csh
    Cシェル。カリフォルニア大学バークレー校で開発された。BSD(Berkley Software Distribution)の標準シェル。
  • ksh
    Kornシェル。BourneシェルにCシェルの機能を組み込んだシェル。
  • bash
    拡張されたBourneシェル
  • tcsh
    拡張されたCシェル。Mac OS Xの標準シェル。
  • zsh
    Zシェル。Bouneシェル系統の高機能なシェル。
    Mac OS Xでは標準でインストールされていて、Bourneシェル系統のシェルとして使用される。

 最後にシステムから抜ける方法を説明する。これはlogoutと呼ばれていて、コマンドの代わりに"ctr-d"を入力するか、"logout"というコマンドを入力し、復帰キーを押す。

ファイル・システム

 UNIXのファイル・システムは、ディレクトリ(Mac OSとWindowsではフォルダーと呼んでいる)とファイルを階層的に配置したものだ。下の図のように、ルートと呼ばれるディレクトリ"/"から始まり、方向は逆になるが、木の枝のように伸びてゆく。

ディレクトリの系統樹

 UNIXのファイル・システムFFSでは、ディレクトリもファイルだ。hexdumpというコマンドを利用すれば、ファイルとしての中身を覗くことができる。

 UNIXは、一台のマシンを複数のユーザーで同時に利用されることを想定して実装されている。全てのファイルには使用許可情報(パーミッション)を持っていて、コマンドls -lを実行するとファイルの使用許可情報を確認することができる。

$ ls -l
total 8
drwx------   8 guest  staff   264 Feb  1 01:26 Desktop/
drwx------  28 guest  staff   908 Jan 30 19:08 Documents/
drwx------  35 guest  staff  1146 Feb  1 00:51 Library/
drwx------   2 guest  staff   264 Jan 27 08:35 Movies/
drwx------   2 guest  staff   264 Jan 27 08:35 Music/
drwx------   6 guest  staff   264 Jan 27 08:35 Pictures/
drwxr-xr-x   5 guest  staff   264 Jul 21  2001 Public/
-rw-r--r--   1 guest  staff   183 Jun 30  2001 RMAIL
drwxr-xr-x  14 guest  staff   432 Nov 19 22:48 Sites/
drwxr-xr-x  17 guest  staff   534 Jan 27 08:35 bin/

 上のdrwxr-xr-xや-rw-r--r--が使用許可情報で、dで始まる場合はディレクトリ、-で始まる場合は普通のファイルだ。続く3文字は所有者の使用許可情報で、rwxの場合はファイルの所有者は読み出し(read)と書き込み(write)と実行(exxecute)ができるという意味だ。その次の3文字はグループの使用許可情報でr-xの場合は、同じグループのユーザは読み出しと実行はできるが、書き込みができないという意味だ。最後の3文字はその他のユーザの使用許可情報で、r--の場合は読み出ししかできないという意味となる。
 lsコマンドは、使用許可以外の情報を得ることができて、上の例のguestは所有者名で、staffはグループ名だ。

 この使用許可情報は、chmodコマンドを使用すれば変更することができる。例えば、大事な文章が納められたファイルjunk.txtを誤って壊さないようにする場合は、以下のコマンドを実行して書き込み禁止にする。

$ chmod -w junk.txt

 また、他人が自分の日記diary.txtを読めなくする場合は、以下のコマンドを実行する。

$ chmod go-r junk.txt

 反対に、同じグループのメンバーにファイルreport.txtを自由に読んでほしい場合は、以下のコマンドを実行して、同一グループのメンバーなら読み出し可能とする。

$ chmod g+r junk.txt

シェル

 シェルはファイル名を正規表現というルールで扱う。例えば、"*"は任意の文字列という意味で、名前の末尾(サフィックス)が".txt"の全ファイルをcatコマンドを使って中身を表示する場合は、以下のとおりだ。

$ cat *.txt

 UNIXでは、キーボードからの入力も、画面への出力もファイルとして扱っている。ファイルへの入出力は記号"<"と">"、"<<"、">>"と使って切り替えることができる。先のcatコマンドは、ファイルの内容を画面に出力しているが、以下のコマンドを実行すると、画面への出力をファイルjunkへの出力に切り替えられる。

$ cat *.txt > junk

 パイプという機能を利用すれば、入出力を繋げることができる。例えば、"who"というコマンドは、loginしているユーザの一覧を画面に出力する。また、"sort"というコマンドは、入力されたデータを順に並べる。これらのコマンドをパイプを使って入出力を繋げると、loginしているユーザを順に並べて表示できる。

$ who | sort
guest    ttyp1    Feb 17 00:37 
yukio    ttyp2    Feb 17 10:31 

フィルタ

 UNIXのプログラムには、入力したデータを加工して出力するものが多い。これらのプログラムはフィルタと呼ばれていて、先のsortコマンドもフィルタの一つだ。

 このフィルタと、シェルの章で説明した正規表現、入出力の切り替え、パイプを組み合わせれば、強力なことができる。
 例えば、psという実行しているプロセス一覧を表示するコマンドと、grepという検索コマンドを組み合わせて、ユーザguestが実行しているプロセス一覧を得たい場合は、以下のコマンドを実行する。

$ ps -aux | grep guest 

□ 参考文献 □

  • 「UNIXプログラミング環境」Brian W. Kernighan,Rob Pike著 石田晴久・監訳
  • 「OSの基礎と応用」Andrew S. Tanenbaum著 引地信之,引地美恵子・訳
  • 「プロフェッショナルBSD」砂原秀樹,石井秀治,植原啓介,林周志・共著

<< I'M HERE top
Copyright (c) 2001 Headrok Inc.