ファイルとディレクトリの概念

| ファイルとは? | ファイル名の注意事項 | ディレクトリとは? | ファイルの分類 | ファイルのフォーマットと拡張子 | 実行可能なファイル | ファイルの所有者 | ファイルのアクセス権 |

ファイルとは?

音楽 CD は「次の曲」「前の曲」と曲の飛び越し選択ができます。これは音 (音楽) の情報が CD 上で曲単位で塊として記録・管理されており、各曲の先頭部分がディスクのどの場所にあるかわかっているから飛び越し選曲ができるわけです。

音楽CDの曲データ ファイルの概念

コンピュータ上の情報も同様に、意味のある単位で別々の情報(データ)として記録・管理されています。このコンピュータ上で記録・管理される情報の単位を「ファイル」(file) と呼びます。ファイルには人間が区別し易いように一つ一つに名前が付けられており、それを「ファイル名」(file name) と言います。

全てのコンピュータシステムがファイルによる情報の管理をしているとは限りませんが、UNIX / Linux や Windows XP, Mac OS X 等の我々がよく目にするコンピュータシステムは、ほとんどがファイルによるデータ管理を行っています。

UNIX / Linux でのファイル名の注意

UNIX / Linux では、ファイルにどのような名前をつけてもよいことになっており、その名前には殆ど全ての文字が利用できます。
しかし様々な理由から、ファイル名として利用する文字としては、次に挙げるもの程度にするべきです。

但し、ピリオド ( . ) は sample.txt のように途中で使い、.sample.txt のようにファイル名の先頭につけることは避けてください。ハイフン ( - ) も同じく先頭はやめましょう。
これら以外の記号文字、漢字などはファイル名としては利用しない方が無難です。

あと、上記の項目に従った上でファイル名を自由に決められるとしても、特定の目的のファイルでは、ある形式に従った名前にすべきものもあります。例えば、C言語のプログラムファイルは、ファイル名末尾が .c で終わるようにしておく必要があります(そうでないとプログラムをコンパイルできません)。このように、ファイル名末尾のピリオド以下で内容を表現することを、「拡張子」(suffix) と言います。これについてはここでは説明を省いて別途説明することにします。

ファイルのリストを見る

ここで、一度ファイルのリストを見てみましょう。kterm のウィンドウを選択して、キーボードで ls と入力し、Enterキーを押してみて下さい。次のようなファイルのリストが表示されるでしょう(これら以外に「プログラミングA」の演習で作成したファイルも出てくるかもしれません)。

cc2000(82)% ls
Desktop Maildir Wnn6 public_html win_home
cc2000(83)% 

これは UNIX / Linux でファイルのリストを表示するための ls コマンドを実行したことになります。上の例の結果からは「Desktop」「Maildir」「Wnn6」「public_html」「win_home」という名前の5つのファイルがあるということがわかります。
但し、ここでは何故 ls という名前なんだろう?ということは気にしないでください。UNIX / Linux のコマンド名は類推しづらいものが多く、まる覚えするしかありません。コマンドについては後に詳しく説明します。

では次に、中身が何もない空のファイルを一つ作成して、ファイルが増えたことをリストを表示して確認してみましょう。ここでは touch コマンドを利用して sample という名前のファイルを作成します(但し、touch コマンドは本来ファイル作成のためのコマンドではありません)。
キーボードで、touch sample と入力して、Enter キーを押しましょう。touch と sample の間にはスペースキーで空白を1つ入れることに注意して下さい。touch sample を実行したら、先ほどの ls コマンドを再度実行しましょう。すると次のように sample というファイルができていることが確認できるはずです。

cc2000(84)% touch sample
cc2000(85)% ls
Desktop Maildir Wnn6 public_html sample win_home
cc2000(86)%

ページ先頭へ戻る

ディレクトリとは?

日常生活で、本や音楽CD、日用品等を整理するときには、ある程度同じようなものを一つの箱や棚に集めて整理したり、同じ目的のものをまとめて管理することが行われています。例えば、

という具合に、いろいろなモノがその種類や目的に応じて整理整頓されます。コンピュータのファイルも同様で、ファイルの目的や種類などに応じて整理されるべきです(でないと、どれが何のファイルか人間が把握できなくなります)。この整理のために UNIX / Linux では「ディレクトリ」(directory) と呼ばれる仕組みが使われています。Windows や Macintosh ではフォルダ (folder) とも呼ばれます。ファイルを整理する「入れ物」と考えればいいでしょう。

ここで、ディレクトリで整理されたファイルの例を示します。

ディレクトリによるファイル整理の例

ディレクトリによるファイル整理の例

この図では、memo、reports、Mail、Program と4つのディレクトリがあり、各々の中身は次のようになっています。

このように、ファイルの目的や種類ごとにディレクトリで整理しています。この図でもう1つ重要な点は、ディレクトリはファイルとディレクトリの両方を格納できる点です。Mail や Program のように、ディレクトリの中に別のディレクトリを入れることでより細かい分類に対して階層的にファイルやディレクトリを整理することができます。

これは個人のファイルの整理の例ですが、コンピュータ上ではたくさんのユーザがいるわけです。複数存在するユーザの存在自体もディレクトリとして整理されています。ここで、上記の4つのディレクトリとその中のファイルがユーザ ID の名前 yasuda のものである場合、次のようなディレクトリの階層構造で関係が表されます。

1人のユーザ内のディレクトリをまとめた例

ユーザ yasuda のディレクトリに存在するディレクトリとファイル

何度も説明している通り UNIX / Linux では複数ユーザが共有するので、ディレクトリ yasuda と同様、他のユーザIDの名前がついたディレクトリも存在します。ディレクトリ yasuda 自体がたくさんのユーザのディレクトリの1つとして整理の対象になります。複数ユーザのディレクトリがまとめられている例として、yasuda と tanaka が g840 というディレクトリでまとめられている図を次に示します。

複数ユーザのディレクトリをまとめた例

複数ユーザのディレクトリをまとめた例

ここではユーザIDのディレクトリとそのユーザが持つファイルで例を示しましたが、様々なファイルやディレクトリを整理していけば、全てのファイルやディレクトリが1つにまとめられます。実際、UNIX / Linux の全てのファイルはディレクトリで整理されて1つの木構造(ツリー構造)で表現されています。

ディレクトリによる1つの木構造

ディレクトリによる1つの木構造

このように1つの木構造で表した場合の一番上にくるディレクトリは、特別に「ルートディレクトリ」(root directory) もしくは「トップディレクトリ」(top directory) と呼ばれます。

ホームディレクトリを確認する

さて、上の例で出てきたユーザ yasuda や tanaka ですが、これらのユーザIDのディレクトリは、各ユーザの「ホームディレクトリ」(home directory) もしくは「ログインディレクトリ」(login directory) と呼ばれます。ホームディレクトリの名前は利用者のユーザIDが付けられて、利用者登録の際にシステム管理者の手によって作成されます。皆さんが Linux のシステムにログインした際には、実は皆さん各自のユーザIDのホームディレクトリ上で作業していることになり、メールの情報やプログラミングの授業で作成したファイル等は全て各自のホームディレクトリの下に存在しています。

ではここで自分のホームディレクトリの存在を確認してみましょう。pwd というコマンドを実行してみてください(pwd という文字をタイプした後に Enter キーを押す)。これは現在作業中のディレクトリを表示するコマンドです。ログインしてからディレクトリに関する操作を何もしていない場合、次のような結果が表示されるはずです。

cc2000(87)% pwd
/NF/home/g050/xxxxxxx
cc2000(88)%

ここでは pwd コマンドの結果のすべてを理解できなくても構いません。とにかくこの例で xxxxxxx にあたる部分が自分のユーザIDになっていることを確認して下さい。(所属学年によっては g050 の代わりに別のものになっていることもあります)

ページ先頭へ戻る

ディレクトリとファイルの扱い

UNIX / Linux ではディレクトリはファイルの一種として扱われます。そのため「ディレクトリファイル」などと表現されるときもあります。ゆえにディレクトリもファイルと同じ様に名前を付けてそれを他のものと区別して扱います。名前のルール(名前に利用できる文字、文字数の制限など)は普通のファイルと同じですので、ファイル名の注意をよく憶えておきましょう。

ページ先頭へ戻る

ファイルに関するその他トピック

ファイルの分類

プログラムとデータ

ファイルは主に「プログラムファイル」(program file) と「データファイル」(data file) に分けることができます。「プログラムファイル」は、コンピュータ上でそのまま実行することができるものや、C言語やJava言語で書かれたプログラム(そのままでは実行できないが実行手順が書かれたもの)を指します。それに対し「データファイル」は、それ自体ではコンピュータ上で実行されず、プログラムによって読み込まれたり、書き込まれたりするものです。その例としては、JPEG や PNG 等の画像ファイル、AVI や MPEG 等のムービーファイル、WAV や AIFF, MP3 等のサウンドファイル、HTML やワードプロセッサの文書ファイル等が挙げられます。

実行できるプログラムは場合によっては「アプリケーションプログラム」(application program) もしくは単純に「アプリケーション」と呼ばれることもあります。

テキストとバイナリ

ファイルの別の分類の仕方として、「テキストファイル」(text file) と「バイナリファイル」(binary file) とに分けることができます。テキストファイルは人間がその中身を見ると文字や数字で構成されているのでそのまま読む事ができます(読んで解釈できるかどうかは別の問題です)。それに対し、バイナリファイルは中身が文字や数字を表しているのではないため、中身をそのまま見ても読む事ができません。

C言語のプログラムファイルやHTMLの文書ファイルはテキストファイルなので、テキストエディタ (text editor) やテキストビューア (text viewer) のプログラムで開いて中身を読むことができます。Windowsではメモ帳がそれらにあたりますが、Linux上であれば Emacs や vi、vim 等がテキストエディタであり、more コマンド、less コマンドなどがビューアとして利用できます。
一方、Microsoft Word 等の特定アプリケーションで作成されたファイルは、バイナリファイルであることが多く、そのアプリケーション上で読むことができても単なるテキストエディタでは文書の内容を読み書きすることができません。同じ文書ファイルと言っても、HTML と Word ファイルでは全然中身の形式が違うということを知っておきましょう。

ページ先頭へ戻る

ファイルフォーマットと拡張子

ファイルは、その中身が意味する内容や目的によって、情報の記録の仕方が変わります。これを「ファイルフォーマット」(file format) と言います。例えば、画像ファイルでは、JPEG形式、GIF形式、PNG形式、Photoshop形式など、様々なフォーマットがあります。

様々なファイルフォーマットが存在する中で、ファイル名末尾に "." (ピリオド) に続けて書く「拡張子」(suffix) でそれらを区別することが多々あります。例えば、WAV形式のサウンドファイルには、.wav という文字列(拡張子)をつけてWAVファイルであることを明示します。C言語のプログラムであれば .c という拡張子をつけることで、人は「C言語のプログラムだ」と解釈できるわけです。もちろんコンピュータシステムも場合によってはこの拡張子を見てプログラムの動作を変えることがあります。次の表にファイル拡張子の例を挙げます。

ファイルの種類 拡張子の例
プログラムのファイル .c , .cpp , .h , .java , .f , .cs , .pl , .rb , ...
文書ファイル .html , .htm , .txt , .tex, .ps , .pdf , .doc , .xls , .ppt , ...
画像ファイル .jpeg , .jpg , .png , .gif , .tiff , .tif , ...
サウンドファイル .aif , .aiff , .wav , .mp3 , .ac3 , ...
映像ファイル .mov , .mpg , .mpeg , .avi , .wmv , ...
アーカイブ・圧縮ファイル .lzh , .zip , .gzip , .bzip2 , .tar , .cab , .pkg , ...
その他 .lib , .so , .a , .dll , .shlb , ...

昔の MS-DOS の時代から Windows OS の最近のものまで、拡張子は3文字という制限があるために、世の中の多くのファイル拡張子は3文字で構成されるに至っています。UNIX / Linux のシステムではそもそもそのような拡張子の文字数制限はなく、拡張子がないファイルもたくさん存在します。また、1つのファイル名に複数のピリオド "." が存在しても何ら問題はありません。ですが、Windows にしろ、Linux にしろ、GUI (Graphical User Interface) の画面では、ファイル名末尾の拡張子を元にファイル形式を判断してアイコン情報と結びつけて表示されます(逆に言えば、本当のファイルの中身が拡張子が示すものとは違うこともありえます)。注意しておきましょう。

Macintosh のシステムでは、ファイルの種類を拡張子だけでなく、ファイル名以外の仕組みでも管理するようになっており、アプリケーションとファイルの結びつけは、より柔軟に行える仕組みになっています。

Windows等のGUIのシステムでは、画面表示の設定によってはアイコン(絵柄)と共に表示されるファイル名の拡張子が省略されていることがあります。これはアイコンの種類が拡張子によって決められるため、ユーザに対して拡張子を見せなくてもアイコンで把握させればよい、という考えに基づいています。
コンピュータサイエンスを勉強する皆さんは、なるべくファイル名を完全表示させるようにして、常に拡張子を含めたファイル名を意識するようにしましょう。

ページ先頭へ戻る

実行可能なプログラム

拡張子がないファイル

UNIX / Linux では拡張子がないファイルがたくさん存在します。Linux 自体が一時的に作成するバイナリデータかもしれませんし、Linux の動作に必要な設定が記述されたテキストファイルかもしれません。また、シェルスクリプトと呼ばれるテキストで書かれた実行可能なプログラムも存在します。C言語で記述されたファイルは、通常 .c の拡張子がついていますが、cc (gcc) コマンドでコンパイルしてできる実行可能なプログラムは、拡張子があるとは限りません(特に何もファイル名を指定せずにコンパイルすれば a.out というファイルが作成されますが)。このように、UNIX / Linux ではファイル名に拡張子がないものの中身がどういうファイルなのか、名前だけではわからない場合が多々あります。

.exe はどこに?

Windows XP 等では、実行可能なプログラムには基本的に .exe という拡張子がついています。これは Windows 系のシステム特有の話であって、コンピュータシステム一般の話ではありません。UNIX / Linux では .exe という拡張子がなくても実行可能なプログラムは存在しますので注意しましょう。

ページ先頭へ戻る

ファイルの所有者

UNIX / Linux は、複数のユーザ (user) が共同利用できるコンピュータシステムなのですが、自分が作成したファイルを他人が勝手に消去したり書き換えたりすると困ります。そこで、このような複数ユーザで共有するシステムでは各ファイルに所有者 (オーナー:owner) の情報を持たせ、他人に勝手なことをさせないようにしています。また、普通のユーザが Linux の動作に必要なファイル(システムファイル)を勝手に書き換え・消去することができるとトラブルの元にもなるため、所有者の仕組みはそのような事態を防ぐためのものでもあります。システムファイルは特別な権限を持ったユーザのみが書き換えることが可能です。ディレクトリについても、ファイルと同様ですので各ディレクトリに所有者情報がついています。

Windows XP/2000/NT や Mac OS X も UNIX / Linux と同様にファイルの所有者情報を管理しているのですが、それらより古い Windows 98/95 や Mac OS 9等は所有者という概念があまり徹底されていない作りになっています。他人のファイルを簡単に書き換えたりできてしまうため、共同利用には向いていません。

ページ先頭へ戻る

ファイルのアクセス権(パーミッション)

UNIX / Linux のシステムでは、基本的なファイルの読み書き(アクセス)の種類を「読める (Read)」「書き込める (Write)」「実行できる (eXecute)」 の3種類と規定し、各々をアルファベット一文字ずつ (r, w, x) で表現することになっています。これは、UNIX / Linux のファイル(ディレクトリ含む)すべてに付け加えられた情報であり、「アクセス権」(パーミッション)と呼ばれます。

さらに、このアクセス権は誰に与えるか、ということも重要な話です。UNIX / Linux のシステムでは、アクセス権の付与する対象者を 「所有者」「所有グループ」「その他ユーザ」 の3者に区別し、各々の区別に r (read), w (write) x (execute) の権限を管理します。普通は、ls コマンドを使って、ls -l を実行すれば、これら3者に対する各3つの権限が表示されます。lsコマンドやコマンド実行結果(アクセス権を含むファイルリストの情報表示)については、別の回に説明する UNIX コマンドの ls -l コマンドの箇所を参照してください。

ページ先頭へ戻る

Valid HTML 4.01!