ディレクトリ
ディレクトリ (英: directory) は、コンピュータのファイルシステムにおいて、ファイルをグループ化するための特殊なファイル[1]で、整理・管理などの目的で活用される。ディレクトリの中にも、通常のファイルだけでなく入れ子的にディレクトリを作って、任意の階層を持たせて管理できることがほとんどである。
ファイルの入れ物(容器)などとも表現され、GUIでは文具のフォルダーのようなメタファーで表現されることが多い。ただし、物理的な容器であるのはHDDなどのメディアそのものであるので、ディレクトリは「ファイルへの見出し[2]の入れ物」と表現する方が正確である。
概要[編集]
UnixやMS-DOS、3.1以前のWindowsなどでは「ディレクトリ」と呼び、Mac OSでは「フォルダ」と呼んでいる。Windows 95以降のエクスプローラーでは仮想的な階層構造であるシェル名前空間が導入され、フォルダと呼称するようになった。例えば、コントロールパネルやネットワーク、圧縮フォルダーなどは、ファイルシステム上のディレクトリとは異なる仮想的なフォルダである[3]。
Unixなどでは唯一の最上位の根幹(ルート、ルートディレクトリ)があり、ストレージやボリューム(パーティションなど)の内容は、任意の枝(マウントポイント)にマウント(接ぎ木)される、というツリー(木)モデルとなっている。それに対し、MS-DOSおよびWindowsでは、最上位は「ドライブ」という単位であり(フロッピーの場合で明らかなように、ディスク単位ではない。なお、パーティションなどに対しドライブを割り当てていることは多い)、各ドライブに対してそれぞれのメディアのルートディレクトリがあって、それぞれのツリーがある、という(数学では「林」あるいは「森」と呼んで、「木」と区別することがある)ようなモデルとなっている。
ディレクトリにより任意の深さの(実際には後述する絶対パスの最大長などとして制限があることも多いが)階層を構成することが可能なシステムでは、システムコール上のファイルの指定を、カレントディレクトリ(後述)の移動とファイルの指定のようにして別々に行わなければならないシステムもあるが、Unixなど多くのように「ディレクトリ名/ディレクトリ名/ディレクトリ名/ファイル名」のようにセパレータ(分離符)で分離する表現によりいっぺんに行えるものもある。セパレータは、Unixでは '/'(スラッシュ)、MS-DOSでは '\'(コードが 0x5c の文字)[4]であるが、MS-DOSのセパレータの 0x5c というコードは ASCII ではバックスラッシュだが、JIS X 0201 では半角円記号(U+00A5、'¥')であるなど ISO 646 であえて統一化されず残されたコードであったためもあり、その意味に混乱させられている者が多い。
(セパレータが使えるシステムでは)先頭をセパレータで始めるなどの方法により、ルートディレクトリからの絶対的な表現で指定したパスを「絶対パス」や「フルパス」と呼ぶ。それに対して、カレントディレクトリ(後述)など、なんらかの任意のディレクトリから相対的に(「相対パス」)指定することもできる。
Unixなどでは[5]、プロセスの持つ属性として、カレントディレクトリ(あるいはワーキングディレクトリ)がある。そのプロセスが発行するシステムコール中において、相対パスで指定された場合の起点としてなど「デフォルトのディレクトリ」として使われる。子プロセスの起動時には、その時点での親プロセスのカレントディレクトリが引き継がれるか、明示的に指定することができるものもある。原則として子プロセスは親プロセスに影響を与えることができないため、「シェルのカレントディレクトリを変更する」というコマンドは外部コマンドとして実装することができないので、必ずシェルの内部コマンドとして実装される。
Unixにはディレクトリの内容を表示する外部コマンドとして ls
コマンドがあり、Domain/OSには、相当するコマンドとして ld
がある。なお、MS-DOSのCOMMAND.COMには、相当する機能を持つ内部コマンド dir
[6] があり、DISK-BASICには、相当するコマンドとしてfiles
とlfiles
がある。
Unixなどでは、ユーザ毎にホームディレクトリが設定されており(passwdファイルなどで)、そのユーザのログイン後の最初のプロセス(通常はシェル)の初期カレントディレクトリがそれになる。通常[7]、そのユーザが所有者で読書き可能に設定されており、その下にユーザー個人のファイルを置くことが多い。
Unixをはじめ多くのシステムでは、ディレクトリ中のファイル名(正確には、「ディレクトリエントリ」)の順番をユーザが編集することはできない(Unixのlsコマンドや、シェルでの * による展開では、通常はソートされるためわからないが、lsの -f オプションなどで実際の順番を確認できる)が、MS-DOSでは比較的容易に直接ディスクの内容を改変して編集[8]できたため、FDやマイクロデータの「エコロジー」シリーズなど、そのような編集機能を持つファイル管理ソフトもあった。
商用UNIXや、FreeBSDなどいわゆるBSD系のシステムでは、GNU/Linuxにおけるcoreutilsに相当するような基本的なユーティリティ類は全て、カーネルと同じプロジェクトとして維持管理されているいわゆるベースシステムに含まれているため、通常は各システムのデフォルトの配置が使用されるため問題が起きることは少ないが、GNU/Linuxでは以前はディストリビューションごとにまちまちであったために面倒な作業などが必要になることがあったため、Filesystem Hierarchy Standard (FHS) により標準化が図られている。
符号位置[編集]
GUI で表現されるディレクトリ(フォルダ)のアイコンは、絵文字として Unicode 6.0 から収録されている。
記号 | Unicode | JIS X 0213 | 文字参照 | 名称 |
---|---|---|---|---|
📁 | U+1F4C1 |
- |
📁 📁 |
FILE FOLDER |
📂 | U+1F4C2 |
- |
📂 📂 |
OPEN FILE FOLDER |
🖿 | U+1F5BF |
- |
🖿 🖿 |
BLACK FOLDER |
🗀 | U+1F5C0 |
- |
🗀 🗀 |
FOLDER |
🗁 | U+1F5C1 |
- |
🗁 🗁 |
OPEN FOLDER |
注[編集]
- ^ 正確には「特殊なファイルとして実装されることが多い」。
- ^ 「ディレクトリエントリ」と呼ばれる。
- ^ Raymond Chen (2011年2月16日). “What is the difference between a directory and a folder?”. 2021年2月12日閲覧。
- ^ ASCII の 0x5c の文字が表示されているはずだが、この記事を見ているあなたの環境でどのように見えているかはわからない。
- ^ MS-DOSにおけるカレントディレクトリに関しては、元々シングルタスクが前提のCP/M風の設計だったところに、無理やりUnix風のシステムをツギハギしたものになっていて変なことになっており、ディレクトリだけでなく「カレントドライブ」というものもあってややこしいため、敢えて無視する。
- ^ 発行者 塚本慶一郎 『標準MS-DOSハンドブック』株式会社アスキー、1984年7月10日、107-110頁。ISBN 4-87148-742-3。
- ^ nobodyなどの特殊なアカウントの場合は違うこともある。
- ^ MS-DOSをバイパスする形で実現しているため、LFN(VFAT)導入時にはトラブルになった。