

Unixおよびそれに触発されたオペレーティングシステムでは、ファイルシステムはオペレーティングシステムの中心的なコンポーネントと見なされています。[ 1 ]また、ファイルシステムは、1969年にケン・トンプソンによって設計および実装されたシステムの最初の部分の1つでもありました。[ 2 ]
他のオペレーティングシステムと同様に、ファイルシステムは情報の保存と検索、そしてプロセス間通信の形態の一つを提供します。これは、伝統的にUnixシステムを構成する多数の小さなプログラムがファイルに情報を保存し、他のプログラムがそれらを読み取ることができるというものです。ただし、第3版以降、パイプがこの役割を補完するようになりました。また、ファイルシステムは、端末、プリンタ、マウスへのエントリポイントとなる、いわゆるデバイスファイルを通じて他のリソースへのアクセスも提供します。
この記事の残りの部分では、オリジナルの Unix オペレーティング システムとその類似の多くのオペレーティング システムの両方を指す総称としてUnixを使用します。
ファイルシステムは、1 つのルートディレクトリ ツリーとして表示されます。[ 1 ]ディスク パーティション、リムーバブル メディア、ネットワーク共有などの個別のボリュームを個別のツリーとしてアドレス指定する代わりに、これらのボリュームをディレクトリにマウントすると、そのボリュームのファイルシステム ツリーが、より大きなツリー内のそのディレクトリとして表示されます。[ 1 ]ツリー全体のルートは で示されます/。
オリジナルのベル研究所Unixでは、2枚のディスク構成が一般的で、1枚目のディスクにはスタートアッププログラムが、2枚目のディスクにはユーザーファイルとプログラムが保存されていました。この2枚目のディスクはusr、1枚目のディスクと同じ名前の空ディレクトリにマウントされ、2枚のディスクは1つのファイルシステムとして認識され、2枚目のディスクの内容は で閲覧可能でした/usr。
Unixファイルシステムのディレクトリにはファイルは含まれません。その代わりに、ファイル名と、いわゆるinodeへの参照がペアになって含まれます。inodeにはファイルとそのメタデータ(所有者、権限、最終アクセス時刻など。ただし、ファイル名は含まれません)が含まれます。ファイルシステムでは複数の名前が同じファイルを参照することがあり、これはハードリンクと呼ばれます。[ 1 ]ハードリンクの数学的特性により、ファイルシステムは限定的な種類の有向非巡回グラフになりますが、ディレクトリは通常ハードリンクされていないため、依然としてツリーを形成します。(1969年に当初構想されたように、Unixファイルシステムは実際には、パス名ではなくディレクトリへのハードリンクがナビゲーションを提供する一般的なグラフとして使用される予定でした。[ 2 ])
オリジナルのUnixファイルシステムは、通常のファイル、ディレクトリ、デバイスファイルとも呼ばれる「特殊ファイル」の3種類のファイルをサポートしていました。[ 1 ] Berkeley Software Distribution (BSD)とSystem Vはそれぞれ、プロセス間通信に使用するファイルタイプを追加しました。BSDはソケットを追加し、[ 3 ] System VはFIFOファイルを追加しました。
BSDは、ファイルタイプの範囲にシンボリックリンク(しばしば「シンボリックリンク」と呼ばれる)を追加しました。シンボリックリンクは、他のファイルを参照するファイルであり、ハードリンクを補完します。 [ 3 ]シンボリックリンクはMulticsの同様の機能をモデルにしており、[ 4 ]ハードリンクとは異なり、ファイルシステムをまたがって存在し、その存在はターゲットオブジェクトに依存しません。他のUnixシステムでは、さらに多くのファイルタイプをサポートしている場合があります。[ 5 ]
プログラム、システム設定ファイル、ユーザーのホームディレクトリなど、特定の種類のファイルの配置には一定の規則があります。これらはUnixバージョン7以降、hier(7)マニュアルページで初めて文書化されました。 [ 6 ]その後のバージョン、派生版、クローン版でも、通常は同様のマニュアルページがあります。[ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ]
ディレクトリレイアウトの詳細は時代とともに変化してきました。ファイルシステムレイアウトはSingle UNIX仕様の一部ではありませんが、 System Vアプリケーションバイナリインターフェース、Intelバイナリ互換性標準、共通オペレーティングシステム環境、FreeDesktopのファイルシステム階層標準(FHS)など、その一部(一部)を標準化しようとする試みはいくつか存在します。[ 13 ]
以下は、Unix オペレーティング システム上のファイルの一般的な場所の概要です。
| ディレクトリまたはファイル | 説明 |
|---|---|
/ | スラッシュ/文字のみはファイルシステム ツリーのルートを示します。 |
| バイナリを表し、lsやなどの基本的なユーティリティが含まれています。これらは、 が別のファイルシステムである場合にcpをマウントし/usrたり、 がマウントできない場合にシングルユーザー(管理者)モードで実行したりするために/usr必要です。System V.4 では、これはへのシンボリックリンク/usr/binです。それ以外の場合は、ルートファイルシステム自体に配置する必要があります。 |
| ブートプロセスを正常に実行するために必要なすべてのファイルが含まれています。Research Unixでは、これはディレクトリではなく1つのファイルでした。[ 14 ]現在では、システムやブートローダーなどが別途要求しない限り、通常はルートファイルシステム自体に配置されます。 | |
| デバイスを表します。周辺デバイスと疑似デバイスのファイル表現が含まれます。参照:Linux Assigned Names and Numbers Authority。ルートファイルシステム自体に配置する必要があります。 | |
| システム全体の設定ファイルとシステムデータベースが含まれます。名前はet cetera [ 14 ]の略ですが、現在はより適切な拡張としてeditable- t ext- configurationsが使用されています。元々は、init、[ 6 ]などの「危険なメンテナンスユーティリティ」も含まれていましたが、これらは通常、または他の場所に移動されています/sbin。ルートファイルシステム自体に配置する必要があります。 |
| Linuxやその他のシステムでは、ユーザーのホームディレクトリが格納されます。Unixのオリジナルバージョンでは、ホームディレクトリは/usr代わりににありました。[ 15 ]一部のシステムでは、現在でも異なる場所が使用されているか、使用されていました。macOSではホームディレクトリはに/Users、古いバージョンのBSDではホームディレクトリはに/u、FreeBSDではホームディレクトリはにありました/usr/home。 |
| 本来必須のライブラリ:Cライブラリ( Fortranライブラリは除く) [ 14 ] 。最近のシステムでは、Linuxプログラムに必要な共有ライブラリ/bin、そして場合によってはロード可能なカーネルモジュール、デバイスドライバ、バイナリブロブが含まれる。Linuxディストリビューションには、マルチアーキテクチャサポートのための バリアント/lib32やが存在する場合がある。/lib64 |
| USB スティック、メディア プレーヤーなどのリムーバブル デバイスのデフォルトのマウント ポイントです。常識的に考えると、サブディレクトリがマウント ポイントであるディレクトリ自体は、ルート パーティション自体にあります。 |
| マウントの略。システム管理者が一時的なマウントポイントとしてよく使用する空のディレクトリ。常識的に考えて、マウントポイントとなるサブディレクトリを持つディレクトリ自体はルートパーティション自体にあります。 |
| ローカルにインストールされたソフトウェアが格納されます。System Vで開発されたもので、System Vにはソフトウェアをこのディレクトリ(パッケージごとに1つのサブディレクトリ)にインストールするパッケージマネージャが搭載されています。[ 16 ] |
| procfs仮想ファイルシステムは、プロセスに関する情報をファイルとして表示します。 |
| スーパーユーザー(root )、つまりシステム管理者のホームディレクトリです。このアカウントのホームディレクトリは通常、初期ファイルシステム上に存在します。そのため、特定のメンテナンス作業など、他のファイルシステムが利用できない状況が発生する場合に備えて、/home(別のファイルシステムのマウントポイントになっている可能性があります)には存在しません。このような状況は、例えばハードディスクドライブに障害が発生し、正常にマウントできない場合などに発生する可能性があります。 |
| 「システム(またはスーパーユーザー)バイナリ」の略で、システムの起動、保守、復旧に通常必要となる などの基本的なユーティリティが含まれていますinit。ルートパーティション自体に配置する必要があります。 |
| サーバーデータ(システムが提供するサービスのデータ)。 |
| 一部のLinuxディストリビューションでは、 にはハードウェアとオペレーティングシステムに関する情報を含むsysfs仮想ファイルシステムが含まれています。BSDシステムでは、通常、内のカーネルソースへのシンボリックリンク/usr/src/sysが含まれています。 |
| 再起動後も保持されないことが想定される一時ファイル用の場所です。多くのシステムでは、起動時にこのディレクトリをクリアするか、tmpfsを使用して実装しています。 |
| Research UnixとSystem VのUnixカーネル。[ 14 ] 3BSDに仮想メモリサポートが追加されたため、名前が変更されました。 /vmunix |
| Unix の最も初期のバージョンでは、/usrはユーザのホーム ディレクトリを保持するディレクトリであり、ディレクトリ名もそれを反映していました。[ 15 ] Research Unixの第 3 版(1973 年頃) までに、オペレーティング システムのプログラムが を含む 256K 固定ヘッド ドライブをオーバーフローした/binため、/usr/binを含むディスク上に/usr、いくつかのコマンドを保持するディレクトリが作成されました。コマンドとユーザのホーム ディレクトリは両方とも 上にありました/usr。[ 17 ]/usr/libやなどの追加ディレクトリ/usr/tmpも の下に作成されました/usr。現在、 には、X Window System、ウィンドウ マネージャ、スクリプト言語などの、システムに重要ではない実行可能ファイル、ライブラリ、共有リソースが保持されています。古い Unix システムでは、ユーザのホーム ディレクトリが、それらのアイテムを含むディレクトリの横に 内に表示されることがあります。/usrシステムによっては、ユーザのホーム ディレクトリを 以外のディレクトリの下に移動しています/usr。 |
| システム全体で使用される開発ヘッダーを保存します。ヘッダーファイルは主にC#include言語のディレクティブによって使用されるため、このディレクトリの名前は歴史的にこの名前に由来しています。 |
| 内部または他の場所に保存されているプログラムに必要なライブラリとデータ ファイルを保存します/usr。 |
| ユーザーが直接実行するのではなく、他のプログラムによって実行されることを意図したプログラムが格納されます。例えば、Sendmail実行ファイルはこのディレクトリにあります。[ 18 ] 2011年までFHSには存在しませんでした。[ 19 ] Linuxディストリビューションは伝統的にこのディレクトリの内容を に移動しており/usr/lib、4.3BSDでも同じディレクトリに格納されていました。 |
| 構造は似ていますが、サブディレクトリはオペレーティングシステムの配布に含まれない追加ファイル(カスタムプログラムやBSD Portsコレクション/usrのファイルなど)に使用されます。通常、またはなどのサブディレクトリがあります。 /usr/local/lib/usr/local/bin |
| アーキテクチャに依存しないプログラムデータ。Linuxおよび最近のBSD派生OSでは、このディレクトリには、以前のバージョンでは直下に存在していたmanmanページ/usrなどのサブディレクトリが含まれます。 |
| 変数を表します。システム上のユーザーに送信される電子メールやプロセスIDロックファイルなど、特にサイズが頻繁に変更される可能性のあるファイルを格納する場所です。 |
| システム ログ ファイルが含まれます。 |
| すべての受信メールが保存される場所です。ユーザー( 以外root)は自分のメールにのみアクセスできます。多くの場合、このディレクトリはへのシンボリックリンク/var/spool/mailです。 |
| スプールディレクトリ。印刷ジョブ、メールスプール、その他のキューに入れられたタスクが含まれます。 |
| いくつかのプログラムのコンパイルされていないソースコードがある場所。 |
| この/var/tmpディレクトリは、システムの再起動間で保存する必要がある一時ファイルの場所です。 |