さて、こんどはディレクトリという考え方について話をしようか。 ディレクトリ はファイルをまとめておくところだ。いわば、ファイルをいろいろ入れておく "フォルダー" みたいなものだ。ディレクトリには名前がついていて、区別がつけられるようになっている。さらに、ディレクトリは、木みたいな構造になって管理されている。つまりディレクトリの中に別のディレクトリがあったりする、ということだ。てっぺんのディレクトリは "ルートディレクトリ" といって / であらわす。この中に、システム内の全ファイルが入っている。
パス名 はファイルの "完全な名前" だと思えばいい。ファイルそのものの名前だけじゃなくて、その場所まで含んでいる。ファイル名と、それに先だってそのファイルが入っているディレクトリ名までついている。そしてそのさらに前に、 そのディレクトリ の入っているディレクトリ名が、という具合。だからふつう、パス名は /home/sasha/talk.txt みたいな感じになる。これは talk.txt というファイルが、 sasha というディレクトリにあって、そのディレクトリが /home のサブディレクトリだ、ということだ。
ごらんのように、ディレクトリ同士とファイル名は、シングルスラッシュ (/) で仕切られている。このせいで、ファイル名そのものには / という文字は使えない。 MS-DOS のユーザなら、似たような話に聞き覚えがあるだろう。でも MS-DOS の世界では、かわりにバックスラッシュが使われる(訳注:日本では文字コードの関係で、円記号になるのがふつう (\))。あるサブディレクトリを含むディレクトリは 親ディレクトリ といわれる。いまの例では、 home というディレクトリが sasha というディレクトリの親になる。
各ユーザはホームディレクトリを持っている。これは、そのユーザが自分のファイルを入れておくための専用ディレクトリだ。ふつう、ユーザのホームディレクトリは /home 以下にあって、そのディレクトリを所有するユーザの名前がついているので、 sasha というユーザのホームディレクトリは /home/sasha になる。
コマンドを入力すると、それはいま作業をしているディレクトリを起点にした 相対 指定だと判断される。作業中のディレクトリというのを、いまの "居場所" だと思ってほしい。ログインするとき、作業ディレクトリはホームディレクトリになる。 sashaというユーザの場合には /home/sasha だ。ファイルに書き込みをしたら、フルのパス名をいちいち指定せずに、いまの作業ディレクトリとの相対位置で指定できる。
たとえば、いまいるディレクトリ(カレントディレクトリ)が /home/sasha で、その中に talk.txt というファイルがあったら、ファイル名だけ指定すればそのファイルが指定できる。たとえば emacs talk.txt のようなコマンドを /home/sasha ディレクトリで実行したら、それは emacs /home/sasha/talk.txt を実行したのと同じことだ。 ( emacs っていうのは、すさまじく強力なテキストファイル用のエディタだ。初心者は、もっと単純なものがいいかもしれない。たとえば gnotepad など。でもパワーユーザにとって emacs は手放せないものだ)。
同じように /home/sasha ディレクトリに papers というサブディレクトリがあって、そのサブディレクトリの中に fieldtheory.txt というファイルがあったら、それを指定するには papers/fieldtheory.txt となる。
ファイル名を指定するとき (たとえば papers/fieldtheory.txt みたいに) 先頭が / 以外の文字なら、自分の作業中のディレクトリとの相対位置でファイルを指定していることになる。これは相対パス名というやつだ。逆にファイル名を / ではじめたら、システムはこれがフルパス名だなと思う。つまり、ルートディレクトリの / から始まってそのファイルに至る全パスを含む指定だな、と思う。フルパス名は 絶対パス名 ともいうのだ。
パス名についての慣行には以下のようなものがある:
~/ :これはユーザのホームディレクトリ
./ :いまの作業中のディレクトリ
../ :いまのディレクトリの親ディレクトリ
たとえば sasha が作業中のディレクトリが /home/sasha/papers なら、 /home/sasha/talk.txt を指定したければ ~/talk.txt としてみたり ../talk.txt とすればいい。