2001/4/26
コンピュータの用途のうち、代表的なものに 情報を貯蔵する というのがある。 実世界における情報を貯蔵する道具には、 ノートや黒板やカードなどがある。しかし コンピュータを使った情報処理には、以下のような利点が 期待される:
このような要求にこたえるためにつくられた 仕組みを 「データベース (database)」 と呼ぶ。 データベースは大量の情報を素早く簡単に検索でき、 しかもデータの追加や変更も簡単に行えるよう設計されている。 そのためには、ただやみくもに情報を書き並べるだけではだめである。 たとえば実世界のデータベースは図書館の貸し出しカードなどだが、 これは検索しやすく簡単に変更できるように さまざまな見出しや置き方が工夫されている。
コンピュータ上にデータベースをつくる場合もこれと同様に、 ただやみくもに記憶装置 (メモリやディスク) に 情報を書き並べるだけではだめである。 検索しやすく、簡単に変更できるようにするためには 情報の置き方にある一定の規則をもうけて工夫しなければならない。
「ファイルシステム (filesystem)」とは、 データベースの一種である。 「コンピュータのディスク上に、ある一定のやり方で置かれた情報」 といってもいい。ファイルシステムでは、情報を 「ファイル (file)」と呼ばれる最小単位に分けて整理する。 ファイルシステムはデータベースであるから、当然 これらのファイルは効率的に検索でき、簡単に追加や削除、変更が行え、 しかも大量のファイルが高速に扱えなければならない。
現在ほとんどの OS は、何らかの形のファイルシステムを 扱えるようにできている。UNIX で使われている方式は中でも いちばんポピュラーなもので、「ツリー (tree) 状ファイルシステム」 と呼ばれている (実際には、さらに細かい方式に分けられている)。 ツリー状ファイルシステムでは、 ファイルの中にファイルを入れることができる。 ふつう、ファイルには中にどんな情報を入れてもよい。 しかし「他のファイル」を中に入れることのできるファイルは特別に 「ディレクトリ (directory)」 と呼ばれる。
ディレクトリは
(注: 「ファイルシステムはデータベースである」という言い方には 語弊があると感じる人もいるかもしれない。 トランザクションや障害復旧ができなければデータベースではないという 人もいるが、ここではもっと広義の用語として「データベース」を 使っている。逆に、情報が格納されていればなんでもそれはデータベースだ、 という人もいるかもしれないが、ここではある一定のやり方で 格納された情報を「データベース」と呼ぶことにしている。 したがって、たとえばアーティスト順に CD が並べられた レンタルショップも、その意味では「データベース」なのである)
問: 木構造を数学的に定義せよ。
UNIXのファイルシステムには、以下のものが入っている。
UNIXでは、ファイルシステムを巨大なひとつの木として扱う。 木の節点はディレクトリ (フォルダ) であり、葉はファイルになっている。
ファイルシステムは実際の物理的なディスクと結びつけられている。 ファイルシステムのある部分 (= 部分木) は、あるディスクに格納されている (図1)。
図1・部分木とディスクの対応
このディスクはそのコンピュータ上になくてもかまわない。実際に 田中・徳永研の環境では、ディスクはいくつかの計算機上に分散している。 ネットワークごしに他の計算機にあるディスクにアクセスする仕組みを ファイル共有という。 UNIX ではこれは NFS (Network File System) と呼ばれている (図2)。
図2・田中・徳永研の NFS
問: 自分のホームディレクトリはどのマシンにあるか?
問: 研究室の www ディレクトリはどのマシンにあるか?
図3・snow。研究室の大黒柱。こいつがダウンしたら何にもできない。
ファイルシステム中のある地点 (節点あるいは葉) は 木の根っこ (ルートディレクトリ) から たどったディレクトリ名の列で 表せる。UNIX では、これをスラッシュ (/) を使って区切っている。
「/」によって区切られたファイルシステム中の場所を 「パス名 (pathname)」とよぶ。
問: 自分のホームディレクトリのパス名は? (「~」はパス名ではない)
問: パス名を使えば研究室のすべての計算機のすべてのファイルの位置を表すことができるか? その理由は。
UNIX のパス名にはお約束がある。あるパス名のディレクトリには かならず決まったものが入れられている。
問: ふだん使っている ls や emacs (mule), netscape といった プログラムはどこにあるか。それは、使っている計算機が変われば違うだろうか。
木の深さに制限はないので、パス名は非常に長くなる場合がある。 たとえば以下の文字列はひとつのパス名である。
/export/src/app/postgresql/postgresql-7.0.2/src/test/regress/tmp_check/data/base/regression/pg_attribute_relid_attnam_index
そのため、UNIX ではこの表記を簡単にするためにカレントディレクトリ (current directory) という考えが用意されている。カレントディレクトリとは、おおざっぱにいえば 「いま自分が注目しているディレクトリ」のことである。これはシェルの cd (change directory) コマンドで変更できる。
ディレクトリ名のなかでも「.」と「..」は特別な名前で、
カレントディレクトリにあるファイルやディレクトリのパス名は 先頭に「./」をつけることによって表せる。しかし、これはふつう省略できる。
このようにカレントディレクトリからみたパス名を「相対パス名」という。 これに対してルートディレクトリから全部指定したパス名を「絶対パス名」という。
相対パス名を使うと、次のようなことができる。
相対パス名の表現能力は絶対パス名と同じである。つまり、 ファイルシステム中のどんな場所も相対パス名によって表せる。
../../../../../../../../../export/export/src/app/postgresql/
UNIX のファイル(あるいはディレクトリ)には所有者がいる。 また、すべてのファイルやディレクトリにはアクセス権限 (モード mode とかパーミッション permission などと呼ぶ) がついている。 あるユーザがそのファイルに対して何ができるかは、そのファイルの パーミッションを見ればわかる。
% ls -l total 48 drwxr-xr-x 5 euske 8192 Apr 15 18:23 LOCAL/ drwx------ 15 euske 8192 Apr 13 18:41 Mail/ drwxr-xr-x 8 euske 8192 Feb 13 22:27 ar/ drwxr-xr-x 2 euske 8192 Apr 20 15:34 bin/ lrwxrwxrwx 1 euske 34 Jan 12 19:28 pub -> /export/www/home/euske/public_html/ drwxr-xr-x 2 euske 8192 Apr 22 14:43 tmp/ drwxr-xr-x 12 euske 8192 Apr 20 02:14 work/
問: あるディレクトリを書き込み可能にしておくと、 その中のファイルが書き込み不可能になっていても意味がない。なぜか。
問: 実行できるコマンドはすべて実行可能になっていることを確認せよ。
問: パーミッションが 711 になっているディレクトリはどういう意味があるか?
では、ファイルの所有者に固有の特権とは何か? UNIX では、それはファイルのパーミッションを変えること (chmod) だけである。
オプションは複数組みあわせ可能。オプションの大文字小文字は区別される。
問: rm -rf / を実行したらどうなるか? 参考リンク
実は UNIX のファイルシステムには、ファイルとディレクトリ以外にも 実体がある。シンボリックリンク (symbolic link) は、木構造の節点と節点をつなぎ、 ある節点から別のファイルやディレクトリにアクセスすることができる。
% ln -s 参照先ファイル 参照元ファイル(-s はかならず必要)
ほかにも、次のようなコマンドを覚えておくと便利。
問: 実行したらどうなる?