3.3 ディレクトリ構造

ディレクトリの中にはいくつかのディレクトリを入れることができ,その中には,さらにまたディレクトリを入れることができます.外側の大きい方のディレクトリを親ディレクトリ,中に入っている方を子ディレクトリ,またはサブディレクトリと呼びます.これを絵に描くとき,例えば directoryA の中に directoryB とfile3 があるとすると,directoryA の下に directoryB と file3 を書いて,線で結びます.さらにdirectoryB の中に入っているファイルも同じようにして書いていきます.すると,木を逆さにしたような形になるので,これをツリー構造(tree structure)と呼びます.根にあたるところ(図では一番上)に一番大きなディレクトリがあり,そこから枝別れするところにディレクトリがあり,そして葉にあたるところには通常ファイルがあります.

ファイルのパス名

CNSでは,すべてのファイルは巨大なツリー構造のどこかに位置しており,ディレクトリをたどっていくことによってアクセスすることができます.この時,そのファイルの位置を表すものを,そのファイルのパス名(path name)と呼びます.

例えば先週emacsで皆さんは全員,selfintoroductionという名前のファイルを作りました.ということは,CNS全体に1年生の人数分のselfintoroductionという同じ名前のファイルが存在していることになります.これではどれが誰の自己紹介なのだか分かりませんね.しかし,ファイルにパス名が付いていることにより,たとえ同じ名前のファイルでも,位置する場所が違えば区別することができるのです.

パス名には,絶対パス名(absolute path name)相対パス名(relative path name)があります.

普通のパソコンでは,ファイルはそのパソコンのハードディスクに保存されるため,他のパソコンから直接使うことはできません.しかし,CNS では,ホームディレクトリ内のファイルはメディアセンター内にあるファイルサーバというコンピュータに保存され,ネットワークを通 して読み書きするため,どのコンピュータにログインしても同じファイルを使うことができます.

絶対パス

絶対パスは,ツリー構造の一番上から現在自分がいるディレクトリまでの道筋を全てたどることで,現在位置を表します.

現在自分がいるディレクトリの絶対パスを知るためには pwd というコマンドを使います.

% pwd
/a/fs0501a/t02000tf
	

パス名は,ディレクトリ名を `` / "で区切って表わします.
ツリー構造の一番上にあるディレクトリをルートディレクトリ(root directory)といいます.ルートディレクトリには名前がなく,常に絶対パス名 '/' で示されます.上の例の場合,現在いる位置は,「ルートディレクトリの下の,aというディレクトリの下の,fs0501aというディレクトリの下のt02000tfというディレクトリの下」ということになります.

ログイン名の前に現れるfs0501aとかfs0601aというディレクトリはファイルサーバーの名前で人によって異なります.しかし,誰のホームディレクトリがどのファイルサーバにあるかを覚えるのは大変なので,/a/fs0501a/ や /a/fs0601aという部分をまとめて,``/home" と表わします.

ファイルサーバは何台かのコンピュータで分担してホームディレクトリを保存しているので,本当のホームディレクトリの絶対パス名は /a/fs0501a/t02999xx のようにファイルサーバの番号とログイン名を組み合わせたものになっています.

相対パス

今いるディレクトリからすぐ隣や,一つ上のディレクトリに行きたいときに,いちいちルートディレクトリからの長ったらしい絶対パスを使うのは不便です.そのため,現在作業しているディレクトリからの相対的な位置関係をパスとして表すこともあり,これを相対パスと言います.

相対パス名はディレクトリをたどる出発点が,ルートディレクトリではなく,現在作業しているディレクトリになります.これをカレントディレクトリ(current directory)またはワーキングディレクトリ(working directory)と呼びます.相対パス名はカレントディレクトリから見た,相対的な位置を表わします.

カレントディレクトリからツリー構造を下にたどっていくときは,ディレクトリ名を '/' で区切って並べます.例えば,上の図で /home/t02000tf がカレントディレクトリであった時, report1 の相対パス名は

ipl/report1

となります.また,/home/t02000tf/ipl がカレントディレクトリの時は

report1

が相対パスとなります.あるファイルを使って作業したいときは,そのファイルが入っているディレクトリをカレントディレクトリにしておくと,相対パスによる指定がファイル名だけになるので,短くて便利です.

ツリー構造を上に向かってたどるときは,ディレクトリ名ではなく, '..' という記号を使います.例えば,上の図で /home/t02000tf/ipl がカレントディレクトリの時,/home/t02000tf の相対パス名は

..

で,/home の相対パス名は

../..

になります.また,/home/t02000tf/test2 の相対パス名は

../test2

になります.

カレントディレクトリ自身の相対パス名は ' . ' で表します.

絶対パスと相対パスは,先頭が,' / ' かどうかで判断されます. また,先頭にある ' ~ ' は,ホームディレクトリを表すことがあります.' ~ ' だけなら自分のホームディレクトリ,' ~ユーザ名 ' ならそのユーザのホームディレクトリを表します.例えば, ~/selfintoroduction は自分の自己紹介文のファイル, ~t02000tf/selfintoroduction は t02000tf というユーザが作った自己紹介文のファイルを 表します.

注意
' ~ ' がホームディレクトリを表すのは省略形なので,ソフトによっては使えない場合もあります.そのような時は絶対パス名 ' /home/ユーザ名 ' を使います.

先週皆さんがemacsでファイルを呼び出したりするとき,ミニバッファで以下のように表示されていたのを覚えているでしょうか.

Find file: ~/

これはただ単に,ファイル名を聞いているのではなく,ファイルのパスを聞いていることになります.emacs でファイル名を入力するときは,ミニバッファに現在のカレントディレクトリ (例えば,ログインした直後はホームディレクトリ ' ~/ ') がすでに入力された状態になるので, 続けて相対パス名を入力すると,全体として絶対パス名になります.あるいは, カレントディレクトリの全部または一部を消去して,任意の絶対パス名を入力することもできます.

このようにファイルを操作するときは必ずパスと言う概念がついてきます.これからファイルの作成や編集をするときは,ファイルの名前だけでなく,その位置も意識しながら作業するようにしましょう.