はじめに
Linuxシステムでファイルを探したり、設定ファイルを編集したりする際に、「このファイルはどこにあるのか」「なぜこのディレクトリにあるのか」と疑問に思ったことはないでしょうか。Linuxには**Filesystem Hierarchy Standard(FHS)**という国際標準規格があり、ディレクトリ構造の意味と役割が明確に定義されています。
本記事では、FHS規格の概要から始め、ルートディレクトリ以下の主要ディレクトリの役割を解説します。さらに、ファイルパスの基本概念である絶対パス・相対パスの使い分け、リンクファイルの仕組み(シンボリックリンク・ハードリンク)まで、Linuxファイルシステムを理解するための知識を体系的に学べます。
この記事を読み終える頃には、「設定ファイルは/etc、ログファイルは/var/log」といった知識が自然と身につき、目的のファイルがどこにあるか推測できるようになります。
動作確認環境
本記事のコマンドは以下の環境で動作確認しています。
| 項目 | 内容 |
|---|---|
| OS | Ubuntu 24.04 LTS |
| シェル | bash 5.3 |
| カーネル | Linux 6.8 |
| FHS | 3.0 |
WSL2やVirtualBox上のLinux環境、その他の主要ディストリビューション(AlmaLinux 9、Debian 12等)でも同様に動作します。
FHS(Filesystem Hierarchy Standard)とは
FHSの概要
**FHS(Filesystem Hierarchy Standard)**は、LinuxをはじめとするUNIX系オペレーティングシステムにおけるディレクトリ構造とファイル配置の標準規格です。Linux Foundationが管理しており、2015年にリリースされたFHS 3.0が2026年現在も最新版として広く採用されています。
FHSの主な目的は以下の通りです。
- 互換性の確保: 異なるLinuxディストリビューション間でファイル配置を統一し、アプリケーションの互換性を高める
- 管理の容易化: システム管理者が必要なファイルの場所を予測しやすくする
- ドキュメントの統一: 各ディレクトリの役割を明確に定義し、ドキュメントの一貫性を保つ
FHSの基本設計思想
FHSは、ファイルを2つの軸で分類しています。
quadrantChart
title FHSのファイル分類
x-axis 静的(Static) --> 可変(Variable)
y-axis 共有不可(Non-shareable) --> 共有可能(Shareable)
quadrant-1 /var/mail, /var/spool/news
quadrant-2 /usr, /opt
quadrant-3 /etc, /boot
quadrant-4 /var/run, /var/lock| 分類 | 説明 | 例 |
|---|---|---|
| 静的(Static) | 管理者による変更以外で内容が変わらないファイル | /usr、/opt、/boot |
| 可変(Variable) | システム運用中に内容が変化するファイル | /var、/tmp、/run |
| 共有可能(Shareable) | ネットワーク経由で複数ホスト間で共有できるファイル | /usr、/opt |
| 共有不可(Non-shareable) | 特定のホスト固有のファイル | /etc、/boot、/var/run |
この分類により、例えば/usrは読み取り専用でマウントでき、/varは書き込み用に別パーティションへ配置できます。
Linuxディレクトリ構造の全体像
ルートディレクトリ(/)
Linuxのディレクトリ構造は、**ルートディレクトリ(/)**を頂点とする単一のツリー構造になっています。WindowsのようにC:、D:といったドライブ文字の概念はありません。すべてのファイルとディレクトリは、ルートディレクトリから始まる階層構造の中に存在します。
|
|
実行結果の例:
|
|
ディレクトリ構造の図解
graph TD
ROOT["/(ルート)"] --> bin["/bin"]
ROOT --> boot["/boot"]
ROOT --> dev["/dev"]
ROOT --> etc["/etc"]
ROOT --> home["/home"]
ROOT --> lib["/lib"]
ROOT --> media["/media"]
ROOT --> mnt["/mnt"]
ROOT --> opt["/opt"]
ROOT --> proc["/proc"]
ROOT --> rootdir["/root"]
ROOT --> run["/run"]
ROOT --> sbin["/sbin"]
ROOT --> srv["/srv"]
ROOT --> sys["/sys"]
ROOT --> tmp["/tmp"]
ROOT --> usr["/usr"]
ROOT --> var["/var"]
usr --> usrbin["/usr/bin"]
usr --> usrlib["/usr/lib"]
usr --> usrlocal["/usr/local"]
usr --> usrshare["/usr/share"]
var --> varlog["/var/log"]
var --> varcache["/var/cache"]
var --> varlib["/var/lib"]
var --> vartmp["/var/tmp"]主要ディレクトリの役割
/bin - 基本コマンド
/binは、すべてのユーザーが使用できる基本的なコマンドのバイナリファイルが格納されるディレクトリです。システムの起動や復旧時にも必要不可欠なコマンドが配置されています。
FHS 3.0では、/binに必須とされるコマンドには以下があります。
| コマンド | 説明 |
|---|---|
| cat | ファイル内容の連結・表示 |
| cp | ファイルのコピー |
| ls | ディレクトリ内容の一覧表示 |
| mv | ファイルの移動・リネーム |
| rm | ファイルの削除 |
| sh | POSIXシェル |
|
|
実行結果の例:
|
|
現代のLinuxディストリビューション(Ubuntu 20.04以降、Fedora 17以降など)では、/binは/usr/binへのシンボリックリンクとなっていることが多いです。これは「usr merge」と呼ばれる仕様統合の結果です。
|
|
実行結果の例:
|
|
/etc - システム設定ファイル
/etcは、ホスト固有のシステム設定ファイルが格納されるディレクトリです。“et cetera”(その他)が語源とされていますが、現在は"Editable Text Configuration"の略として解釈されることもあります。
このディレクトリには実行可能なバイナリを置くことは禁止されています。
主な設定ファイルとディレクトリ:
| パス | 説明 |
|---|---|
/etc/passwd |
ユーザーアカウント情報 |
/etc/shadow |
暗号化されたパスワード情報 |
/etc/group |
グループ情報 |
/etc/hosts |
静的なホスト名解決テーブル |
/etc/fstab |
ファイルシステムのマウント設定 |
/etc/ssh/ |
SSH設定ファイル |
/etc/apt/ |
APTパッケージ管理設定(Debian系) |
/etc/nginx/ |
Nginx設定ファイル |
/etc/systemd/ |
systemdサービス設定 |
|
|
実行結果の例:
|
|
|
|
実行結果の例:
|
|
/home - ユーザーホームディレクトリ
/homeは、一般ユーザーのホームディレクトリが配置される場所です。各ユーザーは自分専用のディレクトリ(/home/username)を持ち、個人のファイルや設定を保存します。
|
|
実行結果の例:
|
|
ユーザーのホームディレクトリには、ドット(.)で始まる隠しファイル・ディレクトリとして個人設定が保存されます。
| パス | 説明 |
|---|---|
~/.bashrc |
bashシェルの設定ファイル |
~/.profile |
ログイン時の環境設定 |
~/.ssh/ |
SSH鍵と設定 |
~/.config/ |
アプリケーション設定(XDG仕様) |
~/.local/ |
ユーザーローカルデータ |
|
|
実行結果の例:
|
|
~(チルダ)はシェルによって現在のユーザーのホームディレクトリに展開されます。
|
|
実行結果:
|
|
/var - 可変データ
/varは、システム運用中に変化する可変データが格納されるディレクトリです。ログファイル、キャッシュ、スプールデータなど、サイズや内容が常に変動するファイルがここに配置されます。
FHSでは、/usrを読み取り専用でマウントできるようにするため、運用中に書き込みが発生するファイルはすべて/varに配置するよう設計されています。
主なサブディレクトリ:
| パス | 説明 |
|---|---|
/var/log/ |
システムおよびアプリケーションのログファイル |
/var/cache/ |
アプリケーションのキャッシュデータ |
/var/lib/ |
アプリケーションの状態情報(データベースなど) |
/var/spool/ |
処理待ちデータ(印刷キュー、メールキューなど) |
/var/tmp/ |
再起動後も保持される一時ファイル |
/var/run/ |
実行時データ(現在は/runへのシンボリックリンク) |
|
|
実行結果の例:
|
|
サーバー運用において、/var/logのディスク使用量は特に注意が必要です。ログローテーションの設定(/etc/logrotate.d/)を適切に行わないと、ディスクが逼迫する原因となります。
/usr - ユーザープログラム
/usrは、ユーザー向けプログラムとデータが格納される、ファイルシステムの中で最も大きなセクションです。“User System Resources"または"Unix System Resources"の略とされています。
/usrは読み取り専用データを格納するため、ネットワーク経由で複数のホスト間で共有することが可能です。
主なサブディレクトリ:
| パス | 説明 |
|---|---|
/usr/bin/ |
大多数のユーザーコマンド |
/usr/sbin/ |
システム管理用コマンド(非必須) |
/usr/lib/ |
ライブラリファイル |
/usr/include/ |
C言語ヘッダファイル |
/usr/share/ |
アーキテクチャ非依存のデータ |
/usr/local/ |
ローカルにインストールしたソフトウェア |
/usr/src/ |
ソースコード |
|
|
実行結果の例:
|
|
/usr/localは、システム管理者がパッケージマネージャを使わずに手動でインストールしたソフトウェアを配置する場所です。ディストリビューションが管理するファイルと明確に分離されます。
|
|
実行結果の例:
|
|
/tmp - 一時ファイル
/tmpは、すべてのユーザーとプログラムが使用できる一時ファイルの保存場所です。このディレクトリのファイルは、システム再起動時に削除されることが一般的です。
|
|
実行結果の例:
|
|
パーミッションの最後のtはスティッキービットを示しています。スティッキービットが設定されたディレクトリでは、ファイルの所有者とrootユーザーのみがそのファイルを削除できます。これにより、他のユーザーが作成した一時ファイルを勝手に削除されることを防いでいます。
一時ファイルの作成例:
|
|
実行結果の例:
|
|
/var/tmpとの違いは、データの永続性です。
| ディレクトリ | 再起動後のデータ | 用途 |
|---|---|---|
/tmp |
削除される | 短期的な一時ファイル |
/var/tmp |
保持される | 長期的な一時ファイル |
その他の重要なディレクトリ
| ディレクトリ | 説明 |
|---|---|
/boot |
カーネルイメージ、ブートローダー設定など起動に必要なファイル |
/dev |
デバイスファイル(ハードディスク、端末など) |
/lib |
システム起動と/bin・/sbinのコマンド実行に必要な共有ライブラリ |
/media |
CD-ROM、USBメモリなどリムーバブルメディアのマウントポイント |
/mnt |
一時的なファイルシステムのマウントポイント |
/opt |
アドオンアプリケーションパッケージ |
/proc |
プロセスとカーネル情報の仮想ファイルシステム |
/root |
rootユーザーのホームディレクトリ |
/run |
起動後の実行時データ |
/sbin |
システム管理用の基本コマンド |
/srv |
システムが提供するサービス用データ |
/sys |
カーネルとデバイスの情報を提供する仮想ファイルシステム |
絶対パスと相対パス
パスとは
**パス(path)**とは、ファイルやディレクトリの場所を示す文字列です。Linuxではディレクトリの区切りにスラッシュ(/)を使用します。
パスには絶対パスと相対パスの2種類があります。
絶対パス
**絶対パス(absolute path)**は、ルートディレクトリ(/)から始まる完全なパスです。ファイルの場所を一意に特定できます。
|
|
絶対パスの特徴:
- 必ず
/から始まる - 現在の作業ディレクトリに関係なく同じファイルを指す
- スクリプトや設定ファイルで推奨される
相対パス
**相対パス(relative path)**は、現在の作業ディレクトリを基準としたパスです。/から始まりません。
|
|
実行結果:
|
|
|
|
相対パスでは、以下の特殊なディレクトリ表記を使用します。
| 表記 | 意味 |
|---|---|
. |
現在のディレクトリ(カレントディレクトリ) |
.. |
1つ上の親ディレクトリ |
|
|
実行結果:
|
|
|
|
実行結果:
|
|
|
|
実行結果:
|
|
絶対パスと相対パスの使い分け
graph TD
A[パスの選択] --> B{スクリプト・設定ファイル?}
B -->|はい| C[絶対パスを使用]
B -->|いいえ| D{対話的な操作?}
D -->|はい| E[相対パスが便利]
D -->|いいえ| F{移植性が必要?}
F -->|はい| G[相対パスを検討]
F -->|いいえ| C| 状況 | 推奨 | 理由 |
|---|---|---|
| シェルスクリプト | 絶対パス | 実行ディレクトリに依存しない |
| 設定ファイル | 絶対パス | 明確で誤解が生じにくい |
| 対話的な操作 | 相対パス | 入力が短くて済む |
| プロジェクト内参照 | 相対パス | ディレクトリ移動に強い |
シンボリックリンクとハードリンク
リンクとは
Linuxでは、1つのファイルに対して複数の名前(パス)を付けることができます。これをリンクと呼びます。リンクにはハードリンクと**シンボリックリンク(ソフトリンク)**の2種類があります。
inode(アイノード)の理解
リンクを理解するには、まず**inode(アイノード)**の概念を知る必要があります。
inodeは、ファイルシステム上の各ファイルに割り当てられる固有の識別番号とメタデータの集合です。ファイル名はinodeへの参照として機能します。
graph LR
subgraph "ディレクトリエントリ"
A["file.txt"] --> I[inode 12345]
B["backup.txt"] --> I
end
subgraph "inode 12345"
I --> M[メタデータ<br/>所有者、権限、<br/>タイムスタンプ等]
I --> D[データブロック<br/>実際のファイル内容]
end
|
|
実行結果の例:
|
|
ハードリンク
ハードリンクは、同じinodeを参照する別のファイル名(ディレクトリエントリ)です。元のファイルとハードリンクは完全に対等で、どちらかを削除してももう一方は影響を受けません。
|
|
実行結果の例:
|
|
出力の12345678が同じinode番号を示し、2がリンクカウント(このinodeを参照するファイル名の数)を示しています。
|
|
実行結果:
|
|
|
|
実行結果:
|
|
ハードリンクの制限:
- 同一ファイルシステム内でのみ作成可能
- ディレクトリに対しては作成できない(ループ防止のため)
- リンク先がinodeなので、ファイルの移動や削除を追跡できない
シンボリックリンク(ソフトリンク)
シンボリックリンクは、別のファイルやディレクトリへのパス参照を格納する特殊なファイルです。Windowsの「ショートカット」に似た概念ですが、より透過的に動作します。
|
|
実行結果の例:
|
|
ファイルタイプのlがシンボリックリンクを示しています。
|
|
実行結果の例:
|
|
|
|
実行結果:
|
|
元ファイルを削除した場合:
|
|
実行結果:
|
|
|
|
実行結果の例:
|
|
(多くのターミナルでは壊れたリンクは赤色で表示されます)
ハードリンクとシンボリックリンクの比較
| 特性 | ハードリンク | シンボリックリンク |
|---|---|---|
| 参照先 | inode | ファイルパス |
| 異なるファイルシステム | 不可 | 可能 |
| ディレクトリへのリンク | 不可 | 可能 |
| 元ファイル削除時 | データは保持される | 壊れたリンクになる |
| ファイルサイズ | 元ファイルと同じ | パス文字列の長さ |
| 識別方法 | ls -iで同じinode |
ls -lでlタイプと->表示 |
実際の使用例
システム上でのシンボリックリンクの例:
|
|
実行結果の例:
|
|
シンボリックリンクの作成コマンド早見表:
|
|
よくあるユースケース
ファイルの場所を推測する
FHSの知識を活用すると、目的のファイルがどこにあるか推測できます。
| 探しているもの | 確認すべき場所 |
|---|---|
| サービスの設定ファイル | /etc/<サービス名>/ |
| ログファイル | /var/log/<サービス名>/ |
| 実行ファイル | /usr/bin/、/usr/sbin/、/usr/local/bin/ |
| ユーザーの個人設定 | ~/.config/、~/.<アプリ名>/ |
| 手動インストールしたソフトウェア | /usr/local/、/opt/ |
| データベースのデータ | /var/lib/<データベース名>/ |
| キャッシュファイル | /var/cache/<アプリ名>/ |
ディスク容量が逼迫した場合の確認場所
|
|
実行結果の例:
|
|
容量が大きくなりやすいディレクトリ:
| ディレクトリ | 原因 | 対策 |
|---|---|---|
/var/log |
ログの蓄積 | logrotate設定の確認 |
/var/cache |
パッケージキャッシュ | apt clean等で削除 |
/tmp |
一時ファイル | 再起動または手動削除 |
/home |
ユーザーデータ | 不要ファイルの整理 |
まとめ
本記事では、Linuxのディレクトリ構造について以下の内容を解説しました。
- FHS規格: LinuxディストリビューションでディレクトリUsage構造を標準化する規格
- 主要ディレクトリ:
/bin(基本コマンド)、/etc(設定)、/home(ユーザー)、/var(可変データ)、/usr(プログラム)、/tmp(一時ファイル)の役割 - パスの種類: 絶対パスと相対パスの違いと使い分け
- リンク: シンボリックリンクとハードリンクの仕組みと違い
FHS規格を理解することで、「設定ファイルは/etc」「ログは/var/log」といった知識が自然と身につき、トラブルシューティングやシステム管理の効率が大幅に向上します。
次のステップとして、実際にLinux環境で各ディレクトリを探索し、どのようなファイルが配置されているか確認してみることをお勧めします。