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

Filesystem Hierarchy Standard
開発者Linux Foundation
初版1994年2月14日 (30年前) (1994-02-14)
最新版
3.0
(2015年6月3日 (8年前) (2015-06-03))
ウェブサイトhttps://refspecs.linuxfoundation.org/fhs.shtml
www.pathname.com/fhs/ (Historical)

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

2020年11月 (2020-11)現在の最新版は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)から存在し、その他にはSunOSfilesystem(7)[7]、その後継であるSolarisfilesystem(5)[8]もある。

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

GoboLinuxSyllable 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)。例えばcatlscpなど。
/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ビット版をサポートするシステムなど、複数の実行コード形式をサポートするシステムで使用される。
例: lib32lib64
このようなディレクトリは必須ではないが、存在する場合はいくつかの要件がある。

/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]

脚注 編集

  1. ^ FHS 3.0 Released” (2015年6月3日). 2016年4月14日閲覧。
  2. ^ Red Hat reference guide on file system structure
  3. ^ 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
  4. ^ Debian policy on FHS compliance
  5. ^ Ubuntu Linux File system Tree Overview - Community Ubuntu Documentation
  6. ^ hier(7) – FreeBSD Miscellaneous Information Manual Pages (en)
  7. ^ SunOS 4.1.3 manual page for filesystem(7), dated 10 January 1988 (from the FreeBSD Man Pages library)
  8. ^ filesystem(5) – Solaris11.4マニュアルページ「ユーザーコマンド」章(日本語)
  9. ^ The Linux Filesystem Standard, by Garrett D'Amore, Page 45-47 in Linux Journal, July 1995, Issue 15
  10. ^ http://www.ibiblio.org/pub/Linux/docs/fsstnd/old/fsstnd-1.0/
  11. ^ http://www.ibiblio.org/pub/Linux/docs/fsstnd/old/fsstnd-1.1/
  12. ^ http://www.ibiblio.org/pub/Linux/docs/fsstnd/old/
  13. ^ FHS 2.0 Announcement
  14. ^ http://www.ibiblio.org/pub/Linux/docs/fsstnd/
  15. ^ FHS 2.1 is done!
  16. ^ FHS 2.1 is released
  17. ^ Filesystem Hierarchy Standard - Version 2.1
  18. ^ Filesystem Hierarchy Standard - Version 2.2 final
  19. ^ Filesystem Hierarchy Standard
  20. ^ Filesystem Hierarchy Standard”. The Linux Foundation (2015年3月19日). 2015年5月20日閲覧。
  21. ^ ブートローダが非対応のパーティション(例:GRUBを使用する場合のF2FS)や、BIOSに容量の壁がある場合など
  22. ^ 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 
  23. ^ /etc : Host-specific system configuration Filesystem Hierarchy Standard
  24. ^ Define - /etc?, Posted by Cliff, March 03 2007 - Slashdot
  25. ^ a b c d e https://www.pathname.com/fhs/pub/fhs-2.3.html#OPTADDONAPPLICATIONSOFTWAREPACKAGES
  26. ^ /sys : Kernel and system information virtual filesystem”. Filesystem Hierarchy Standard 3.0. 2017年6月4日閲覧。
  27. ^ https://www.pathname.com/fhs/pub/fhs-2.3.html#TMPTEMPORARYFILES
  28. ^ a b https://www.itmedia.co.jp/help/tips/linux/l0609.html
  29. ^ 例えば、複数のディスクレスワークステーションがファイルサーバの同一のディレクトリツリーを共有する、といった運用が想定されている。
  30. ^ unix/PreliminaryUnixImplementationDocument_Jun72.pdf at a090f614e4b7e68dcb0eeaa0a71abcbb2bc15cd4 · qrush/unix” (英語). GitHub. Preliminary Release of UNIX Implementation Document (1972年9月14日). 2023年7月8日閲覧。 “/ user directory […] Section E.0 Page 9”
  31. ^ 1972年9月の日付があるベル研の内部資料(「PreliminaryUnixImplementationDocument_Jun72.pdf」というファイル名でネットに流通している)[30]の中にあるソースコード中にあるファイルシステムの雛形を作るためのデータ記述のコメント(資料の14枚目先頭部)に「user directory」とあるので、本来は「USeR」の略であったことは確かである。
  32. ^ この説の広まった経路は不明である。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 )。
  33. ^ 歴史的にもFHS標準においても、/usr/local/ はローカルホストで格納すべきデータのためにある(/usr/がネットワークをはさんで共有可能であったのとは対照的である)。多くの場合 /usr/local/ はOSのディストリビューションには含まれないソフトウェアやデータをインストールするのに使われてきた(逆に言えば、/usr/ には標準のOSディストリビューションに含まれるソフトウェアやデータのみを格納すべきである)。これはデファクトスタンダードだが、FHSは今のところこれを採用していない。
  34. ^ /usr/local”. 2020年12月24日閲覧。
  35. ^ No other directories, except those listed below, may be in /usr/local after first installing a FHS-compliant system.”. 2020年12月24日閲覧。
  36. ^ 5.13. /var/run : Run-time variable data
  37. ^ https://www.pathname.com/fhs/pub/fhs-2.3.html#VARTMPTEMPORARYFILESPRESERVEDBETWEE

関連項目 編集

外部リンク 編集