ディレクトリ / パス
ディレクトリ
コンソールを立ち上げ、以下の操作をしてみよう。ただし、前回も注意したように、$はプロンプト、つまりコンピュータがあなたに「コマンドを入れてください」と待っているしるしなので、あなたは$を入力する必要は無い。$のあとのコマンドをキーボードから打ち込んで、Enterキーを押せばよろしい。
$ pwd /home/sXXXXXXX(ユーザー名) $ cd .. $ pwd /home $ cd .. $ pwd / $ cd $ pwd /home/sXXXXXXX(ユーザー名)
ここでやったのは、データやプログラムが保存されている場所を、あちこち旅することである。そのような、「データやプログラムが保存されている場所」を「ディレクトリ」と呼ぶ。この「ディレクトリ」の概念は、Windowsの「フォルダ」の概念とほぼおなじである。データやプログラムは「ファイル」という単位で必ずどこかのディレクトリに格納される。
ディレクトリは階層構造をしている。つまり、ディレクトリの中にディレクトリがあり、さらにその中にもディレクトリがあり、・・・というふうになっている。これをディレクトリ・ツリーと呼ぶ。
以下に、ディレクトリ・ツリーの様子を、模式的に示す。たとえば、/home/s1234567というディレクトリは、/というディレクトリの中のhomeというディレクトリの中のs1234567というディレクトリである:
/-----bin |---usr |---home--s1234565 | |----s1234566 | |----s1234567 | |----
UNIXのコンソールの中では、ユーザーは常にディレクトリ・ツリーの中のどこかのディレクトリに居ることになっている。それをカレントディレクトリという。
UNIXのコマンドは、特に何も指定しない限り、カレントディレクトリの内容を対象として働くようになっている。なので、ユーザーは、様々な仕事をするときには、まず最初に、その仕事に必要なデータやプログラムのあるところにまず行く(つまりそこをカレントディレクトリにする)。その操作をするコマンドがcd (change directoryの略)である。また、現在のカレントディレクトリがどこなのかを表示するコマンドがpwd (present working directoryの略)である。初心者はディレクトリ・ツリーの中で迷子になりがちだが、そういうときにpwdコマンドは便利である。
コンソールを立ち上げた直後は、ほとんどの場合、自動的にカレントディレクトリは/home/s1234567のように、/home/ユーザー名というようなディレクトリになっている。そのことが、上の例の最初のコマンドで理解できるだろう。このようなディレクトリは、ユーザーが自由にデータを置いたり削除したりすることができるディレクトリであり、ホームディレクトリと呼ばれる。ホームディレクトリには、ユーザーの利用環境を設定するための情報なども保管される。
注意! 「/home」は、homeという名前のディレクトリではあるが、いわゆる「ホームディレクトリ」ではない。 ホームディレクトリは、「/home/s1234567」のように、/homeの下にあって、ユーザー名(ログイン名)を名前に持つようなディレクトリである。
cd ..というコマンドは、ひとつ上流の階層のディレクトリに行く、というコマンドである。".."は、カレントディレクトリから見てひとつ上流の階層のディレクトリを示す。実際、そのあとにpwdコマンドでカレントディレクトリを表示すると、"/home"のように、もとの"/home/s1234567"よりもひとつ上流のディレクトリに移っていることがわかる。
さらに"cd .."を行うと、さらにひとつ上流のディレクトリに移る。このディレクトリは"/"と表示されているが、これより上流のディレクトリは無い。このディレクトリ、すなわち全てのディレクトリの最上流のディレクトリを「ルートディレクトリ」という。全てのディレクトリは、このルートディレクトリから次第に枝わかれして存在する。
ルートディレクトリは"/"であらわす。"/home/s1234567"のようにディレクトリの階層構造を表現するとき、"/"が、左端とまんなか付近というふうに2回あらわれるが、左端の"/"はルートディレクトリを意味し、まんなかの"/"は/homeとgisという2つのディレクトリの上流・下流関係をあらわすための記号、つまり、ディレクトリの境界をあらわす記号である。このあたりの事情については、後述の「パス」の項でも言及する。
コマンド"cd"を、なにも指定せずに走らせると、ホームディレクトリに戻って来る。実際、上の例の最後の2つのコマンドでそれが理解できるだろう。
ルートディレクトリは、そのシステム(計算機)にはひとつしか無い。一方、ホームディレクトリは、それぞれのユーザーごとに用意されているので、その計算機を使うユーザーの数だけ存在する(ただし、1人のユーザーにとっては、ホームディレクトリは1つだけである)。カレントディレクトリは、ユーザーが適宜、cdコマンドで選ぶものである。 /や..も含めて、以下のようなの特別なディレクトリの表現方法がある:
. カレントディレクトリ .. ひとつ上の階層のディレクトリ / ルートディレクトリ ~ ホームディレクトリ
- 課題: 以下のコマンドを打ち込み、結果を解釈せよ:
$ cd (カレントディレクトリをホームディレクトリにあわせる) $ pwd (カレントディレクトリがどこかを表示) $ cd .. (ひとつ上のディレクトリに行く) $ pwd $ cd / (ルートディレクトリに行く) $ pwd $ cd . (カレントディレクトリに行く。つまり、どこにも行かない) $ pwd $ cd ~ (ホームディレクトリに行く) $ pwd
ここで気づいたひとも多いと思うが、
$ cd
と、
$ cd ~
は、どちらも「ホームディレクトリに行く」という同じ機能を実現するコマンドである。このように、UNIXのCUIは、「同じことをするにも、いくつもの違ったやりかたがある」という、冗長性がある。このような冗長性は、一見、無駄のように思えるが、システムの整合性や柔軟性を確保してくれる、大切な特徴である。
lsコマンド ... ディレクトリの中身の表示
ディレクトリの中には、ディレクトリやファイルが入っている。ファイルとは、文書とか、プレゼン資料とか、各種の設定情報など、それぞれ情報のひとまとまりの単位である(このあたりもWindowsなどと同様である)。ディレクトリの内容、つまりそのディレクトリの中にどのようなディレクトリやファイルが入っているかを表示するコマンドが、ls (listの略)である。以下、lsの機能を、体験的に学んでいこう。
- 課題:以下のコマンドを打ち込みながら体で覚えよ:
$ cd (ホームディレクトリに行く) $ ls (カレントディレクトリの内容を表示。) $ ls -l (lsよりもっと詳しい情報を表示。-lの前に、スペースをひとつ入れること。) $ ls -la (ls -laよりもっと詳しい情報を表示。) $ ls / (ルートディレクトリの内容を表示。)
以下は、ls -laの実行結果の例(一部分)である:
$ ls -la 計 1276896 drwx------ 40 gis gis 4096 2005-08-08 08:56 ./ drwxr-xr-x 419 root root 8192 2005-08-08 09:09 ../ -rw------- 1 gis gis 560 2005-08-08 08:56 .Xauthority -rw------- 1 gis gis 19 2004-09-14 16:40 .Xmodmap drwx------ 2 gis gis 4096 2004-09-14 16:40 .acrobat/ drwx------ 3 gis gis 4096 2005-08-06 15:15 .adobe/ -rw------- 1 gis gis 6672 2005-08-06 18:29 .bash_history
これを解説すると、
1列目(drwx--x--xなど):パーミッション(後述)。先頭のdの有無は、ディレクトリかどうかのマーク。 2列目(40など): ファイル数 3列目(gisやrootなど): 所有者のユーザー名 4列目(gisやrootなど): 所有者のグループ名 5列目(4096など): ファイルサイズ(バイト数) 6-8列目(2005-08-08 08:56 など): 最終更新日時
mkdirコマンドとrmdirコマンド ... ディレクトリの作成と消去
- 課題: 以下のコマンドを打ち込みながら体で覚えよ:
$ mkdir test (testというディレクトリを作る。) $ ls -l (カレントディレクトリの内容を表示。testというディレクトリができているか?) $ rmdir test (testというディレクトリを削除。) $ ls -l
パス (path)
個々のディレクトリやファイルが、ディレクトリ・ツリーの中のどの位置にあるのか、つまりディレクトリやファイルの「住所」のような情報のことをパス(path)と言う。たとえば、さきほど作ったtestというディレクトリのパスは、このように表現できる:
/home/sXXXXXXX(ユーザー名)/test
これは、ルートディレクトリ(/)の中のhomeというディレクトリの中のgisというディレクトリの中のtestというディレクトリ、という意味。ちょうど、「茨城県つくば市天王台筑波大学」というのが、茨城県の中のつくば市の中の天王台の中にある筑波大学、という意味であるのと同じようなものである。このように、ルートディレクトリからたどってパスを表現するやりかたのことを「絶対パス」と呼ぶ。
ディレクトリの階層の区切りは、スラッシュ(/)で表現する(ちなみにWindowsでは、これが日本円やバックスラッシュ記号(\)になる)。すなわち、スラッシュ記号(/)には、「ルートディレクトリ」という意味と、「ディレクトリどうしの区切り」という意味の、2通りの意味がある。
絶対パスと対比的な言葉(対置概念)として「相対パス」というものがある。カレントディレクトリを起点に、どのようにディレクトリをたどっていけばそのファイル(又はディレクトリ)にたどり着くかというやりかたでパスを表現することを「相対パス」と呼ぶ。例えば皆さんが現在、/homeというディレクトリをカレントディレクトリにしていれば、
./sXXXXXXX(ユーザー名)/test
が、上記のディレクトリの相対パスになる。ここで"."はカレントディレクトリを意味する。相対パスでの表記は、例えば、私がつくば市にいる友人に対して私の家を説明するとき、「吾妻1丁目の公務員宿舎の・・・」と言うようなものである。相手がつくば市内にいるならば、わざわざ「茨城県つくば市」を言う必要はない。
lsなどのコマンドは、デフォルトではカレントディレクトリを対象とするが、パスを指定すれば、カレントディレクトリ以外のディレクトリを対象にすることもできる。
- 課題: 以下のコマンドを順に試し、結果を解釈せよ:
$ cd ~ $ pwd $ ls $ ls / $ mkdir test $ cd test $ pwd $ cd $ pwd $ cd /home/sXXXXXXX(ユーザー名)/test $ pwd $ cd
ホームディレクトリ(つまり/home/sXXXXXXX(ユーザー名))から/home/sXXXXXXX(ユーザー名)/testというディレクトリへ行くのに、相対パス指定(cd test)でも絶対パス指定(cd /home/sXXXXXXX(ユーザー名)/test)でもOKであるということがわかるだろう。
まとめ
- ls ディレクトリの内容列挙 (list)
- cd 別のディレクトリに行く (change directory)
- pwd カレントディレクトリを表示 (present working directory)
- mkdir ディレクトリの作成 (make directory)
- rmdir ディレクトリの削除 (remove directory)
<Unix/Linux入門に戻る>
Keyword(s):
References:[Unix/Linux入門] [2018_実用解析]