Filesystem Hierarchy Standard

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

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

の最新版は3.0で、2015年6月3日に発表された。

 概要 
多くのLinuxディストリビューションはFHS準拠を方針として宣言し、FHSにしたがっているRed Hat reference guide on file system structureSuSE Linux Enterprise Server Administration, Novell authorized courseware, by Jason W. Eckert, Novell; Course Technology, 2006; ISBN 1-4188-3731-8, ISBN 978-1-4188-3731-0Debian policy on FHS complianceUbuntu Linux File system Tree Overview - Community Ubuntu Documentation。

もともと、UNIXやUnix系OSには、/etcや/binや/usrなどごく基本的な部分においてはほぼ共通である他は、緩い慣習と、それぞれの主要な開発元によるもう少し強い（たとえば、プロプライエタリなバイナリのみが提供されるプログラムの中にハードコードされているなどといったことがあると、変則的な環境での運用は面倒である）仕様などがあった。例えば、hier(7)で示されるファイルシステムのレイアウトはVersion 7 Unix（1979）から存在し、その他にはSunOSのfilesystem(7)SunOS 4.1.3 manual page for filesystem(7), dated 10 January 1988 (from the FreeBSD Man Pages library)、その後継である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日に改版されているThe Linux Filesystem Standard, by Garrett D'Amore, Page 45-47 in Linux Journal, July 1995, Issue 15。

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

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

 バージョン リリース日 注釈 v1.0 1994-02-14 FSSTNDhttps://www.ibiblio.org/pub/Linux/docs/fsstnd/old/fsstnd-1.0/ v1.1 1994-10-09 FSSTNDhttps://www.ibiblio.org/pub/Linux/docs/fsstnd/old/fsstnd-1.1/ v1.2 1995-03-28 FSSTNDhttps://www.ibiblio.org/pub/Linux/docs/fsstnd/old/ v2.0 1997-10-26 FHS 2.0はFSSTND 1.2の直接の後継。標準の名称がFilesystem Hierarchy Standardに変更されたFHS 2.0 Announcementhttps://www.ibiblio.org/pub/Linux/docs/fsstnd/。 v2.1 2000-04-12 FHSFHS 2.1 is done!FHS 2.1 is releasedFilesystem Hierarchy Standard - Version 2.1 v2.2 2001-05-23 FHSFilesystem Hierarchy Standard - Version 2.2 final v2.3 2004-01-29 FHSFilesystem Hierarchy Standard v3.0 2015-05-18 FHS

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

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

ディレクトリ説明/ファイルシステム階層全体の第一階層。ルートディレクトリ。 /binで必要となる一般ユーザー向けの基本コマンドの実行ファイル (binaries)。例えばcat、ls、cpなど。 /bootブートローダー (boot loader) 関連のファイル群。例えば、カーネルや initrd（初期RAMディスク）。別パーティションにする事もあるブートローダが非対応のパーティション（例:GRUBを使用する場合のF2FS）や、BIOSに容量の壁がある場合など。 /dev基本デバイス(device)。例えば、:/dev/nullなど。 /etcシステム全体に関わる固有設定ファイル群。
ディレクトリ名自体の意味については議論がある。初期のベル研究所のUNIX実装文書では、/etc は単に「その他 = etcetera」のディレクトリだった。そのため他のディレクトリにそぐわないファイルは何でもこのディレクトリに置いていた（ただし、FHSでは /etc を静的設定ファイル用でバイナリを置かないという制限を設けている）/etc : Host-specific system configuration Filesystem Hierarchy Standard。今では様々なディレクトリ名の後付解釈が行われており、バクロニムとして "Editable Text Configuration" や "Extended Tool Chest" と解釈する例もあるDefine - /etc?, Posted by Cliff,  March 03 2007 - Slashdot。 /etc/opt /opt/のための設定ファイル群。 /etc/X11X Window System, version 11 用の設定ファイル群。 /etc/sgmlSGML の設定ファイル群。 /etc/xmlXML の設定ファイル群。 /homeユーザーの ホームディレクトリ (home directory) 群。セーブファイル、個人用設定など。別パーティションとすることが多い。 /lib/bin/ や /sbin/ にある実行ファイルの基本となるライブラリ (library) 群。 /lib<qual>命令セットの32ビット版と64ビット版をサポートするシステムなど、複数の実行コード形式をサポートするシステムで使用される。例: lib32、lib64このようなディレクトリは必須ではないが、存在する場合はいくつかの要件がある。 /mediaCD-ROMなどのリムーバブル媒体 (media) のマウントポイント（FHS-2.3 で追加） /mntファイルシステムの一時マウントポイント (mount) /optオプション (option) のアプリケーションソフトウェアパッケージのインストール用https://www.pathname.com/fhs/pub/fhs-2.3.html#OPTADDONAPPLICATIONSOFTWAREPACKAGES基本的に/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のマウントポイント。 /rootrootユーザのホームディレクトリ。 /run実行時の可変データ。FHS3.0より新設。 /sbinシステム管理系コマンドの実行ファイル群(例えば、init、ip、mount)。(system binaries) /srvシステムによって提供された (served) サイト固有のデータ /sysデバイス、ドライバ、および一部のカーネル機能に関する情報が含まれている。 /tmp一時ファイル置場 (temporary files)。/var/tmp も参照されたい。再起動時に内容を保持しない。https://www.pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES
再起動しない場合も一定期間経過し未使用な状態であるとOSの設定によりファイルが消える。https://www.itmedia.co.jp/help/tips/linux/l0609.html /usr大部分のマルチユーザ（全ユーザのための）ユーティリティとアプリケーションを格納する。ホスト固有の情報は/etcに、時間の経過に伴い変化する情報は/varに保存される。共有可能でリードオンリーのデータであるべき。この事は /usr がFHS準拠の様々なホスト間で共有可能であるべき事を意味しており、書き込みができないようにしなければいけない例えば、複数のディスクレスワークステーションがファイルサーバの同一のディレクトリツリーを共有する、といった運用が想定されている。。ファイルシステムで二番目に主要なセクションなどとも言われる。「USeR」の略だが、「User Services and Routines の略」であるとするまことしやかな説が1980年代後半頃から広まっているこの説の広まった経路は不明である。1980年代の情報が由来である一例としては『UNIX 用語 由来/読み方辞書』に “米国のユーザグループ UniForum が発行している機関誌 CommUNIXations(May/ June 1989) からの転載ということで、 JUS の /etc/wall No.8/1990/May に載っていた 「UNIX Trivia -- UNIX に関するクイズ100問」によると” として「"User Services and Routines" の略」という説が載せられている。UNIXではなく、RT-11のマニュアルに「User Service Routine (USR)」とあるため、それとの混同の可能性が指摘されている（ http://blog.bitmeister.jp/?p=2516 ）。。 /usr/bin一般ユーザ向けだが基本的ではないコマンドの実行ファイル（で必要としない）。 /usr/include標準 includeファイル群 /usr/lib/usr/bin/ や /usr/sbin/ にある実行ファイルの基本となるライブラリ (library) 群。 /usr/localホスト固有のローカル (local) データを格納する。歴史的にもFHS標準においても、/usr/local/ はローカルホストで格納すべきデータのためにある（/usr/がネットワークをはさんで共有可能であったのとは対照的である）。多くの場合 /usr/local/ はOSのディストリビューションには含まれないソフトウェアやデータをインストールするのに使われてきた（逆に言えば、/usr/ には標準のOSディストリビューションに含まれるソフトウェアやデータのみを格納すべきである）。これはデファクトスタンダードだが、FHSは今のところこれを採用していない。現在は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/X11R6X 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 へのシンボリックリンクを提供しなければならない5.13. /var/run : Run-time variable data。 /var/spool処理待ち状態のタスクのスプール(spool)。例えばプリントキュー、未読メールなど。 /var/spool/mail互換のために残された、かつてのユーザーのメールボックス(mail-box)の場所。 /var/tmp一時ファイル置場 (Temporary files)。 /tmp と異なり、再起動しても内容が失われることはない。https://www.pathname.com/fhs/pub/fhs-2.3.html#VARTMPTEMPORARYFILESPRESERVEDBETWEE
ただし一定期間経過し未使用な状態であるとOSの設定によりファイルが消える。

 脚注 

 関連項目 
 Linux Standard Base

 外部リンク 
 lsb:fhs [Wiki]  at The Linux Foundation
 FHS Referenced Specifications
 Home of the FHS standard – FHSの旧ウェブサイト
 objectroot – オブジェクト指向設計の原理に基づいた新たなファイルシステム階層の提案
 Fortune Cookies through the /proc Filesystem

Category:OSのファイルシステム
Category:工業規格
Category:UNIX
Category:システム管理