FHS(Filesystem Hierarchy Standard) 3.0のまとめ

概要

今回はFHS3.0を一通り読んだので、主要なディレクトリとその役割をまとめていこうと思います。

FHSとは?

FHS(Filesystem Hierarchy Standard)とは、ディレクトリ構造の標準を定めた仕様書のことです。

主要なLinuxディストリビューションはFHSをベースにディレクトリやファイルを配置しています。

FHSのおかげで、新しくインストールするソフトウェアをどこに配置するべきかという疑問や、自分が探しているファイルがどこにあるのかといった疑問を解消することができます。

また、FHSでは以下の基準でディレクトリやファイルを配置します。

  • 共有可能 or 共有不可
  • 動的 or 静的

このように他のホストからも利用できるのかどうか、頻繁に変更されるのかどうかという観点から分類するわけです。例えば、共有可能で静的なものは/usrや/optディレクトリに配置します。

今回はFHSに載っている全てのディレクトリと役割をまとめているわけではなく、主要なものに絞っています。より詳しく知りたい方はFilesystem Hierarchy Standardを参考にしてください。

ルートファイルシステム

ルートファイルシステムは、Linuxのディレクトリ階層の中で最上位に位置します。FHSはルートを起点としたツリー構造で、次のように目的に応じたディレクトリが配置されます。

/bin

  • rootユーザと一般ユーザが利用できる基本的なコマンドが配置される
  • 緊急時のシステム保守(シングルユーザモード)でも使用可能
  • サブディレクトリの作成はダメ

/boot

  • 起動に必要な設定ファイルやカーネルイメージ等が配置される

/dev

  • ハードディスクやDVD-ROM等のデバイスファイル(特殊ファイル)が配置される

/etc

  • プログラムの操作や制御を行うための設定ファイルが配置される
  • 設定ファイルは静的なもの
  • 実行可能なバイナリであってはならない

/home

  • ユーザごとのホームディレクトリが配置される

/lib

  • 必要不可欠な共有ライブラリやカーネルモジュールが配置される
  • /bin、/sbin内のコマンド実行に必要なライブラリ
  • /bin、/sbin内のコマンドが必要としないライブラリは基本的に/usr/libへ

/lib<qual>

  • システム上のバイナリが32ビットor64ビットどちらをサポートするかにより区別される
  • /lib32と/lib64のどちらかが/libへのシンボリックリンクとなっている

/media

  • フロッピーディスク、CD-ROM等の書き換え可能な記録媒体をマウントするためのサブディレクトリが配置される

/mnt

  • システム管理者が一時的にファイルシステムをマウントする際に用いるディレクトリ
  • 動作中のプログラムに影響を与えるようなディレクトリの利用は避ける
  • インストール用プログラムで/mntを利用してはならない

/opt

  • 追加のソフトウェアパッケージが配置される
  • ディレクトリ名は/opt/<package>あるいは/opt/<provider>の形式
  • <package>はパッケージ自身の名前
  • <provider>はLANANA(Linux Assigned Name And Number Authority)に登録してある提供者名

/root

  • rootユーザ用のホームディレクトリ

/run

  • システム起動後の各種システム情報のデータが配置される
  • 特にPIDファイルの中身を見ることでプロセスのPIDを調べることができる

/sbin

  • システムの起動、回復、修復に必要となる実行ファイルが配置される
  • その他のコマンドは基本的に/binへ
  • システム管理者だけが使用するコマンドを新しく配置する場合は/usr/local/sbinへ

/srv

  • システムによって提供されるサービスのデータが配置される
  • ユーザが特定サービスのデータファイルを見つけやすくなる
  • サービスが必要とする、読み込み専用、書き込み可能なデータとスクリプトを配置する場所
  • 実際あまり使われていない

/tmp

  • 一時的なファイルが配置される
  • 全てのユーザが読み書き可能
  • /tmp以下のファイルやディレクトリはシステム起動時に削除されることが推奨される

/proc

  • カーネル内のデータへのインターフェースとなる仮想ファイルシステム
  • カーネルが認識しているハードウェア、プロセス等の情報を得ることができる
  • ファイルのように見えるだけで実際にはディスク上に存在しない

/sys

  • カーネル内のデータへのインターフェースとなる仮想ファイルシステム
  • /procはプロセス情報を、/sysはデバイス関連をメインに扱う傾向にある

/usrディレクトリ階層

/usrディレクトリは主要なコマンドやユーティリティなどが配置されます。次のように/usrディレクトリは細分化されています。

/usr/bin

  • ユーザが利用する主要なコマンドが配置されている
  • 緊急時のシステム保守(シングルユーザモード)で使用しないコマンド
  • パッケージ管理システムによって管理されるコマンド
  • サブディレクトリの作成はダメ

/usr/include

  • C言語で利用されるヘッダファイルが配置される

/usr/lib

  • プログラムが必要とするライブラリが配置される
  • /bin、/sbin内のコマンドが必要としないライブラリ
  • 32ビットor64ビットを区別する場合は/usr/lib<qual>の形式

/usr/libexec

  • ユーザが実行するコマンドによって、内部的に実行される補助コマンドが配置される

/usr/local

  • システム管理者がローカルにインストールしたソフトウェア(コマンド、ライブラリ、ドキュメント等)が配置される
  • ディレクトリ内はbin、sbin、lib、srcなどさらに細分化される
  • パッケージ管理システムによる勝手な上書きから守る

/usr/sbin

  • システム管理者が緊急時のシステム保守(シングルユーザモード)で使用しないコマンドが配置される
  • サブディレクトリの作成は禁止

/usr/share

  • 読み込み専用でアーキテクチャに依存しないファイルが配置される
  • 主にmanページやソフトウェアのドキュメント等

/usr/src

  • ソースコードを純粋に参照することを目的として使用する
  • 一般的にこのディレクトリ内でビルドすべきではない
  • ビルドする際は/usr/local/srcへ

/varディレクトリ階層

/varディレクトリ配下には頻繁に書き換えられるファイルが配置されます。次のように/varディレクトリ下は細分化されています。

/var/account

  • 動作中のアプリケーションが記録するログや複数のプロセスが用いるデータが配置される

/var/cache

  • アプリケーションのキャッシュデータが配置される

/var/crach

  • システムクラッシュ時のメモリやレジスタの情報を写し取ったデータ(ダンプデータ)が配置される

/var/games

  • /usr配下のgames関連のあらゆる可変データが配置される

/var/lib

  • プログラムの実行によって変更されたデータや特定のホスト情報に関わるデータが配置される

/var/lock

  • アプリケーションが排他制御を行うためのロックファイルが配置される

/var/log

  • システム上のあらゆるログが配置される

/var/mail

  • メールのスプールファイル(ファイル名は<ユーザ名>)が配置される

/var/opt

  • /optにインストールされた追加ソフトウェアが使用する可変データが配置される

/var/run

  • システム起動後の各種システム情報のデータが配置される
  • 特にPIDファイルの中身を見ることでプロセスのPIDを調べることができる

/var/spool

  • 何らかのプロセス処理待ちとなっているデータが配置される
  • データはプログラム、ユーザ、管理者によって利用予定となっているもの
  • 一般的に処理が終わった後はデータが削除される

/var/tmp

  • システム起動時の間に一時的にファイルやディレクトリを必要とするプログラムのために使用される
  • /tmpと同様にcronによって定期的に削除されるが、/tmpよりも保存期間が長い

/var/yp

  • NIS(ネットワーク情報サービス)で使用される可変データが配置される

最後に

FHSはこれまでLPICの勉強や様々な技術書を通して学習する機会がありました。

しかし実際にじっくりとFHSそのものをしっかりと読んだことがなかったので、今回興味本位で読んでまとめてみました。

個人的に興味深かったのは、/usr/libexecです。コマンドといっても内部で複数のコマンドが実行されているわけで、これら補助コマンドを格納するべきディレクトリがあるとは知りませんでした。

今回ここにまとめたもの以外にもたくさんのオプションディレクトリがあり、そこまで読み込む気力がありませんでしたが、おそらくマイナーなものが多いと思うので、実際に出会ってからもう一度FHSに戻って理解しようかなと考えてます。

参考文献

Filesystem Hierarchy Standard(3.0)

Filesystem Hierarchy Standard 日本語訳(FHS-2.3なので注意)

Comments

Copied title and URL