Linux / ディレクトリ構造と主要ディレクトリの用途

Linuxの主要な保存先は、設定が/etc、変化するデータが/var、プログラムが/usr、一般ユーザーのホームが主に/homeです。実際の配置にはディストリビューションや管理者の設定による違いがあります。

初めてLinuxに触れると、/etc、/var、/usr、/procの用途を混同しがちです。役割を理解してから、対象システムの実際のパスを確認すると管理しやすくなります。 関連する条件と手順は、現在の場所を確認して移動する - pwd、ls、cd、treeを参照できます。

この記事では、Linuxの主要ディレクトリごとの用途と、ディレクトリ名が略語である場合の意味を整理します。 関連する条件と手順は、ファイルシステムの理解 - 絶対・相対パスと主要ディレクトリを参照できます。

Linux主要ディレクトリを一目で見る

ディレクトリ 名前の意味 主な用途
/ Root Linuxファイルシステムの最上位ディレクトリ
/bin Binary 基本コマンド実行ファイル
/boot Boot カーネルやブートローダーなどの起動関連ファイル
/dev Device ディスク、ターミナルなどのデバイスファイル
/etc 伝統的に et cetera に由来 システムとサービスの設定ファイル
/home Home 一般ユーザーのホームディレクトリ
/lib Library 共有ライブラリ
/lib64 64-bit Library 64ビットシステム用共有ライブラリ
/media Media USB、CD/DVD などのリムーバブルデバイスのマウント
/mnt Mount ファイルシステムを一時的にマウントする場所
/opt Optional 追加アプリケーション
/proc Process プロセスとカーネル情報を提供する仮想ファイルシステム
/root Root rootユーザーのホームディレクトリ
/run Run 起動後に作成されるランタイムデータ
/sbin System Binary システム管理用コマンド
/srv Service サーバーが提供するサービスデータ
/sys System デバイスとカーネル情報を提供する仮想ファイルシステム
/tmp Temporary 一時ファイル保存
/usr システム資源(Unix System Resourcesという説明もある) プログラム、コマンド、ライブラリ、共有データ
/var Variable ログ、キャッシュなど、常に変化するデータ

/ - ルートディレクトリ

/はLinuxファイルシステムの最上位にあるトップディレクトリです。

Windowsのドライブ概念とは異なり、Linuxではすべてのディレクトリとファイルが/の下に接続されます。

/
├── bin
├── boot
├── dev
├── etc
├── home
├── usr
└── var

/をルートディレクトリと呼び、rootユーザーアカウントのホームディレクトリである/rootとは異なる概念です。

/bin - 基本コマンド

binはBinaryの略です。

システムを使用するために必要な基本コマンドの実行ファイルが保存されます。代表的にはls、cp、mv、catなどのコマンドがあります。

ls /bin

最近の多くのLinuxディストリビューションでは、/binは実際のディレクトリではなく、/usr/binを指すシンボリックリンクで構成されます。

ls -ld /bin

/boot - 起動関連のファイル

/bootには、Linuxシステムを起動するために必要なカーネルおよびブートローダー関連のファイルが保存されます。

以下は配置例です。initramfsの名前やGRUBのディレクトリは配布物によって異なり、設定ファイルを確認せず直接書き換えないでください。

/boot/vmlinuz-...
/boot/initramfs-...
/boot/grub2/

カーネルの更新やGRUBブートローダーの設定を変更する際によく確認するディレクトリです。

/dev - デバイスファイル

devはDeviceの略です。

Linuxではハードディスク、SSD、ターミナルなどのデバイスをファイル形式で表現します。

/dev/sda
/dev/sdb
/dev/nvme0n1
/dev/tty
/dev/null

例えば/dev/sdaはディスクデバイスを表すことができ、/dev/nullは入力されたデータを破棄する特殊なデバイスファイルです。

/etc - システム設定ファイル

/etcはLinuxサーバーを管理する際に最もよく使われるディレクトリの一つです。

主にオペレーティングシステムや各種サービスの設定ファイルが保存されます。

/etc/passwd
/etc/fstab
/etc/hosts
/etc/ssh/sshd_config

SSH、Apache、Nginx、ネットワーク、ユーザーアカウントなど、さまざまな設定を変更する際には、/etc以下のファイルを修正します。

/home - 一般ユーザーのホームディレクトリ

/homeは一般ユーザーの個人ファイルと設定を保存するディレクトリです。

例えばjohnというユーザーを作成すると、通常次のようなホームディレクトリが作成されます。

/home/john

ユーザーがログインすると、デフォルトの作業場所も自分のホームディレクトリになります。

/lib、/lib64 - 共有ライブラリ

libはLibraryの略です。

Linuxの基本的なプログラムやコマンドを実行するために必要な共有ライブラリが保存されます。

64ビットシステムでは/lib64を使う構成がありますが、すべてのアーキテクチャや配布物に必須ではありません。/lib以下へアーキテクチャ別に配置する構成もあります。

最近のLinuxディストリビューションでは、/lib、/lib64がそれぞれ/usr/lib、/usr/lib64などを指すシンボリックリンクである場合が多いです。

/media - リムーバブルデバイスマウント

/mediaは、USBメモリ、CD、DVDなどのリムーバブルストレージデバイスをマウントするときに使用する場所です。

デスクトップLinuxでは、USBデバイスを接続すると/mediaまたは/run/mediaの下に自動的にマウントされることが多いです。

/mnt - 一時的マウント

mntはMountに由来する名前です。

管理者がディスクやネットワークファイルシステムを一時的にマウントするときに使います。以下は例示であり、/dev/sdb1が接続済みの目的のファイルシステムかをlsblk -fで確認し、findmnt /mntで既存マウントがなく、マウント先が空であることを先に確認してください。実在しない例のデバイス名をそのまま実行しないでください。

sudo mount -o ro /dev/sdb1 /mnt

この例はsudoで読み取り専用マウントを要求します。終了後は、そのマウントだけをsudo umount /mntで外します。ファイルシステムによっては読み取り専用指定でもジャーナル回復などが行われ得るため、原本を一切変更できない調査では別の保全手順が必要です。/mediaはリムーバブルメディア用、/mntは一時マウント用という役割の違いを覚えてください。

/opt - 追加インストールプログラム

optはOptionalの意味を持ちます。

Linuxディストリビューションの基本パッケージ構造とは別にインストールされる商用プログラムやサードパーティアプリケーションが主に配置されます。

/opt/application/
/opt/company/product/

/proc - プロセスとカーネル情報

procはProcessを意味します。

/procは実際のディスクにデータを保存する一般的なディレクトリではなく、Linuxカーネルがシステム情報をファイル形式で提供する仮想ファイルシステムです。

CPU情報は次のコマンドで確認できます。

cat /proc/cpuinfo

メモリ情報は次のように確認します。

cat /proc/meminfo

プロセスIDが1234の場合、/proc/1234ディレクトリで該当プロセスに関するさまざまな情報を確認できます。

/root - rootユーザーのホームディレクトリ

/rootはシステム管理者アカウントであるrootユーザーのホームディレクトリです。

一般ユーザー → /home/user
root ユーザー → /root

ルートディレクトリである/とrootユーザーのホームディレクトリである/rootは異なる意味を持ちます。

/run - ランタイムデータ

/runには、システムが起動して以降、サービスやプロセスが使用する一時ランタイム情報が保存されます。

PIDファイル、ソケット、サービス状態情報などが代表的です。

/run/
/run/user/
/run/systemd/

一般的に、/runのデータはメモリに保存され、システムを再起動すると初期化されます。

/sbin - システム管理コマンド

sbinは一般的にSystem Binaryの意味で使われます。

システム管理に必要なコマンドが配置されています。

/sbin/reboot
/sbin/fsck

最近のLinuxディストリビューションでは、/sbinが/usr/sbinを指すシンボリックリンクとして構成される場合が多いです。

/srv - サービスデータ

srvはServiceを意味します。

ウェブサーバーやFTPサーバーなど、システムが外部に提供するサービスデータを保存するディレクトリです。

/srv/www/
/srv/ftp/

ただし、実際のサービスデータの場所はディストリビューションや管理者の設定によって異なる場合があり、ウェブサーバーの場合/var/wwwを使用する場合も多いです。

/sys - システムとデバイス情報

sysは System を意味します。

/sysも /procのように、実際のディスクディレクトリというよりカーネルが提供する仮想ファイルシステムです。

主にデバイス、ドライバ、カーネルオブジェクトなどの情報を確認する際に使用します。

ls /sys/class

CPU、ネットワークインターフェース、ストレージなどの情報を確認したり、一部カーネル属性を制御する際に使用されます。

/tmp - 一時ファイル

tmpは Temporary の略です。

プログラムやユーザーが一時的に必要なファイルを保存するスペースです。

/tmp

システムポリシーにより再起動時や一定時間経過後にファイルが削除される場合があるため、重要なデータを保存する目的で使用してはいけません。

/usr - プログラムとシステムリソース

/usrは、Linuxで非常に大きな比重を占めるディレクトリです。

/usrにはプログラム実行ファイル、ライブラリ、文書、共有データを置きます。Unix System Resourcesという説明を見かけますが、これを歴史的に確定した正式な略語と考える必要はありません。重要なのは、通常は共有可能なシステム資源を置き、ユーザーの個人データや頻繁に変わるサービスデータとは区別する役割です。

ディレクトリ 用途
/usr/bin 一般コマンドとプログラム
/usr/sbin システム管理用プログラム
/usr/lib 共有ライブラリ
/usr/lib64 64ビット共有ライブラリ
/usr/share 文書、アイコンなどアーキテクチャに依存しない共有データ
/usr/local 管理者が直接インストールしたプログラム

特に/usr/localは、パッケージ管理者がインストールしたプログラムと管理者が直接インストールしたプログラムを区別するのに便利です。

/var - 変化し続けるデータ

varはVariableの略です。

システムを運用しながら継続的に生成されるか、サイズが変化するデータを保存します。

/var/log
/var/cache
/var/lib
/var/spool

/var/log

システムとサービスのログファイルが保存されます。

ls /var/log

/var/cache

プログラムがパフォーマンス向上のために使用するキャッシュデータを保存します。

/var/lib

サービスとアプリケーションが継続的に使用する状態データが保存されます。

/var/spool

メール、印刷作業、予約作業のように処理を待っているデータを保存するために使用されます。

サーバーでは、特に/var/logのログファイルが増え続けるため、ディスク容量を多く占有する可能性があり、使用量を定期的に確認することをお勧めします。

Linuxディレクトリを簡単に覚える方法

最初からすべてのディレクトリの用途を覚える必要はありません。サーバー管理でよく使うディレクトリから次のように覚えると便利です。

/etc      → 設定ファイル
/var      → ログと絶えず変わるデータ
/home     → 一般ユーザーデータ
/root     → root ユーザーホーム
/usr      → プログラムとライブラリ
/tmp      → 一時ファイル
/dev      → 装置
/proc     → プロセスとカーネル情報
/sys      → システムとデバイス情報
/boot     → ブートファイル
/mnt      → 一時マウント
/opt      → 追加インストーラ

特に最初は/etcは設定、/varはログ、/usrはプログラム、/homeはユーザーファイルという4つをまず覚えると、実際のLinux管理に役立ちます。

Linuxディレクトリ構造の要約

Linuxディレクトリは各位置ごとに比較的明確な役割があります。システム設定は/etc、ログと可変データは/var、プログラムとライブラリは/usr、ユーザーファイルは/homeに主に保存されます。

また、/procと/sysは一般のディスクディレクトリではなく、カーネル情報を提供する仮想ファイルシステムという点も知っておくと良いです。

Linuxサーバーでは、パスを丸暗記するより、各ディレクトリが扱うデータと、そのシステムでの実際の配置を対応させると役立ちます。全体の慣例はLinux man-pagesのhier(7)、現在のsystemd系システムの配置はsystemdのfile-hierarchyでも確認できます。