Filesystem Hierarchy Standard(ファイルシステム・ハイアラーキー・スタンダード、FHS、ファイルシステム階層標準)は、Linuxを含むUnix系オペレーティングシステム (OS) での主なディレクトリとその内容を定めたものである。大部分において、BSD系のディレクトリ階層を基にして拡張し定式化している。
主要ソフトウェアおよびハードウェアベンダーからなる非営利組織Linux Foundationが保守管理しており、HP、レッドハット、IBM、デルといったベンダーが参加している。
2020年11月 (2020-11)現在[update]の最新版は3.0で、2015年6月3日に発表された[1]。
概要
多くのLinuxディストリビューションはFHS準拠を方針として宣言し、FHSにしたがっている[2][3][4][5]。
もともと、UNIXやUnix系OSには、/etc
や/bin
や/usr
などごく基本的な部分においてはほぼ共通である他は、緩い慣習と、それぞれの主要な開発元によるもう少し強い(たとえば、プロプライエタリなバイナリのみが提供されるプログラムの中にハードコードされているなどといったことがあると、変則的な環境での運用は面倒である)仕様などがあった。例えば、hier(7)で示されるファイルシステムのレイアウト[6]はVersion 7 Unix(1979)から存在し、その他にはSunOSのfilesystem(7)[7]、その後継であるSolarisのfilesystem(5)[8]もある。
最近の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日に改版されている[9]。
1996年初頭、FSSTNDをLinuxだけでなく他のUnix系システムも含めた包括的なものとする作業が、BSD開発コミュニティからも参加者を迎えて行われた。結果としてUnix系システムで広く問題となっていた様々な事柄を解決するために集中することとなった。そのような対象範囲の拡大過程でこの標準の名称がFilesystem Hierarchy Standard(略称:FHS)となった。
リリース履歴
|
意味
|
赤
|
古い標準/ドラフト版。既にサポートされていない。
|
黄
|
古い標準。サポート中。
|
緑
|
現行標準。
|
青
|
将来のドラフト版
|
バージョン
|
リリース日
|
注釈
|
v1.0
|
1994-02-14
|
FSSTND[10]
|
v1.1
|
1994-10-09
|
FSSTND[11]
|
v1.2
|
1995-03-28
|
FSSTND[12]
|
v2.0
|
1997-10-26
|
FHS 2.0はFSSTND 1.2の直接の後継。標準の名称がFilesystem Hierarchy Standardに変更された[13][14]。
|
v2.1
|
2000-04-12
|
FHS[15][16][17]
|
v2.2
|
2001-05-23
|
FHS[18]
|
v2.3
|
2004-01-29
|
FHS[19]
|
v3.0
|
2015-05-18
|
FHS[20]
|
ディレクトリ構造
物理的には別々のデバイスにあるとしても、全てのファイルとディレクトリはルートディレクトリ(/
)の下に置かれる。一部のディレクトリは特定のサブシステム(X Window Systemなど)がインストールされないと作成されないことに注意する必要がある。
これらのディレクトリの多くはあらゆるUnix系オペレーティングシステムに存在し、だいたい同じような使われ方をしている。しかし、ここでの説明はFHS特有のものであって、Linux以外のプラットフォームにも適用可能とは言えない。
ディレクトリ
|
説明
|
/
|
ファイルシステム階層全体の第一階層。ルートディレクトリ。
|
/bin
|
シングルユーザモード(英語版)で必要となる一般ユーザー向けの基本コマンドの実行ファイル (binaries)。例えばcat、ls、cpなど。
|
/boot
|
ブートローダー (boot loader) 関連のファイル群。例えば、カーネルや initrd(初期RAMディスク)。別パーティションにする事もある[21]。
|
/dev
|
基本デバイス(device)。例えば、/dev/null など。
|
/etc
|
システム全体に関わる固有設定ファイル群。
ディレクトリ名自体の意味については議論がある。初期のベル研究所のUNIX実装文書では、/etc は単に「その他 = etcetera」のディレクトリだった[22]。そのため他のディレクトリにそぐわないファイルは何でもこのディレクトリに置いていた(ただし、FHSでは /etc を静的設定ファイル用でバイナリを置かないという制限を設けている)[23]。今では様々なディレクトリ名の後付解釈が行われており、バクロニムとして "Editable Text Configuration" や "Extended Tool Chest" と解釈する例もある[24]。
|
/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) のアプリケーションソフトウェアパッケージのインストール用[25]基本的に/usr/localの構成に従わないパッケージの配置に使用するが、読み取り専用のパッケージのみを配置する必要があり、
読み取り専用のパーティションとしてmountすることもできる。[25]
作業ファイルなど書き換えが発生するファイルを含んだパッケージは/var/optに配置する必要がある。[25]
パッケージ名には決まりがあり、下記の名前は使用できない。[25]
/opt/bin
/opt/doc
/opt/include
/opt/info
/opt/lib
/opt/man
/optの配下に配置できるディレクトリーにはLANANA名とパッケージ名(その他)という2種類がある。
種類に応じて/optを参照するプログラムの参照先変わるので注意する必要がある。
例えば、パッケージ名の場合、必要に応じて下記のディレクトリーを用意する必要がある。[25]
/opt/<package>/bin
/opt/<package>/share/man
|
/proc
|
カーネルやプロセス (process) の状態に関する情報を主にテキストで示す仮想ファイルシステム(例えば、実行時間やネットワークなど) 用。procfsのマウントポイント。
|
/root
|
rootユーザのホームディレクトリ。
|
/run
|
実行時の可変データ。FHS3.0より新設。
|
/sbin
|
システム管理系コマンドの実行ファイル群(例えば、init、ip、mount)。(system binaries)
|
/srv
|
システムによって提供された (served) サイト固有のデータ
|
/sys
|
デバイス、ドライバ、および一部のカーネル機能に関する情報が含まれている[26]。
|
/tmp
|
一時ファイル置場 (temporary files)。/var/tmp も参照されたい。再起動時に内容を保持しない。[27]
再起動しない場合も一定期間経過し未使用な状態であるとOSの設定によりファイルが消える。[28]
|
/usr
|
大部分のマルチユーザ(全ユーザのための)ユーティリティとアプリケーションを格納する。ホスト固有の情報は/etc に、時間の経過に伴い変化する情報は/var に保存される。共有可能でリードオンリーのデータであるべき。この事は /usr がFHS準拠の様々なホスト間で共有可能であるべき事を意味しており、書き込みができないようにしなければいけない[29]。ファイルシステムで二番目に主要なセクションなどとも言われる。「USeR」の略[31]だが、「User Services and Routines の略」であるとするまことしやかな説が1980年代後半頃から広まっている[32]。
|
/usr/bin
|
一般ユーザ向けだが基本的ではないコマンドの実行ファイル(シングルユーザモード(英語版)で必要としない)。
|
/usr/include
|
標準 includeファイル群
|
/usr/lib
|
/usr/bin/ や /usr/sbin/ にある実行ファイルの基本となるライブラリ (library) 群。
|
/usr/local
|
ホスト固有のローカル (local) データを格納する。[33]現在はmake installなどpackage manager以外でインストールしたときに/usr代わりのインストール先として使うことを目的としており、/usrと同様サブディレクトリ―として bin/ 、lib/ 、share/ などを持つ。[34] それぞれのサブディレクトリ―には/binや/usr/bin同様環境変数に登録されているのが一般的で、その他の環境変数に登録されているディレクトリーと同様、ファイルを参照するときにファイルパスを省略できる。 /usr/localの直下にはOSインストール時に作成されているディレクトリー以外は追加してはならない。[35]これは、/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 へのシンボリックリンクを提供しなければならない[36]。
|
/var/spool
|
処理待ち状態のタスクのスプール(spool)。例えばプリントキュー、未読メールなど。
|
/var/spool/mail
|
互換のために残された、かつてのユーザーのメールボックス(mail-box)の場所。
|
/var/tmp
|
一時ファイル置場 (Temporary files)。 /tmp と異なり、再起動しても内容が失われることはない。[37]
ただし一定期間経過し未使用な状態であるとOSの設定によりファイルが消える。[28]
|
脚注
- ^ “FHS 3.0 Released” (June 3, 2015). 2016年4月14日閲覧。
- ^ Red Hat reference guide on file system structure
- ^ SuSE 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-0
- ^ Debian policy on FHS compliance
- ^ Ubuntu Linux File system Tree Overview - Community Ubuntu Documentation
- ^
hier(7)
– FreeBSD Miscellaneous Information Manual Pages (en)
- ^ SunOS 4.1.3 manual page for filesystem(7), dated 10 January 1988 (from the FreeBSD Man Pages library)
- ^
filesystem(5)
– Solaris11.4マニュアルページ「ユーザーコマンド」章(日本語)
- ^ The Linux Filesystem Standard, by Garrett D'Amore, Page 45-47 in Linux Journal, July 1995, Issue 15
- ^ http://www.ibiblio.org/pub/Linux/docs/fsstnd/old/fsstnd-1.0/
- ^ http://www.ibiblio.org/pub/Linux/docs/fsstnd/old/fsstnd-1.1/
- ^ http://www.ibiblio.org/pub/Linux/docs/fsstnd/old/
- ^ FHS 2.0 Announcement
- ^ http://www.ibiblio.org/pub/Linux/docs/fsstnd/
- ^ FHS 2.1 is done!
- ^ FHS 2.1 is released
- ^ Filesystem Hierarchy Standard - Version 2.1
- ^ Filesystem Hierarchy Standard - Version 2.2 final
- ^ Filesystem Hierarchy Standard
- ^ “Filesystem Hierarchy Standard”. The Linux Foundation (19 March 2015). 2015年5月20日閲覧。
- ^ ブートローダが非対応のパーティション(例:GRUBを使用する場合のF2FS)や、BIOSに容量の壁がある場合など
- ^ J. DeFelicc (1972-03-17). “E.0”. Preliminary Release of UNIX Implementation Document. p. 8. IMO.1-1. http://www.bitsavers.org/pdf/bellLabs/unix/PreliminaryUnixImplementationDocument_Jun72.pdf
- ^ /etc : Host-specific system configuration Filesystem Hierarchy Standard
- ^ Define - /etc?, Posted by Cliff, March 03 2007 - Slashdot
- ^ a b c d e https://www.pathname.com/fhs/pub/fhs-2.3.html#OPTADDONAPPLICATIONSOFTWAREPACKAGES
- ^ “/sys : Kernel and system information virtual filesystem”. Filesystem Hierarchy Standard 3.0. 4 June 2017閲覧。
- ^ https://www.pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES
- ^ a b https://www.itmedia.co.jp/help/tips/linux/l0609.html
- ^ 例えば、複数のディスクレスワークステーションがファイルサーバの同一のディレクトリツリーを共有する、といった運用が想定されている。
- ^ “unix/PreliminaryUnixImplementationDocument_Jun72.pdf at a090f614e4b7e68dcb0eeaa0a71abcbb2bc15cd4 · qrush/unix” (英語). GitHub. Preliminary Release of UNIX Implementation Document (14 Sep 1972). 2023年7月8日閲覧。 “/ user directory
[…]
Section E.0 Page 9”
- ^ 1972年9月の日付があるベル研の内部資料(「PreliminaryUnixImplementationDocument_Jun72.pdf」というファイル名でネットに流通している)[30]の中にあるソースコード中にあるファイルシステムの雛形を作るためのデータ記述のコメント(資料の14枚目先頭部)に「user directory」とあるので、本来は「USeR」の略であったことは確かである。
- ^ この説の広まった経路は不明である。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 )。
- ^ 歴史的にもFHS標準においても、
/usr/local/
はローカルホストで格納すべきデータのためにある(/usr/
がネットワークをはさんで共有可能であったのとは対照的である)。多くの場合 /usr/local/
はOSのディストリビューションには含まれないソフトウェアやデータをインストールするのに使われてきた(逆に言えば、/usr/
には標準のOSディストリビューションに含まれるソフトウェアやデータのみを格納すべきである)。これはデファクトスタンダードだが、FHSは今のところこれを採用していない。
- ^ “/usr/local”. 2020年12月24日閲覧。
- ^ “No other directories, except those listed below, may be in /usr/local after first installing a FHS-compliant system.”. 2020年12月24日閲覧。
- ^ 5.13. /var/run : Run-time variable data
- ^ https://www.pathname.com/fhs/pub/fhs-2.3.html#VARTMPTEMPORARYFILESPRESERVEDBETWEE
関連項目
外部リンク