3.3 ファイルパス

ファイルのパス名

これまでの説明で,ディレクトリとツリー構造の概念が理解できたと思います.次に個々のファイルやディレクトリを指定する際に必要になるファイルパスという概念と,具体的な記述の方法についてを学習しましょう.このファイルパスという概念は,CNSにおけるファイル操作だけでなく,Webサイトの制作過程にも必要になる重要な概念です.ここでは皆さんが現在使用しているCNSの環境を例にとって解説していきます.

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

例えば先週emacsで皆さんは全員,selfintroductionという名前のファイルを作りました.ということは,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 でファイル名を入力するときは,ミニバッファに現在のカレントディレクトリ (例えば,ログインした直後はホームディレクトリ ' ‾/ ') がすでに入力された状態になるので, 続けて相対パス名を入力すると,全体として絶対パス名になります.あるいは, カレントディレクトリの全部または一部を消去して,任意の絶対パス名を入力することもできます.

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