はじめに
LinuxやUnix系のシステムを使用していると、多くのディレクトリが存在し、「このファイルはどこに置けばいいのか?」「この設定ファイルはどこにあるのか?」と戸惑うことがあります。
そのようなときに役立つのが「FHS(Filesystem Hierarchy Standard)」という標準です。
今回は、その中でも最新の「FHS 3.0」について、Linuxのディレクトリ構成をご紹介します。
FHSとは?
FHSとは、「Filesystem Hierarchy Standard(ファイルシステム階層標準)」の略で、Linuxディストリビューションにおけるディレクトリ構成を定めた仕様です。
この標準に従うことで、どのLinuxディストリビューションでも共通のディレクトリ構造を持つことができ、開発者やシステム管理者がスムーズに作業できるようになります。
たとえば、ログファイルはどのLinux distributionでも基本的に/var/log
にあり、ユーザーのホームディレクトリは/home/ユーザー名
になります。
これらの位置が共通しているのは、FHSのおかげです。
なぜFHSが重要なのか?
FHSは、以下のような理由から重要な役割を果たしています。
- 一貫性のあるディレクトリ構成
どのLinuxディストリビューションでもファイルの場所がほぼ同じなので、環境が変わっても迷いません。 - メンテナンス性の向上
管理者がトラブル対応や設定変更を行う際に、目的のファイルをすぐに見つけられます。 - ソフトウェアの移植性
開発者は、決められた場所にファイルを配置することで、他のシステムでも正しく動作するソフトウェアを作れます。
FHSの歴史:Linuxファイルシステム標準化の歩み
1. はじまり:FSSTNDの誕生(1994年)
FHSの起源は、1994年2月14日にリリースされた「Filesystem Standard(FSSTND)」にさかのぼります。これは、Linuxディストリビューション間でファイルやディレクトリの配置を統一することを目的とした最初の試みでした。FSSTNDは、Linuxコミュニティ内での混乱を減らし、ソフトウェアの互換性と管理の容易さを向上させるために策定されました。
2. UNIX全体への拡張:FHSへの改名(1997年)
1996年、FSSTNDの適用範囲をLinuxだけでなく、他のUNIX系システムにも広げる動きが始まりました。これにより、1997年10月26日にリリースされたバージョン2.0から、名称が「Filesystem Hierarchy Standard(FHS)」に変更され、より広範なUNIX系システムでの標準として位置づけられました。
3. バージョンの変遷と主なリリース
FHSは、その後も継続的に更新され、以下のようなバージョンがリリースされました:
バージョン | リリース日 | 備考 |
---|---|---|
FSSTND 1.0 | 1994年2月14日 | 初版 |
FSSTND 1.1 | 1994年10月9日 | マイナーアップデート |
FSSTND 1.2 | 1995年3月28日 | 最終FSSTNDバージョン |
FHS 2.0 | 1997年10月26日 | 名称をFHSに変更 |
FHS 2.1 | 2000年4月12日 | /var や/usr の構造を明確化 |
FHS 2.2 | 2001年5月23日 | マイナーアップデート |
FHS 2.3 | 2004年1月29日 | /media や/srv の導入 |
FHS 3.0 | 2015年6月3日 | /run ディレクトリの正式導入などの変更 |
これらのバージョンアップにより、FHSは時代のニーズに合わせて進化し、システム管理やソフトウェア開発の標準としての役割を果たしてきました。
4. 現在と今後
FHS 3.0以降、大きな更新は行われていませんが、多くのLinuxディストリビューションはFHSのガイドラインに従っています。ただし、すべてのディストリビューションが完全にFHSに準拠しているわけではなく、独自のディレクトリ構成を採用している場合もあります。
FHS 3.0における主要なディレクトリ一覧
ディレクトリ一覧を一通り俯瞰して把握しておくと、どのLinuxディストリビューションを使う場合でも役にたつため、まとめてみました。
ディレクトリ階層 | 説明 |
---|---|
/ | ルートディレクトリ。すべてのファイルとディレクトリの起点。 |
/bin | システム起動や修復に必要な基本的なユーザーコマンド。 |
/boot | ブートローダー関連の静的ファイル(カーネル、initrdなど)。 |
/dev | デバイスファイル。ハードウェアデバイスへのインターフェースを提供。 |
/etc | システム全体の設定ファイル。 |
/etc/opt | /opt にインストールされたアプリケーションの設定ファイル。 |
/etc/X11 | X Window Systemの設定ファイル。(オプション) |
/etc/sgml | SGML関連の設定ファイル。(オプション) |
/etc/xml | XML関連の設定ファイル。(オプション) |
/home | ユーザーのホームディレクトリ。 |
/lib | /bin および/sbin のバイナリが必要とする共有ライブラリ。 |
/lib<qual> | 代替アーキテクチャ形式のライブラリ(例:/lib32 、/lib64 )。 |
/media | リムーバブルメディア(CD-ROM、USBなど)のマウントポイント。 |
/mnt | 一時的なマウントポイント。 |
/opt | 追加のアプリケーションソフトウェアパッケージ。 |
/proc | プロセスおよびカーネル情報を提供する仮想ファイルシステム。 |
/root | rootユーザーのホームディレクトリ。 |
/run | システム起動後のランタイムデータ。FHS 3.0で導入。 |
/sbin | システム管理用の基本的なバイナリ。 |
/srv | サービスが提供する特定のデータ(例:Web、FTP)。 |
/sys | デバイス、ドライバ、カーネル機能に関する情報を提供する仮想ファイルシステム。 |
/tmp | 一時ファイル。再起動時に削除されることがある。 |
/usr | 二次階層。読み取り専用で共有可能なユーザーデータ。 |
/usr/bin | 一般ユーザー向けの非必須コマンド。 |
/usr/include | 標準のインクルードファイル。 |
/usr/lib | /usr/bin および/usr/sbin のバイナリが必要とするライブラリ。 |
/usr/libexec | 他のプログラムによって実行されるバイナリ。 |
/usr/lib<qual> | 代替アーキテクチャ形式のライブラリ(例:/usr/lib32 )。 |
/usr/local | ローカルにインストールされたソフトウェア用の階層。 |
/usr/sbin | システム管理用の非必須バイナリ。 |
/usr/share | アーキテクチャに依存しない共有データ。 |
/usr/src | ソースコード(例:カーネルソース)。 |
/usr/X11R6 | X Window System, Version 11, Release 6。 |
/var | 変動するファイル(ログ、スプール、キャッシュなど)。 |
/var/cache | アプリケーションのキャッシュデータ。 |
/var/lib | アプリケーションの状態情報。 |
/var/lock | リソースのロックファイル。 |
/var/log | ログファイル。 |
/var/mail | ユーザーのメールボックスファイル。 |
/var/opt | /opt にインストールされたアプリケーションの可変データ。 |
/var/run | ランタイムデータ。FHS 3.0では/run に置き換えられた。 |
/var/spool | 処理待ちのタスク(印刷キュー、メールキューなど)。 |
/var/spool/mail | ユーザーのメールボックス。非推奨。 |
/var/tmp | 再起動後も保持される一時ファイル。 |
/var/yp | Network Information Service(NIS)の可変データ。 |
/binで定義されるコマンド群
FHS3.0で定義されている、/binで定義すべき(サブディレクトリは不可)システム管理者とユーザーの両方に必須のコマンド群はこれらです。
手元のMacでは、例えば/usr/binにunameが入っていたりと仕様と異なる部分はあるようです。
コマンド | 説明 |
---|---|
cat | ファイルの内容を標準出力に連結して表示します。 |
chgrp | ファイルやディレクトリのグループ所有権を変更します。 |
chmod | ファイルやディレクトリのアクセス許可を変更します。 |
chown | ファイルやディレクトリの所有者およびグループを変更します。 |
cp | ファイルやディレクトリをコピーします。 |
date | 現在の日付と時刻を表示または設定します。 |
dd | ファイルの変換やコピーを行います。 |
df | ファイルシステムのディスク使用量を表示します。 |
dmesg | カーネルのリングバッファに記録されたメッセージを表示します。 |
echo | 引数を標準出力に表示します。 |
false | 常に失敗の終了ステータスを返します。 |
hostname | システムのホスト名を表示または設定します。 |
kill | プロセスにシグナルを送信します。 |
ln | ファイルのリンクを作成します。 |
login | ユーザーのログインを処理します。 |
ls | ディレクトリの内容を一覧表示します。 |
mkdir | 新しいディレクトリを作成します。 |
mknod | デバイスファイルを作成します。 |
more | ファイルの内容をページ単位で表示します。 |
mount | ファイルシステムをマウントします。 |
mv | ファイルやディレクトリを移動または名前を変更します。 |
ps | 現在のプロセスの状態を表示します。 |
pwd | 現在の作業ディレクトリを表示します。 |
rm | ファイルやディレクトリを削除します。 |
rmdir | 空のディレクトリを削除します。 |
sed | ストリームエディタとして、テキストの変換や編集を行います。 |
sh | シェル(コマンドラインインタプリタ)を起動します。 |
stty | 端末の設定を表示または変更します。 |
su | ユーザーIDを変更します。 |
sync | ファイルシステムのバッファをディスクに書き込みます。 |
true | 常に成功の終了ステータスを返します。 |
umount | ファイルシステムのマウントを解除します。 |
uname | システム情報を表示します。 |
参考文献
- Filesystem Hierarchy Standard 3.0 公式仕様書(HTML形式)
https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.htmlLinux Foundation Specs+1Linux Foundation Specs+1 - Filesystem Hierarchy Standard – Wikipedia(英語)
https://en.wikipedia.org/wiki/Filesystem_Hierarchy_StandardWikipédia, a enciclopédia livre+2Wikipedia+2Both.org+2
コメント