ディレクトリ





ディレクトリ (英: directory) は、コンピュータのファイルシステムにおいて、ファイルをグループ化するための特殊なファイル[1]で、整理・管理などの目的で活用される。ディレクトリの中にも、通常のファイルだけでなく入れ子的にディレクトリを作って、任意の階層を持たせて管理できることがほとんどである。


ファイルの入れ物(容器)などとも表現され、GUIでは文具のフォルダーのようなメタファーで表現されることが多い。ただし、物理的な容器であるのはHDDなどのメディアそのものであるので、ディレクトリは「ファイルへの見出し[2]の入れ物」と表現する方が正確である。




目次






  • 1 概要


  • 2 符号位置


  • 3


  • 4 外部リンク





概要




ディレクトリ構造の例。この図では、ルートはMFD (Master File Directory) として記述されている。


UnixやMS-DOS、3.1以前のWindowsなどでは「ディレクトリ」と呼び、Mac OSでは「フォルダ」と呼んでいる。95以降のWindowsではフォルダと呼び直したが実態には何の違いも無かったように、呼び方の違いには(マーケティング上の印象以上の)意味は全く何もない。


Unixなどでは唯一の最上位の根幹(ルート、ルートディレクトリ)があり、ストレージやボリューム(パーティションなど)の内容は、任意の枝(マウントポイント)にマウント(接ぎ木)される、というツリー(木)モデルとなっている。それに対し、MS-DOSおよびWindowsでは、最上位は「ドライブ」という単位であり(フロッピーの場合で明らかなように、ディスク単位ではない。なお、パーティションなどに対しドライブを割り当てていることは多い)、各ドライブに対してそれぞれのメディアのルートディレクトリがあって、それぞれのツリーがある、という(数学では「林」あるいは「森」と呼んで、「木」と区別することがある)ようなモデルとなっている。


ディレクトリにより任意の深さの(実際には後述する絶対パスの最大長などとして制限があることも多いが)階層を構成することが可能なシステムでは、システムコール上のファイルの指定を、カレントディレクトリ(後述)の移動とファイルの指定のようにして別々に行わなければならないシステムもあるが、Unixなど多くのように「ディレクトリ名/ディレクトリ名/ディレクトリ名/ファイル名」のようにセパレータ(分離符)で分離する表現によりいっぺんに行えるものもある。セパレータは、Unixでは '/'(スラッシュ)、MS-DOSでは ''(コードが 0x5c の文字)[3]であるが、MS-DOSのセパレータの 0x5c というコードは ASCII ではバックスラッシュだが、JIS X 0201 では半角円記号(U+00A5、'¥')であるなど ISO 646 であえて統一化されず残されたコードであったためもあり、その意味に混乱させられている者が多い。


(セパレータが使えるシステムでは)先頭をセパレータで始めるなどの方法により、ルートディレクトリからの絶対的な表現で指定したパスを「絶対パス」や「フルパス」と呼ぶ。それに対して、カレントディレクトリ(後述)など、なんらかの任意のディレクトリから相対的に(「相対パス」)指定することもできる。


Unixなどでは[4]、プロセスの持つ属性として、カレントディレクトリ(あるいはワーキングディレクトリ)がある。そのプロセスが発行するシステムコール中において、相対パスで指定された場合の起点としてなど「デフォルトのディレクトリ」として使われる。子プロセスの起動時には、その時点での親プロセスのカレントディレクトリが引き継がれるか、明示的に指定することができるものもある。原則として子プロセスは親プロセスに影響を与えることができないため、「シェルのカレントディレクトリを変更する」というコマンドは外部コマンドとして実装することができないので、必ずシェルの内部コマンドとして実装される。


ディレクトリの内容を表示する外部コマンドとして ls コマンドがある。なお、MS-DOSのCOMMAND.COMには、相当する機能を持つ内部コマンド dir がある。


Unixなどでは、ユーザ毎にホームディレクトリが設定されており(passwdファイルなどで)、そのユーザのログイン後の最初のプロセス(通常はシェル)の初期カレントディレクトリがそれになる。通常[5]、そのユーザが所有者で読書き可能に設定されており、その下にユーザー個人のファイルを置くことが多い。


Unixをはじめ多くのシステムでは、ディレクトリ中のファイル名(正確には、「ディレクトリエントリ」)の順番をユーザが編集することはできない(Unixのlsコマンドや、シェルでの * による展開では、通常はソートされるためわからないが、lsの -f オプションなどで実際の順番を確認できる)が、MS-DOSでは比較的容易に直接ディスクの内容を改変して編集[6]できたため、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(オープン・フォルダー)






  1. ^ 正確には「特殊なファイルとして実装されることが多い」。


  2. ^ 「ディレクトリエントリ」と呼ばれる。


  3. ^ ASCII の 0x5c の文字が表示されているはずだが、この記事を見ているあなたの環境でどのように見えているかはわからない。


  4. ^ MS-DOSにおけるカレントディレクトリに関しては、元々シングルタスクが前提のCP/M風の設計だったところに、無理やりUnix風のシステムをツギハギしたものになっていて変なことになっており、ディレクトリだけでなく「カレントドライブ」というものもあってややこしいため、敢えて無視する。


  5. ^ nobodyなどの特殊なアカウントの場合は違うこともある。


  6. ^ MS-DOSをバイパスする形で実現しているため、LFN(VFAT)導入時にはトラブルになった。



外部リンク












  • Linuxのディレクトリ構成


  • Linuxのディレクトリ構造の一覧(GIGAZINE

  • FHSにおけるディレクトリ構成

  • 第2回 各ディレクトリの役割を知ろう(ルートディレクトリ編)

  • 第3回 各ディレクトリの役割を知ろう(サブディレクトリ編)


  • WBEL及びCentOSのファイルシステムの構造




Popular posts from this blog

How to reconfigure Docker Trusted Registry 2.x.x to use CEPH FS mount instead of NFS and other traditional...

is 'sed' thread safe

How to make a Squid Proxy server?