Filesystem Hierarchy Standard(ファイルシステム・ハイアラーキー・スタンダード、FHS、ファイルシステム階層標準)は、Linuxを含むUnix系オペレーティングシステム (OS) での主なディレクトリとその内容を定めたものである。大部分において、BSD系のディレクトリ階層を基にして拡張し定式化している。

主要ソフトウェアおよびハードウェアベンダーからなる非営利組織Linux Foundationが保守管理しており、HP、レッドハット、IBM、デルといったベンダーが参加している。

2020年11月 (2020-11)現在の最新版は3.0で、2015年6月3日に発表された。

## 概要

多くのLinuxディストリビューションはFHS準拠を方針として宣言し、FHSにしたがっている。

もともと、UNIXやUnix系OSには、`/etc`や`/bin`や`/usr`などごく基本的な部分においてはほぼ共通である他は、緩い慣習と、それぞれの主要な開発元によるもう少し強い(たとえば、プロプライエタリなバイナリのみが提供されるプログラムの中にハードコードされているなどといったことがあると、変則的な環境での運用は面倒である)仕様などがあった。例えば、hier(7)で示されるファイルシステムのレイアウトはVersion 7 Unix(1979)から存在し、その他にはSunOSのfilesystem(7)、その後継であるSolarisのfilesystem(5)もある。

最近のLinuxディストリビューションには仮想ファイルシステムとしての`/sys`ディレクトリがあり(sysfs、`/proc`の場合はprocfs)、それを使ってシステムに接続しているデバイスの設定変更が可能である。

GoboLinuxやSyllable ServerといったLinuxシステムはFHSとは全く異なったファイルシステム階層を採用している。

## 歴史

ファイルシステム階層の標準化は、Linuxのファイルおよびディレクトリ構造を再構成する試みとして1993年8月に始まった。FSSTND(Filesystem Standard)というLinux上のファイルシステム階層標準が 1994年2月14日にリリースされ、1994年10月9日と1995年3月28日に改版されている。

1996年初頭、FSSTNDをLinuxだけでなく他のUnix系システムも含めた包括的なものとする作業が、BSD開発コミュニティからも参加者を迎えて行われた。結果としてUnix系システムで広く問題となっていた様々な事柄を解決するために集中することとなった。そのような対象範囲の拡大過程でこの標準の名称がFilesystem Hierarchy Standard(略称:FHS)となった。

### リリース履歴

|  | 意味 |
| --- | --- |
| 赤 | 古い標準/ドラフト版。既にサポートされていない。 |
| 黄 | 古い標準。サポート中。 |
| 緑 | 現行標準。 |
| 青 | 将来のドラフト版 |

| バージョン | リリース日 | 注釈 |
| --- | --- | --- |
| v1.0 | 1994-02-14 | FSSTND |
| v1.1 | 1994-10-09 | FSSTND |
| v1.2 | 1995-03-28 | FSSTND |
| v2.0 | 1997-10-26 | FHS 2.0はFSSTND 1.2の直接の後継。標準の名称がFilesystem Hierarchy Standardに変更された。 |
| v2.1 | 2000-04-12 | FHS |
| v2.2 | 2001-05-23 | FHS |
| v2.3 | 2004-01-29 | FHS |
| v3.0 | 2015-05-18 | FHS |
|

## ディレクトリ構造

物理的には別々のデバイスにあるとしても、全てのファイルとディレクトリはルートディレクトリ(`/`)の下に置かれる。一部のディレクトリは特定のサブシステム(X Window Systemなど)がインストールされないと作成されないことに注意する必要がある。

これらのディレクトリの多くはあらゆるUnix系オペレーティングシステムに存在し、だいたい同じような使われ方をしている。しかし、ここでの説明はFHS特有のものであって、Linux以外のプラットフォームにも適用可能とは言えない。

| ディレクトリ | 説明 |
| --- | --- |
| `/` | ファイルシステム階層全体の第一階層。ルートディレクトリ。 |
| `/bin` | シングルユーザモードで必要となる一般ユーザー向けの基本コマンドの実行ファイル (binaries)。例えばcat、ls、cpなど。 |
| `/boot` | ブートローダー (boot loader) 関連のファイル群。例えば、カーネルや initrd(初期RAMディスク)。別パーティションにする事もある。 |
| `/dev` | 基本デバイス(device)。例えば、`/dev/null`など。 |
| `/etc` | システム全体に関わる固有設定ファイル群。  ディレクトリ名自体の意味については議論がある。初期のベル研究所のUNIX実装文書では、/etc は単に「その他 = etcetera」のディレクトリだった。そのため他のディレクトリにそぐわないファイルは何でもこのディレクトリに置いていた(ただし、FHSでは /etc を静的設定ファイル用でバイナリを置かないという制限を設けている)。今では様々なディレクトリ名の後付解釈が行われており、バクロニムとして "Editable Text Configuration" や "Extended Tool Chest" と解釈する例もある。 |
| `/etc/opt` | `/opt/`のための設定ファイル群。 |
| `/etc/X11` | X Window System, version 11 用の設定ファイル群。 |
| `/etc/sgml` | SGML の設定ファイル群。 |
| `/etc/xml` | XML の設定ファイル群。 |
| `/home` | ユーザーの ホームディレクトリ (home directory) 群。セーブファイル、個人用設定など。別パーティションとすることが多い。 |
| `/lib` | `/bin/` や `/sbin/` にある実行ファイルの基本となるライブラリ (library) 群。 |
| `/lib<qual>` | 命令セットの32ビット版と64ビット版をサポートするシステムなど、複数の実行コード形式をサポートするシステムで使用される。 例: `lib32`、`lib64` このようなディレクトリは必須ではないが、存在する場合はいくつかの要件がある。 |
| `/media` | CD-ROMなどのリムーバブル媒体 (media) のマウントポイント(FHS-2.3 で追加) |
| `/mnt` | ファイルシステムの一時マウントポイント (mount) |
| `/opt` | オプション (option) のアプリケーションソフトウェアパッケージのインストール用基本的に/usr/localの構成に従わないパッケージの配置に使用するが、読み取り専用のパッケージのみを配置する必要があり、 読み取り専用のパーティションとしてmountすることもできる。  作業ファイルなど書き換えが発生するファイルを含んだパッケージは/var/optに配置する必要がある。  パッケージ名には決まりがあり、下記の名前は使用できない。  `/opt/bin`  `/opt/doc`  `/opt/include`  `/opt/info`  `/opt/lib`  `/opt/man`  /optの配下に配置できるディレクトリーにはLANANA名とパッケージ名(その他)という2種類がある。  種類に応じて/optを参照するプログラムの参照先変わるので注意する必要がある。  例えば、パッケージ名の場合、必要に応じて下記のディレクトリーを用意する必要がある。  /opt/<package>/bin  /opt/<package>/share/man |
| `/proc` | カーネルやプロセス (process) の状態に関する情報を主にテキストで示す仮想ファイルシステム(例えば、実行時間やネットワークなど) 用。procfsのマウントポイント。 |
| `/root` | rootユーザのホームディレクトリ。 |
| `/run` | 実行時の可変データ。FHS3.0より新設。 |
| `/sbin` | システム管理系コマンドの実行ファイル群(例えば、init、ip、mount)。(system binaries) |
| `/srv` | システムによって提供された (served) サイト固有のデータ |
| `/sys` | デバイス、ドライバ、および一部のカーネル機能に関する情報が含まれている。 |
| `/tmp` | 一時ファイル置場 (temporary files)。/var/tmp も参照されたい。再起動時に内容を保持しない。 再起動しない場合も一定期間経過し未使用な状態であるとOSの設定によりファイルが消える。 |
| `/usr` | 大部分のマルチユーザ(全ユーザのための)ユーティリティとアプリケーションを格納する。ホスト固有の情報は`/etc`に、時間の経過に伴い変化する情報は`/var`に保存される。共有可能でリードオンリーのデータであるべき。この事は `/usr` がFHS準拠の様々なホスト間で共有可能であるべき事を意味しており、書き込みができないようにしなければいけない。ファイルシステムで二番目に主要なセクションなどとも言われる。「USeR」の略だが、「User Services and Routines の略」であるとするまことしやかな説が1980年代後半頃から広まっている。 |
| `/usr/bin` | 一般ユーザ向けだが基本的ではないコマンドの実行ファイル(シングルユーザモードで必要としない)。 |
| `/usr/include` | 標準 includeファイル群 |
| `/usr/lib` | `/usr/bin/` や `/usr/sbin/` にある実行ファイルの基本となるライブラリ (library) 群。 |
| `/usr/local` | ホスト固有のローカル (local) データを格納する。現在はmake installなどpackage manager以外でインストールしたときに/usr代わりのインストール先として使うことを目的としており、/usrと同様サブディレクトリ―として `bin/`、`lib/`、`share/` などを持つ。 それぞれのサブディレクトリ―には/binや/usr/bin同様環境変数に登録されているのが一般的で、その他の環境変数に登録されているディレクトリーと同様、ファイルを参照するときにファイルパスを省略できる。 /usr/localの直下にはOSインストール時に作成されているディレクトリー以外は追加してはならない。これは、/usr/localが/usrの代わりであるためである。/usr/localの構成に従わないパッケージは/optに配置する必要がある。/usr/localはOSのバージョン更新後もそのまま使うことができるが、FHSに従わず/usr/local直下に作成したディレクトリーはOSが作成するディレクトリーと干渉する恐れがある。 |
| `/usr/sbin` | 基本的でないシステム実行ファイル群。例えば、各種ネットワークサービス用デーモンなど。 |
| `/usr/share` | アーキテクチャに依存しない共有 (shared) データ |
| `/usr/src` | ソースコード (Source code)。例えば、カーネルのソースコードとそのヘッダファイル群など。 |
| `/usr/X11R6` | X Window System, Version 11 Release 6 |
| `/var` | 可変 (Variable) なファイル群。内容が常に変化するようなファイル群を格納する。例えば、ログ、スプール、一時的電子メールファイルなど。別パーティションとすることもある。 |
| `/var/cache` | アプリケーションのキャッシュデータ。I/Oや計算などで作られた、再生成には時間がかかるデータ。 |
| `/var/lib` | 状態情報。プログラムの実行によって更新された永続性データなど。例えばデータベース、パッケージングシステムのメタデータなど。 |
| `/var/lock` | ロック(Lock)ファイル群。使用中リソースを保持するファイル。 |
| `/var/log` | ログ(Log)ファイル。各種ログ。 |
| `/var/mail` | ユーザーのメールボックス(mail-box) |
| `/var/run` | 最近のブート以降の走行中(runing)システムに関する情報。例えば現在ログイン中のユーザー、走行中のデーモンなど。FHS3.0 では /var/run は /run に置き換えられる。システムは後方互換性のために /var/run を提供するか、/var/run から /run へのシンボリックリンクを提供しなければならない。 |
| `/var/spool` | 処理待ち状態のタスクのスプール(spool)。例えばプリントキュー、未読メールなど。 |
| `/var/spool/mail` | 互換のために残された、かつてのユーザーのメールボックス(mail-box)の場所。 |
| `/var/tmp` | 一時ファイル置場 (Temporary files)。 /tmp と異なり、再起動しても内容が失われることはない。 ただし一定期間経過し未使用な状態であるとOSの設定によりファイルが消える。 |
|