| カレントディレクトリ | 絶対パス | 相対パス | パス記述で利用する文字 | ディレクトリやパスに関するその他トピック |
UNIX / Linux のターミナル (kterm等) でコマンドを実行する場合には、ディレクトリツリー内のいずれかのディレクトリにユーザが存在して作業を行うことになっています。その作業を行っている現在位置のディレクトリを「カレントディレクトリ」(current directory) と言います。別の呼び方として、「ワーキングディレクトリ」(working directory) や「カレントワーキングディレクトリ」(current working directory) などと呼んだりもします。
pwd コマンドは、カレントディレクトリを表示するためのコマンドです (print working directory)。新しく kterm を起動して、今一度 pwd コマンドを実行して下さい。結果の解釈は後で説明することとして、ここではこの結果がカレントディレクトリを表していると思って下さい。
cc2000(94)% pwd
/NF/home/g050/xxxxxxx
cc2000(95)%
さて、UNIX / Linux では、一般ユーザがログインした際のカレントディレクトリは、ホームディレクトリとなっています。ですので、kterm を上のメニューから新しく立ち上げると、どのターミナルも基本的にホームディレクトリがカレントディレクトリとなっています。試しに幾つも kterm を立ち上げて、全てのターミナルで pwd を実行してみればわかるでしょう。但し、カレントディレクトリは、ターミナル毎に存在するものなので、あるターミナル上で(cdコマンドを使用して)別のディレクトリへ移動し、カレントディレクトリが変更となった場合でも、他のターミナルではその影響を受けていないことに注意が必要です。たくさんターミナルを立ち上げた際にはカレントディレクトリがどこなのか注意しましょう。
UNIX / Linux では、ディレクトリのツリー構造の中でファイルが整理そして管理されていることは既に説明しています。そして自分のホームディレクトリを確認する際に、pwd コマンドを実行しました。ここではその結果について考えてみましょう。
cc2000(94)% pwd
/NF/home/g050/xxxxxxx
cc2000(95)%
この表示結果である /NF/home/g050/xxxxxxx ですが、一番左の / だけ特別にルートディレクトリを表します。その後は NF, home, g050, xxxxxxx というディレクトリがツリー状に繋がっているという意味を表しており、その区切り文字として / を用いています。この関係を UNIX / Linux のディレクトリツリーと対応させて図で記述すると次のようになります。
自分のホームディレクトリをディレクトリのツリーで表した場合の図
/ の意味は、先頭の / だけルートディレクトリ、後はディレクトリ接続の区切り文字を表しています。/ から xxxxxxx までの途中にある NF や home も各々、/NF, /NF/home という具合に記述できます。
これはルートディレクトリ / からホームディレクトリ xxxxxxx までのディレクトリツリーの経路 (パス : path) を表しています。このルートディレクトリから特定のディレクトリまでの全ての経路を表す表記方法を「絶対パス」(absolute path) もしくは「フルパス」(full path) と呼びます。
ここまでのパスの例ではディレクトリに対して説明してきましたが、ディレクトリはファイルと同様に扱われることから当然、ファイルも絶対パスで表現できます。例えば、ユーザ xxxxxxx のホームディレクトリ下にある sample というファイルであれば、絶対パスは次の通りです。
/NF/home/g050/xxxxxxx/sample
では、ここで ls コマンドを実行してファイルリストを表示してみて下さい。
cc2000(100)% ls
Desktop Maildir Wnn6 public_html sample win_home
cc2000(101)%
ここにある Maildir や Wnn6 等はディレクトリで、sample は普通のファイルですから、それらをルートディレクトリからの関係として図で示し、絶対パス表記を行うと次のようになります。
ホームディレクトリ下のディレクトリとファイルに対するツリー構造(○はファイル)
ここでカレントディレクトリを現在いるホームディレクトリから Wnn6 ディレクトリへ移動してみましょう。ディレクトリの移動には cd コマンドを利用します (change directory)。cd コマンドは、cd という記述の後に空白を空けてその次に書くディレクトリへ移動するコマンドです。ここでは異動先の指定に絶対パスを指定してみることにして、cd /NF/home/g050/xxxxxxx/Wnn6 と入力してコマンドを実行して下さい(xxxxxxx には自分のIDを利用します)。これでディレクトリの移動ができているはずですから、今一度 pwd コマンドでカレントディレクトリの確認をします。
cc2000(102)% cd /NF/home/g050/xxxxxxx/Wnn6 cc2000(103)% pwd /NF/home/g050/xxxxxxx/Wnn6 cc2000(104)%
pwd の結果が /NF/home/g050/xxxxxxx/Wnn6 と表示されていればディレクトリの移動ができていることになります。時間があれば、/ や /NF, /NF/home 等にも cd コマンドで移動して、pwd コマンドを実行してみましょう。
さて、上記の例ではカレントディレクトリの一つ下にあるディレクトリへ移動したのですが、すぐ下に移動するだけでルートディレクトリからの全てのパスを記述するのは面倒とも言えます。そこで、いつも絶対パスで表記しなくても済むように、カレントディレクトリを中心に考える相対パスの概念について次に説明します。
絶対パスはディレクトリツリー内にあるファイルやディレクトリ全てを表現できますが、カレントディレクトリの下にある sample.txt を表現する度にいちいち絶対パスで表記していては非常に面倒です。そこで、カレントディレクトリを中心として相対的なファイルやディレクトリの位置を指定してそれらを表現できるよう、「相対パス」(relative path) という表記方法が利用されます。
例えば、カレントディレクトリが自分のホームディレクトリであり、その下にある sample というファイルの名前を記述する場合を考えます。絶対パスであれば /NF/home/g050/xxxxxxx/sample と書かなければいけないところ、相対パスでは単にファイル名である sample と記述するだけで済みます。また、相対パス表記では、カレントディレクトリを .(ピリオド)で記述します。すると、sample は ./sample と記述することもできます。絶対パスと同じくディレクトリの区切り文字が / ですので、./sample はカレントディレクトリ(.) の下 (/) のsample という意味になるわけです。ホームの下にあるディレクトリ Wnn6 であれば、そのまま Wnn6 もしくは ./Wnn6 と書けばいいわけだけです。さらに、Wnn6 の下にあるファイル bunsetsu は Wnn6/bunsetsu または ./Wnn6/bunsetsu というように、必要な部分だけ記述します。
次に、カレントディレクトリよりも上にあるディレクトリへ相対パスでアクセスするための表記について説明します。一つ上のディレクトリ(「親ディレクトリ」とも言います)は、相対パス表記では、.. (ピリオド2つ)で表します。Wnn6ディレクトリがカレントディレクトリの場合、親ディレクトリである xxxxxxx へ移動するには、cd .. だけでいいわけです。また、Wnn6 からその親ディレクトリ xxxxxxx の下の Maildir を表現するには、../Maildir という記述を行います。
では、ここまでの相対パスについての例を次の図で示してみましょう。この図では、ホームディレクトリの下の Wnn6 がカレントディレクトリとしてその周辺にあるディレクトリを相対パス(背景がグレーの文字)で表しています。
相対パスの表記例(Wnn6をカレントディレクトリとした場合の例)
では、Wnn6 から Maildir へ移動してみましょう。cd ../Maildir を実行して、Wnn6 から Maildir へ移動できたか、その結果を pwd で確認します。
cc2000(106)% pwd
/NF/home/g050/xxxxxxx/Wnn6
cc2000(107)% cd ../Maildir
cc2000(108)% pwd
/NF/home/g050/xxxxxxx/Maildir
cc2000(109)%
このように、カレントディレクトリを中心に、ファイルやディレクトリをアクセスする際には相対パスを指定するほうが便利なことが多々あります。但し、ファイルやディレクトリの指定方法は、時と場合によってどちらのほうが有効かは変わります。両方の表現方法が利用できるように書き方をしっかりと憶えておきましょう。
pwd コマンドで得られるカレントディレクトリの表記(絶対パス)と、そのディレクトリからの相対パスの表記を加えたら、常に絶対パスとなります。
例:カレントディレクトリが /NF/home/g050/xxxxxxx/Maildir の場合
/NF/home/g050/xxxxxxxx/Maildir (pwdの結果) + ../Wnn6/bunsetsu (相対パス)
= /NF/home/g050/xxxxxxx/Maildir/../Wnn6/bunsetsu (絶対パス)
= /NF/home/g050/xxxxxxx/Wnn6/bunsetsu (絶対パス)
パス指定で利用される記号についてここでまとめておきます。
記号 | 意味 |
---|---|
/ | / 単体で記述した場合は、ルートディレクトリ(トップディレクトリ)を意味します。 ディレクトリのパスを記述する際に、ディレクトリとディレクトリ(もしくはファイル)の間に置かれた / は単なるディレクトリの区切り文字として見なします。例えば、yasuda/Desktop は yasuda の下にある Desktop という解釈になります。 |
. | カレントディレクトリを意味します 例えば ./sample と書けば、カレントディレクトリにある sample というファイルを意味します。 つまり単に sample と書いたのと同義です。 (しかしそう書いたのでは駄目な場合もあるのです。) |
.. | 一つ上のディレクトリを意味します。 例えば ../sample と書けば、カレントディレクトリの一つ上のディレクトリにある sample というファイルを意味します。 例えば ../../sample と書けば、カレントディレクトリの二つ上のディレクトリにある sample というファイルを意味します。 |
また、別で説明するシェルにてコマンドの引数としてファイルを記述するとき、パスの先頭であれば以下のような書き方もできます。
記号 | 意味 |
---|---|
~ | 自分のホームディレクトリを意味します |
~username | ユーザID username のホームディレクトリを意味します |
Windows 系 OS のディレクトリ記述方法は、Microsoft社が Windows 以前から発売していた MS-DOS のディレクトリ表記を引き継いでいます。UNIX / Linux でのディレクトリ区切り文字 / (スラッシュ) の代わりに \ (バックスラッシュ) が用いられます。ルートディレクトリは \ となり、相対パスで親ディレクトリを表すのは .. で UNIX / Linux と同じです(Windows上ではディレクトリとは言わずフォルダと言います)。但し、このルートディレクトリの前には、補助記憶装置(ハードディスク等)のパーティションやDVD装置、USBメモリ等を「ドライブ」と称してアルファベットで区別し、その個々にディレクトリツリーが構成されます。ドライブの区別はアルファベット1文字に : (コロン) を付けたものをドライブ記号として用い、その後ろにディレクトリのパスを記述します。結果的に、絶対パス表記はドライブ名も含めた形で記述することになります。
例:Cドライブにある Windows ディレクトリ中の System32 ディレクトリ
C:\Windows\System32 (これはドライブ名 (C:) も含めた絶対パス表記)
Macintosh上の最近のOSである Mac OS X は、実は UNIX (BSD という種類) です。ディレクトリツリーの構成は他の UNIX や Linux と違う面もありますが、ルートディレクトリや区切り文字、相対パスの文字など、パスの表記方法は UNIX / Linux と全く同じです。複数のパーティションやドライブが存在する場合は、画面上にはドライブがアイコンとしてデスクトップに表示されますが、ターミナルで見た時にはディレクトリツリーの特定のディレクトリ内に各ドライブが存在していることになります。詳しくは Mac OS X の解説書などを見て下さい。
Mac OS X よりも古い Macintosh 上の OS (Mac OS 9 や Mac OS 8 等) は、UNIX ではありません。パスの記述には、UNIX / Linux の / (スラッシュ) に相当するものが : (コロン) で記述されます。ルートディレクトリは : となります。パーティションが複数ある場合は、Windows系 OSと同じような形で、パーティション毎にディスクドライブの名前(ユーザが名前を設定可能)を書いて、その後にディレクトリツリー内のパスを記述します。但し、Windows系と違うのは、ドライブ名がアルファベット1文字ではなく、普通に文字列として記述できる点です。
例:ユーザ hirai のデスクトップディレクトリ
MacintoshHDD:Users:hirai:Desktop: