トップへ
田村研究室

インターネット利用技術演習

2009年度

2009
4/27

Unixファイルシステム

Unixファイルシステムとは

すでに知っている人も多いはずだが,ファイル(file)とは利用者のデータを格納しておく容れ物のことである.プログラムやテキスト(文章),HTMLファイル,データなど,さまざまな情報が格納される.このファイルを管理するためのコンピュータ上の機構をファイルシステムと呼ぶ.ファイルシステムをユーザ側から見た場合,ファイルを階層的に管理する機能と、複数のユーザによって利用できるようにアクセス権(誰がどのファイルを読み書きしてよいかを示す権利)を管理する機能などが提供される.このファイルシステムは,OSの主たる機能のひとつとして実現されており,OSによってそれぞれ独自のシステムを構築していることが多い.以下,Webサーバに利用されることが多い,UNIXのファイルシステムについて説明する.

階層的なファイル管理機能

Windowsでのファイル管理は、フォルダとドライブによって行われている。Unixでもほぼ同様な管理(歴史的にはUnixの方が古い)が行われている。Unixではフォルダではなく、ディレクトリと呼ぶ。

また、Unixではドライブは存在せず、ディレクトリ(フォルダ)の階層はすべて,自然の木のような「ツリー(木)構造」に格納されることになっている。ツリー(木)構造は枝分かれの部分と葉の部分とに分けられる.葉の部分(leaf)は実際のデータが格納されるファイル,枝分かれの部分(node)はそれらのファイルなどを束ねておくディレクトリを意味する.ここで、正確な用語を定義しておくと、葉に相当するものをレギュラーファイル(regular file),枝分かれに相当するものをディレクトリファイル(directory file)と呼ぶ.

  • レギュラーファイル

    ユーザのデータを格納するもの.テキスト/ソースプログラム/オブジェクトファイルなど.これを単にファイル(file)と呼ぶことが多い.

  • ディレクトリファイル

    ファイルを管理するための特殊なファイル.ディレクトリファイルは、その中にレギュラーファイルや別のディレクトリファイルを「格納」できる(「下にぶらさげる」と表記することもある)。これを単にディレクトリ(directory)と呼ぶ.

ツリー構造の根に当たる部分をルートディレクトリ(root directory)といい,"/"で表す.木構造を図にする際には,伝統的にこのルートを一番上にしていわゆる逆さまにした図にする.

windowsと異なりドライブが存在しないため、システム内のファイルは,すべてルートから辿れるどれかのディレクトリの下に位置する。各利用者のファイルは、特定の場所に専用のディレクトリが割り当てられ,その部分から下,すなわちサブツリー(部分木)に保存されることになる.また、記憶装置(ドライブ)は、実際にはどこかのサブツリーとして存在しているが、それをユーザが意識することはほとんどない。

UNIXやLinuxではワークステーションにログインする利用者(ユーザ)別にファイルを管理し,ファイルは必ず誰かの所有物として扱われる.

特別な意味を持つディレクトリ

ユーザはログインしている間は,常に操作対象のディレクトリを決めなくてはならない.これを,ユーザが「どこかのディレクトリに位置している」あるいは「ディレクトリの中に入っている」と表現する.ログイン直後に自動的に「位置する」ことになるディレクトリのことをホームディレクトリと呼ぶ.コマンドによってディレクトリを「移動し」,別のディレクトリに「入って」いろいろ操作を行う.これらのことを表現するために,用語が決められている.特に,次のように呼んで、特別に扱うディレクトリがある.

  • カレントディレクトリ(current directory):

    ユーザが現在位置しているディレクトリ、別名ワーキングディレクトリ、現ディレクトリ

  • ホームディレクトリ(home directory):

    ログインしたときに位置しているディレクトリ.このディレクトリはユーザの所有物

  • 親ディレクトリ(parent directory):

    あるディレクトリの一つ上のディレクトリ。そのディレクトリが納められている

  • サブディレクトリ(sub directory):

    あるディレクトリの一つ下(あるいは一つ以上下)のディレクトリ。そのディレクトリの中に納められている。

  • ルートディレクトリ(root directory):

    一番根本のディレクトリ。このディレトクリには親ディレクトリが存在しない。

ログインした直後のカレントディレクトリはホームディレクトリになっている.ユーザはホームディレクトリから下に自分のファイルやディレクトリを作ることができる.これら特別な意味を持っているディレクトリは、Unixコマンドの中などでは次のように表記される.

表 記意 味
.(または./) カレントディレクトリ
..(または../) 親ディレクトリ(一つ上のディレクトリ)
~(または~/) 自分のホームディレクトリ(~:チルド)
~user(または~user/) userという名のユーザ(他人)のホームディレクトリ
/ ルートディレクトリ

ファイル名(ディレクトリ名)

ファイル名につけられる文字数はシステムによって異なる可能性があるが、255文字まで使えるなど、実用上気にかける必要がないことがほとんどである。

ただし、日本語のファイル名については、文字コードに注意する必要がある。旧来のUnixではEUC-JPを用いていたが、最近はUTF-8を使用するシステムが増えている。ファイルをやりとりする場合には、英数字だけを用いたファイル名をつけた方が無難である。

英数字だけだとしても、英字の大文字と小文字は区別される点に注意。記号もいくつか使えるが、シェルスクリプトで特別な意味を持つ記号も多いので、「.」「-」「_」程度にしておいたほうがよい。

特に、ホームディレクトリと間違えられてしまうためファイル名の先頭に「~」は通常つけられない。また、「/」もディレクトリの位置を示すために用いられるためファイル名にはつけられない。

ファイル名の先頭が「.」の場合は、隠しファイルとして扱われる。

ファイル(ディレクトリ)の位置表記

ファイルのツリー構造の中での位置はパス名(path name)を用いて指定する.パス(path;経路)とは,ツリー構造の中でそのファイルまでをたどっていく道順のことを意味し、「/」で道順にあるディレクトリを区切りながら表現する.

例えば,/home/samp/sasuserは次のように解釈される.

 /(ルート)ディレクトリの下の,
 homeディレクトリの下の,
 sampディレクトリの下の,
 sasuserというファイルまたはディレクトリ.

先ほどの木構造の例の中にある(1)と(2)のファイルやディレクトリは次のように表すことができる.

(1) sasuser /home/samp/sasuser
(2) work /home/samp/sasuser/work

 このようにルートからディレクトリをたどってファイル指定する方法を絶対パス名によるファイルの指定という.ファイルシステム中のすべてのファイルはこの方法で一意に指定することができる.

これに対し、カレントディレクトリを基準としてそこから相対的にファイルを指定する方法を相対パス名によるファイルの指定と呼ぶ。

例えばカレントディレクトリが(1)の位置(sasuser)にあるとする.先ほど説明したようにカレントディレクトリを「.」(ドット)、親ディレクトリを「..」で表すことを利用してそれぞれのファイルの相対パス名は次のようになる.(すぐ下のファイルの場合には「.」を省略できる.)

sasuser
work ./workあるいはwork
home ../..
samp ../samp
bin ../../../bin (絶対パス/binの方が簡単)

これらをまとめると次のようになる。

表 記意 味
~/sample 自分のホームディレクトリにあるsampleファイル
/home/... 絶対パスによる指定(/から始まる)
./temp 相対パスによる指定(/から始まらない../,../から始まる)
temp 相対パスによる指定(./の省略.カレントディレクトリの場合 は./を省略できる)

ファイル(ディレクトリ)のアクセス権とファイルの保護

ファイルやディレクトリには所有者の名前と保護モードと呼ばれるアクセスを制御する情報が持たされている.ファイルを作成すると,作成したユーザがそのファイルの所有者になる.

ファイルは所有者自身が管理することを期待されており、所有者は自分のファイルを他のユーザに見せることも,また,見せないことも設定できる.例えば電子メールなど他のユーザから読まれては困るものはアクセスの制限をし,ホームページのように見せたいものはアクセスを許可することになる.

保護モード

ファイルのアクセスを制限する対象として,所有者(owner),グループ(group)に属するユーザ,その他(others)の3種類に分けられている。それぞれに対して、読み出し,書き込み,実行の3つの許可と制限を設定できる.

Unixシステムでは、システム側がユーザをグループ分けしており、例えば大学のマシンでは、教員と学生を別のグループにしていたりする。

読み出し(r) ファイルに対しては読み出しを許可する.ディレクトリに対してはそのディレクトリの下にあるファイルのリストを表示することを許可する.
書き込み(w) ファイルに対しては書き込みを許可する.ディレクトリに対しては,新しいファイルやディレクトリを作ること,削除することが許可されている.
実行(x) ファイルに対してはファイルを実行することを許可する.ディレクトリに対しては,そのディレクトリを検索すること,すなわち,そのディレクトリに移動(cd)することを許可する.

保護モードの確認方法

各ファイルの保護モードが現在どう設定されているのか知るには、lsコマンドを「-la」オプション付きで実行すればよい.例えば、次のようになる。

            % ls -la
            total 646
            drwxr-xr-x  13 samp     ms          1024 Apr  1 19:22 .
            drwxr-xr-x  47 root     root        1024 Mar 17 19:19 ..
            -rwxr-xr-x   1 samp     ms          5881 Apr  1 18:13 .Xauthority
            -rwxr-xr-x   1 samp     ms          1725 Mar  4 19:21 .Xdefaults
            -rwxr-xr-x   1 samp     ms          5409 Mar  3 18:41 .Xkeyboard
            

行の最初の - はファイルの型を識別するために用意されており,この例ではレギュラーファイルであることを示している.ディレクトリのときはここが d となる.

次の9文字は3文字ずつに分けられる.初めの3文字は所有者(u)に対して,次の3文字はグループ(g)に対して,最後の3文字はその他のユーザ(o)に対しての許可を示している。

3つのそれぞれのフィールドは,読み出し,書き込み,実行の順にならんでいる.- のところは,その許可が否定されていることを示している.

r ファイルの読み出し可能
w ファイルの書き込み可能
x ファイルの実行可能
- その許可が否定されている

所有者 そのファイルの所有者が対象
グループ そのグループに属する人が対象
その他のユーザ 所有者でもなく ,そのグループにも属さないユーザが対象(全ユーザ)

保護モードの設定方法

ファイルまたはディレクトリの保護モードの変更は,UNIXのchmodコマンドによって行う.

chmodコマンド
機能 ファイルの保護モードの変更
書式 chmod mode file
オプション
mode 変更の保護モードを指定する.
file ファイルを指定する.

modeによってそのファイルの保護モードを指定する.modeは次のような形式になっている.

対象者  オペレータ  許可条件

ここでは下記に示す記号を用いて対象者となるユーザの種類に対して,許可条件を示す記号をオペレータ(演算子)で示すように設定する.

対象者 u 所有者 g グループ
o その他のユーザ a すべてのユーザ
許可条件 r 読み出し w 書き込み x 実行
オペレータ + 追加 - 削除 = 設定

 次に指定の例をあげる.

chmod a+r file1
すべてのユーザ(a)に読み出し許可(r)を追加(+)する
chmod ug-x file2
所有者(u)とグループ(g)の実行(x)の許可を削除(-)する
chmod o-wx file3
その他のユーザ(o)の書き込み(w)と実行(x)の許可を削除(-)す る