第3回 ファイルの保管


3.1 今週の目標

学習内容

  1. Unixを利用していく上で基本となり,またWebサイト制作の過程でも必要になるディレクトリとツリー構造の概念を学ぶ
  2. ディレクトリとツリー構造の概念を踏まえた上で,ファイルパスの指定方法を学ぶ
  3. ディレクトリやファイルの操作に関する具体的なコマンドを知る
  4. ディレクトリやファイルに対するアクセス権の管理の必要性を理解し,保護モード(アクセス権モード)の設定方法を知る

学習の目的

今週はディレクトリとツリー構造という概念を学びます.これらの概念は主にファイルの保管の仕方に関係します.これらの概念を理解することはUnix環境で作業を行うための前提条件です.Webサイトの制作という文脈では,特にサイトの構造を設計する段階でこれらの概念に対する理解が試されます.

次にディレクトリとツリー構造の概念を利用して,ファイルの保管場所を指定する為のファイルパスという概念を学びます.

コマンドによるファイルやディレクトリの操作を行うことで,ディレクトリとツリー構造の概念の定着を目指します.

最後にディレクトリやファイルに対してのアクセス権という概念を学び,それらを管理する際に必要となる保護モード(アクセス権モード)の設定方法を学びます.

キーワード

ディレクトリ(directory),ホームディレクトリ (home directory),ツリー構造(tree structure),パス名(path name),絶対パス名(absolute path name),相対パス名(relative path name),ルートディレクトリ(root directory),カレントディレクトリ(current directory),ワーキングディレクトリ(working directory),オプション(option),引数(argument),アクセス権(access right),保護モード(アクセス権モード)

3.2 ディレクトリとツリー構造

ファイル一覧の表示

先週はemacsによるファイルの作成,保存等について学習しました.先週の実習では扱ったファイルの数が少なかったため,ファイルの区別をする際に困ることはありませんでした.しかし,扱うファイルの数が増えてくるとそうはいきません.このようなときはどうしたらいいでしょうか.

emacsではこのようなときのために,保管されているファイルの一覧を表示することが出来ます.

  1. C-x d と入力するか,マウスを使って[Files]→[Open Directory ...] と選択します.
  2. ミニバッファに Dired (directory): ‾/ と表示されますのでそのままEnterキーを押します.
  3. そうすると次のようになります.
emacsファイル一覧表示

種別
通常のファイルは '-',ディレクトリは 'd' と表わされます.
アクセス権
そのファイルを誰が読み書きできるかということです.次週詳しく説明します.
参照数
そのファイルがディレクトリのエントリになっている回数です.
所有者
普通はそのファイルを作成したユーザが表示されます.
大きさ
そのファイルの情報量を表わします.単位はバイトです(情報量については次週詳しく説明します).
更新日
そのファイルが最後に変更された日です.
ファイル名
自分で作るファイルには好きな名前を付けることができますが,日本語はソフトによって扱い方が違ったりしますし,記号の多くは特別 な意味で使われます.アルファベット,数字,'-', '.' だけを使うのが無難です.

ディレクトリ

上で説明した方法で,たくさんのファイルの一覧を表示させる事ができます.しかし,扱うファイルの数がどんどん増えてくるにしたがって,ファイルの一覧を表示しても一画面に収まらなくなってきます.また例え一覧を表示させたとしても,たくさんのファイルの中から自分の必要とするものを見つけるのは大変です.

例えば下のようにファイルが並んでいたらどうでしょう.この中から目的のファイルを探すのは大変ですし,どこに何があるのかよく分かりませんね.

No Dicectory Files

では,次のようにファイルが「意味のまとまりごと」に分類されていたらどうでしょう.

Classified Files by Directory

上の場合と比べると格段にファイルを探しやすくなりました.たくさんのファイルを意味のまとまり毎に整理するための引出しのようなものがあると,ファイルの管理が楽になります.

このファイルをいくつかまとめてしまっておく引き出しのようなものをディレクトリ(directory)と呼びます.

● 練習問題

emacsで自分のホームディレクトリのファイルの一覧を表示し,その中にどのようなディレクトリがあるのか調べてみましょう.

ツリー構造

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

3.3 ファイルパス

ファイルのパス名

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

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

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

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

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

絶対パス

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

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

% pwd
/a/fs0501a/t03000tf
	

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

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

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

相対パス

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

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

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

ipl/report1

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

report1

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

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

..

で,/home の相対パス名は

../..

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

../test2

になります.

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

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

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

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

Find file: ‾/

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

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

3.4 ファイルの操作

ディレクトリとツリー構造,ファイルパスの概念を使って,実際にディレクトリやファイルの中身を確認したり,操作したりする為のコマンドを学びましょう.

ディレクトリの内容を見る

・今自分がいるディレクトリにあるファイルの一覧を見るためには ls ( --- list )というコマンドを使います.

% ls
Mail            WDataNMC        Wnn6            test1
WAppNMC         Wnn             test
	

今,ホームディレクトリの中には先週作ったファイルと,いくつかの設定ファイル(最初にアカウントを作った時にできたもの)があります.

ファイル名の横に' ‾ 'や' # 'がついたファイルが表示されることがあります.これらはemacsなどのソフトを使った際に自動的に作られたファイルです.

・.emacs のように先頭が' . 'で始まるファイルは,ソフトの設定に使うファイルなので,普通 は表示されません.それも表示させたい場合は, ls -a と入力します.ここでls のあとに1つ空白をあけてから' - 'をつけて加えたものをコマンドのオプション(option)と言います.オプションをつけることで,コマンドの機能を拡張することができます.

% ls -a
.                       .pgp                    WAppNMC
..                      .signature              WDataNMC
.Xauthority             .winman                 Wnn
.cshrc                  .xsession-errors        Wnn6
.login                  .yumiko                 test
.mh_profile             Mail                    test2
.netscape               News
	

・-l オプションを付けて ls -l と入力すると,先程 emacs でディレクトリの中身を表示した時と同じような,ファイルの詳しい情報が表示されます.

% ls -l
total 1304
drwx------   9 s03000hf  student     512   4/20 15:46 Mail/
drwx------   2 s03000hf  student     512   4/ 8 18:01 WAppCNS/
drwx------   2 s03000hf  student     512   4/ 2 20:36 WAppNMC/
drwx------  11 s03000hf  student     512   4/ 8 18:01 WDataCNS/
drwx------   6 s03000hf  student     512   4/12 12:59 WDataNMC/
drwx------   4 s03000hf  student     512   4/12 12:08 Wnn/
drwxrwxrwx   3 s03000hf  student     512   4/18 15:54 Wnn6/
drwx------   2 s03000hf  student     512   4/ 8 18:01 XPAppCNS/
drwx------  15 s03000hf  student     512   4/18 09:32 XPDataCNS/
-rw-r--r--   1 s03000hf  student     204   4/18 11:12 test
-rw-r--r--   1 s03000hf  student     204   4/18 11:12 test2
drwxr-xr-x   2 s03000hf  student     512   4/11 11:18 tmp/
	

1行目の' total 'は,そのディレクトリに存在するファイルの数を表わします.

カレントディレクトリ以外のディレクトリを見たいときは,そのディレクトリの名前を ls の後に書きます.
例えばMailというディレクトリの内容が見たいときは ls Mail と入力します.
この' Mail 'のようにコマンドの後に1つ空白をあけてから付け加えるものをこのコマンドの引数(argument)と言います.

% ls Mail
context   drafts    inbox
	

・コマンドのオプションはこれら以外にも,ファイルを新しい順に表示する -t オプションなどたくさんあります.
・コマンドに対して2つ以上のオプションをつけたい時はスペースで区切って並べます.例えば,全てのファイルの詳しい情報を知るには,-l オプションと -a オプションを同時に使って, ls -l -a と入力します.

● 練習問題

  1. 自分のホームディレクトリにあるファイルのうち最も新しいファイルを見つけましょう.ファイルを新しい順に表示するオプションは -t です.
  2. 次のことを試してみましょう.
    • ls の引数に存在しないディレクトリ名を指定する.
    • ls -l の引数にディレクトリでは無く,通常ファイルを指定する.

カレントディレクトリの移動

自分のいるディレクトリを移動したい(カレントディレクトリを変更したい)時には cd (--- change directry)コマンドを使います.
移動したい先のディレクトリ名(カレントディレクトリにしたいディレクトリ名)を引数として指定します.
引数に指定するディレクトリは相対パスでも絶対パスでも構いません.例えばカレントディレクトリがホームディレクトリだったとして,この直下のMailというディレクトリに移動したい時は cd Mail と,相対パスを入力するか, cd /home/(ログイン名)/Mail というふうに絶対パスを入力します.

% cd Mail
% pwd
/a/fs0501a/t03000tf/Mail
	
% cd /home/t03000tf/Mail
% pwd
/a/fs0501a/t03000tf/Mail
	
ディレクトリの移動

引数を指定せずに cd と入力しただけで Enter キー を押すとと,ホームディレクトリに移動します.

ファイルの内容を見る

emacs をわざわざ起動しなくても, less コマンドでファイルの中身を見ることができます.
コマンドの引数に内容を見たいファイル名を指定するとそのファイルの内容を表示します.
ファイルの内容が一画面に収まらないときは,最初の一画面を表示して停止します.一画面ずつスクロールするには Space キー ,一行ずつスクロールするには Enter キー を押します. b キー で一画面前に戻ることもできます.
例えば,selfintroduction というファイルの内容を見たいときは less selfintroduction と入力します.

% less selfintroduction
氏名:藤沢太郎
出身地:神奈川県藤沢市
出身高校:…
	
注意
less コマンドで中身を見ることができるのはテキストファイルだけです.

● 練習問題

宝探しゲームをしましょう.
まず,始めるために /pub/sfc/ipl/1a/exercise/islands というディレクトリに移ってください.

% cd /pub/sfc/ipl/1a/exercise/islands
	  
  • cd コマンドでサブディレクトリに移動し,ls コマンドでそこに何があるか調べます.
  • 宝が無いと分かったら,親ディレクトリに移動して別のところを探します.相対パスを使って, cd .. と入力すれば一つ上のディレクトリに移動できます.
% cd ..
	  
  • ファイルがあったら, less コマンドで中を見ます.
  • 自分のいる場所がわからなくなったら pwd コマンドで,カレントディレクトリを表示させます.

端末ウィンドウからファイルを操作するために様々なコマンドがあります.

新しいディレクトリを作る

・新しいディレクトリを作るためには mkdir ( --- make directory )というコマンドを使います.

% ls
test
% mkdir testdir
% ls
test    testdir
% ls -a testdir
.       ..
%

ファイルのコピーを作る

・ファイルのコピーを作るためには cp ( --- copy ) というコマンドを使います.

cp の後にコピー元のファイルと,新しく作るファイルの名前を空白で区切って書きます.
新しく作るファイルの代わりにディレクトリ名を指定すると,そのディレクトリの中に同じ名前で新しいファイルが作られます.

% ls
test    testdir
% cp test temp
% ls
temp    test    testdir
% cp test testdir
% ls testdir
test
%

● 練習問題

隣の人のホームディレクトリ下にあるファイルを自分のホームディレクトリにコピーしましょう.

ファイルの移動・ファイル名の変更

ファイルの移動や、ファイル名の変更には mv ( --- move ) というコマンドを使います.

% ls
temp    test    testdir
% mv temp testdir
% cd testdir
% ls
test    temp
% mv temp temp2
% ls
test    temp2
%

注意
ファイル名の変更の際,変更先のファイル名が既に存在するものであった場合,そのファイルに上書きされ元の内容は消えてしまうので注意.
例えば上の例の場合,temp2 というファイルをtest という名前に変更する場合,元のtest というファイルの内容は消えてしまい,temp2 の内容が上書きされてしまいます.

ファイルの削除

ファイルの削除を行うには, rm ( --- remove ) というコマンドを使います.
rm に続いて削除したいファイル名を引数として指定します.空白で区切って複数のファイル名を指定することもできます.

% ls
temp2   test
% rm temp2
% ls
test
%
注意
一度消したファイルを復元することはできません.

ディレクトリの削除

ディレクトリの削除を行うには, rmdir ( --- remove directory ) というコマンドを使います.

削除したいディレクトリ名を引数として指定します.空白で区切って複数のディレクトリ名を指定することもできます.
ただし,ディレクトリの下にファイルがある場合には,そのディレクトリは削除できません.そのような場合,ディレクトリの下にあるファイルを全て削除するか移動するかした後,ディレクトリを削除することになります .

% ls
test     testdir
% rmdir testdir
% ls
test
%

3.5 ファイルのアクセス権

CNS には,学部生,大学院生,卒業生,教職員など7,300人以上のユーザがいます.共同作業をする時はお互いが持っているファイルの内容が参照できると便利なのですが,もし全く自由に他人のファイルの内容を見たり,変更できたりすると,いろいろな問題が起きる可能性があります.そこで,個々のユーザーはファイルやディレクトリごとに,他のユーザからのアクセスを許可したり,禁止したりするアクセス権(access right)を適切に管理する必要があります.アクセス権の管理は,ファイルやディレクトリに対して保護モード(アクセス権モード)を設定する事で行います.

保護モード(アクセス権モード)とは「誰が」,「何を」,「どうする」という組み合わせに対して, 許可か禁止かを決めたものです.「誰が」は,次の3通りがあります.

グループは CNS の管理者によって決められていて,勝手に変更できません.学生はすべて同じグループのメンバになっています.「どうする」にも3通りがあります.

実行とは,通常ファイルの場合はコマンドとして使う,ディレクトリの場合は cd コマンドでそこへ移動する,ということです.「誰が」と「どうする」の組合わせは3×3=9通りあります.「何を」に相当するファイルとディレクトリごとに,この9通りのそれぞれを許可するか,禁止するかが決まっています.現在の保護モードの状態を調べるには,ls コマンドに -l オプションを付けます.

% ls -l
total 10615
drwx------  40 t03000tf  student       512 May  1 01:01 Mail
drwx------   2 t03000tf  student       512 Apr  1 18:53 WAppNMC
drwx------   2 t03000tf  student       512 Apr  1 18:53 WDataNMC
drwxrwxrwx   3 t03000tf  student       512 Apr 19 17:00 Wnn6
-rw-r--r--   1 t03000tf  student       153 Apr 20 15:30 test
-rw-r--r--   1 t03000tf  student       150 Apr 20 15:39 test2
%

ファイルに関するいろいろな情報が表示されますが,一番左側にあるのが,種別と保護モードです.最初の文字は種別で,普通のファイルは「-」,ディレクトリは「d」です.次の9文字は3文字ずつ組になっていて,それぞれ u, g, o の r, w, x が許可されているかを示します.「r」,「w」,「x」は許可,「-」は禁止を示します.

標準設定では,新しく作ったファイルは rw-r--r--,ディレクトリは rwxr-xr-x になりますので,他のユーザは変更はできませんが,内容を見ることはできます.Mail (メールを保存するディレクトリ)は,プライバシーの問題がありますので,rwx------ になっています.

保護モードの変更

ファイルの保護モードを変更するには chmod というコマンドを使います.chmod コマンドの最初の引数で,どのように変更するかを指定します.「誰が」(u,g,o)と「どうする」(r,w,x)を「+」または「-」でつなぎます.「+」は許可する,「-」は禁止するということです.2番目の引数で変更したいファイル名またディレクトリ名を指定します.

例えば test というファイルを自分以外の人が読むことができないようにしたいときは, chmod go-r test と入力します.

% ls -l
total 10615
drwx------  40 t03000tf  student       512 May  1 01:01 Mail
drwx------   2 t03000tf  student       512 Apr  1 18:53 WAppNMC
drwx------   2 t03000tf  student       512 Apr  1 18:53 WDataNMC
drwxrwxrwx   3 t03000tf  student       512 Apr 19 17:00 Wnn6
-rw-r--r--   1 t03000tf  student       153 Apr 20 15:30 test
-rw-r--r--   1 t03000tf  student       150 Apr 20 15:39 test2
% chmod go-r test
% ls -l
total 10615
drwx------  40 t03000tf  student       512 May  1 01:01 Mail
drwx------   2 t03000tf  student       512 Apr  1 18:53 WAppNMC
drwx------   2 t03000tf  student       512 Apr  1 18:53 WDataNMC
drwxrwxrwx   3 t03000tf  student       512 Apr 19 17:00 Wnn6
-rw-------   1 t03000tf  student       153 Apr 20 15:30 test
-rw-r--r--   1 t03000tf  student       150 Apr 20 15:39 test2
%

chmod コマンドを使った保護モードの変更のやりかたはもう一通りあります.最初の引数である保護モードの指定を3桁の数字の組み合わせで表わすことができます.


● 練習問題

隣の人と組みになり以下のことをやってみましょう.
  1. 自分の作ったファイルの中から一つ(たとえば test)を選んで,その保護モードを自分以外の人が内容を見られない(rw-------)ようにしなさい.
  2. 隣の人の rw------- のテキストファイルの内容を less コマンドで見てみなさい.
  3. 隣の人の rw-r--r-- のテキストファイルの内容を emacs で編集してみなさい.
  4. 隣の人の rwx------ のディレクトリの内容を ls コマンドで表示してみなさい.

● 宿題

今週の宿題の内容は,以下のファイルの中に書かれています.各自今日学習したコマンドを駆使してこのファイルにアクセスして宿題を解いてください.

/pub/sfc/ipl/cvs/info-2002-4/03/homework