Arch ファイルシステム階層
Arch Linux は他の多数のディストリビューションと同じようにファイルシステム階層標準に従っています。それぞれのディレクトリについてその目的を説明するのに加えて、この記事では Arch 固有の事情についても説明しています。
目次
- 1 ファイルシステム階層標準
- 2 ディレクトリ
- 2.1 ルートファイルシステム
- 2.2
/bin: 重要なコマンドラインバイナリ(廃止) - 2.3 /boot: ブートローダーの静的なファイル
- 2.4 /dev: デバイスファイル
- 2.5 /etc: ホスト固有の設定
- 2.6 /home: ユーザーディレクトリ
- 2.7 /lost+found: ファイルシステム固有の復元可能なデータ
- 2.8 /mnt: 一時的なマウントポイント
- 2.9 /opt: 問題のあるパッケージ
- 2.10 /proc: プロセス情報
- 2.11 /root: 管理者ディレクトリ
- 2.12 /run: 一時的な実行時データ
- 2.13
/sbin: システムバイナリ(廃止) - 2.14 /srv: サービスデータ
- 2.15 /sys: 仮想ファイルシステム
- 2.16 /tmp: 一時的なファイル
- 2.17 /usr: 共有可能な、読み取り専用データ
- 2.18 /var: 可変ファイル
- 3 参照
ファイルシステム階層標準
Filesystem Hierarchy Standard (FHS) のホームページ より:
- "ファイルシステムスタンダードは Unix ディストリビューションの開発者やパッケージの開発者、そしてシステムの実装者によって使われることを想定して策定されました。ただし、この標準はあくまでリファレンスであり、Unix のファイルシステムやディレクトリ階層を管理する方法のチュートリアルではありません。"
共有可能ファイルと共有不能ファイル
共有可能ファイルとはあるホストで保存されていながら他者からも利用できるファイルです。共有不能ファイルは共有できないファイルのことです。例えば、ユーザーのホームディレクトリ内のファイルは共有可能であり、デバイスのロックファイルは共有不能です。
静的ファイルと可変ファイル
静的ファイルとは例えば、バイナリやライブラリ、ドキュメントなどのシステムの管理者以外からは変更を加えられることがないファイルを意味します。可変ファイルは静的ファイルでないファイルとして定義されます。
ディレクトリ
ルートファイルシステム
ルートファイルシステム (スラッシュ記号 (/) で表されます) は他の全てのファイルシステムの根幹となるファイルシステムです。階層の一番上に位置します。たとえファイルやディレクトリが別の物理デバイスに保存されていたとしても、全てのファイルとディレクトリはルートディレクトリ "/" 下に配置されます。ルートファイルシステムの中身だけでシステムを起動・復旧・修復できるようになっている必要があります。
/bin: 重要なコマンドラインバイナリ (廃止)
シングルユーザーモードで、全てのユーザーから利用できるバイナリを置くための伝統的なディレクトリです (例: cat, ls, cp)。/bin のプログラムはたとえ / を含むパーティションしかマウントされてないときも利用することができます。実際には、Arch では必要なライブラリは全て /usr/lib に存在しています。2013年6月から、/bin は /usr/bin に統合されました。filesystem パッケージには /bin から /usr/bin へのシンボリックリンクが含まれており、全てのパッケージは /usr/bin にインストールされるようになっています。
/boot: ブートローダーの静的なファイル
共有不能の、静的なディレクトリです。ブートローダーの設定ファイルやブートローダーのステージだけでなく、カーネルや ramdisk イメージも含みます。/boot にはカーネルがユーザー空間のプログラムを実行する前に使用されるデータも保存されます。マスターブートセクタやセクターマップファイルなどです。
/dev: デバイスファイル
起動時に udev によって作成された主要なデバイスノードやイベントによって発見されたマシンのハードウェアです。このディレクトリは UNIX ファイルシステムの重要な一面を表しています: 全てがファイルあるいはディレクトリである。このディレクトリには多くのファイルが含まれており、それぞれがシステムのハードウェアコンポーネントを代理しています。デバイスの多くはブロックまたはキャラクタデバイスですが、他のタイプのデバイスも存在し、また作成することができます。一般に、'ブロックデバイス'とはデータを保存・保持するデバイスのことであり、'キャラクタデバイス'はデータを送信・転送するデバイスと考えてかまいません。例えば、ハードディスクドライブ (HDD) や光学ドライブはブロックデバイスにカテゴライズされ、シリアルポートやマウス、USB ボートなどは全てキャラクタデバイスです。
/etc: ホスト固有の設定
ホスト固有、共有不能の設定ファイルは /etc
ディレクトリに配置します。特定のアプリケーションに複数の設定ファイルが必要な場合、/etc
を汚さないためにサブディレクトリを使うのが普通です。システムに関する全ての設定ファイルが含まれているため、定期的にバックアップをとると良いでしょう。
/etc/X11
X Window System の設定ファイル。
/etc/X11/xinit
xinit の設定ファイル。'xinit' は X セッションの起動方法のひとつでありスクリプトの一部として使われるのを想定して作られています。
/etc/X11/xinit/xinitrc
xinit (startx) によって起動された X セッションが使用する汎用の xinitrc ファイル。ユーザーのホームディレクトリにある .xinitrc ファイルによって上書きされます。
/home: ユーザーディレクトリ
UNIX はマルチユーザー環境です。そのため、各ユーザーにはそれぞれ専用のディレクトリが割り当てられます。ディレクトリにアクセスできるのは個々のユーザーと root ユーザーだけです。ユーザーのホームディレクトリは /home/$USER
(~/
) にあります。ホームディレクトリの中で、ユーザーはファイルを書き込んだり削除したり、あるいはプログラムをインストールできます。ユーザーのホームディレクトリにはユーザーのデータや個人設定が含まれています (いわゆる「ドットファイル」)。ドットファイルは非表示になっています。ドットファイルを表示するには、ファイルマネージャで表示オプションを有効にするか、ls コマンドを実行するときに -a スイッチを付けてください。個人設定とシステム設定で重なる部分がある場合、個人設定が優先されます。エンドユーザーによって変更が加えられるドットファイルは .xinitrc や .bashrc ファイルなどです。それぞれ xinit と Bash の設定ファイルとなっています。ログイン時に起動するウィンドウマネージャやエイリアス、ユーザーコマンドや環境変数などを変えることができます。ユーザーが作成されたとき、サンプルファイルが存在する /etc/skel
ディレクトリからドットファイルが生成されます。
/home
はダウンロードファイルやコンパイル・インストール・実行するプログラム、メール、マルチメディアファイルなどを保存するのに使われるため非常に巨大になります。
/lost+found: ファイルシステム固有の復元可能なデータ
UNIX ライクなオペレーティングシステムは適切なシャットダウンシークエンスを実行します。ときにはシステムがクラッシュしたり停電でマシンが落ちてしまうこともあります。その場合、次の起動時に fsck プログラムによるファイルシステムチェックが実行されます。Fsck はシステムを調べて破損したファイルがあったら修復を試みます。修復作業の結果がこのディレクトリに保存されます。修復されたファイルは完全ではなく無意味であったりもしますが、運良く大事なファイルが修復される可能性も常にあります。
/mnt: 一時的なマウントポイント
一時的なファイルシステムやデバイスで使用するマウントポイントです。マウントとはファイルシステムをシステムから利用できるようにすることで、マウントを実行することで、マウントポイントからファイルにアクセスできるようになります。/mnt
の下にさらにマウントポイント (サブディレクトリ) を作成することもできます。マウントポイントはシステム上のどこにでも作成することができますが、慣習的に、ファイルシステムのマウントポイントは大抵決まっています。
/opt: 問題のあるパッケージ
上記の GNU ファイルシステムに収めることができないパッケージや巨大な静的ファイルは /opt
に配置することができます。FHS 2.3 では /opt
はアドオンアプリケーションソフトウェアパッケージのインストール場所とされています。/opt
ディレクトリにファイルを配置するパッケージは同じ名前のディレクトリを作成して、ファイルシステム上にファイルが散らばってしまわないようにファイルをまとめて保存します。例えば、acrobat パッケージは bin ディレクトリと同じ場所に Browser, Reader, Resource ディレクトリを作成します。これは GNU ファイルシステムレイアウトには馴染まないため、全てのファイルを /opt
のサブディレクトリに置きます。
/proc: プロセス情報
/proc
は特殊なディレクトリであり仮想ファイルシステムです。しばしば「プロセス情報の疑似ファイルシステム」と呼ばれます。/proc
には実際のファイルは含まれておらず、システム情報 (例: システムメモリ, マウントしたデバイス, ハードウェアの設定など) が起動時に作られます。したがって、/proc
はカーネルを制御したり情報を確認するための中心地といえます。事実、システムユーティリティの多くはこのディレクトリにあるファイルを呼び出しているだけです。例えば、'lsmod' は cat /proc/modules
と同じであり 'lspci' は cat /proc/pci
と同義です。/proc
ディレクトリに存在するファイルに変更を加えることで、システムが稼働している間でもカーネルパラメータを取得・変更することができます (sysctl)。
/proc
ディレクトリのファイルの特徴としてファイルサイズは全てゼロとなっています。ただし kcore, mounts, self は例外です。
/root: 管理者ディレクトリ
システム管理者 ('root') のホームディレクトリ。紛らわしい名前となっていますが ('/root under root')、歴史的に '/' は root (管理者アカウント) のホームディレクトリです。/home/root
でない理由としては、/home
は別のパーティション上に配置されることがよくあり、/
しかマウントされていない場合に root からアクセスできなくなってしまうからです。
/run: 一時的な実行時データ
/run マウントポイントは起動時にマウントされる tmpfs で、起動時からあらゆるツールが利用・書込することができます。ブートプロセスで必須とされる systemd, udev, mdadm などがこのディレクトリを必要とします。なぜなら /var は起動プロセスの後ろの方の段階でマウントされる分割されたファイルシステムとして実装されることがあるためです。/var は /run のシンボリックリンクとなる /var/run/ を置き換えます。
/sbin: システムバイナリ (廃止)
伝統的な UNIX では'通常'の実行可能ファイルと、システムのメンテナンスや管理作業で利用する実行可能ファイルを区別していました。後者の実行可能ファイルはこのディレクトリか、あるいはあまり重要ではない場合、/usr/sbin に置くことになっていたのです。(たとえ問題がないときでも) /usr がマウントされてから実行されるプログラムは基本的に /usr/sbin に配置されました。実際には、必要なライブラリは全て /usr/lib に置かれるようになったため、プログラムが /sbin にあったとしても /usr がマウントされている必要がありました。2013年6月から、/sbin と /usr/sbin は /usr/bin に統合されました。filesystem パッケージには /sbin や /usr/sbin から /usr/bin へのシンボリックリンクが含まれており、全てのパッケージは /usr/bin にインストールされるようになっています。
/srv: サービスデータ
システムによって供給されるサイト固有のデータ。特定のサービスのデータファイルを確認することができるように、読み取り専用データ・書き込み可能データ・(CGI スクリプトなどの) スクリプトをシングルツリーで保存する必要があるサービスが配置されます。特定のユーザーのデータはユーザーのホームディレクトリに配置します。
/sys: 仮想ファイルシステム
Linux カーネルによって提供されている仮想ファイルシステムです。仮想ファイルを使うことで、sysfs は様々なカーネルサブシステムやハードウェアデバイス、関連するデバイスドライバーの情報をユーザー空間から使えるようにしています。様々なデバイスやサブシステムの情報が得られるだけでなく、仮想ファイルはデバイス・サブシステムの設定にも使われます。
/tmp: 一時的なファイル
一時的に必要となるファイルが含まれています。多くのプログラムがロックファイルを作成するため、あるいはデータの一時領域として使っています。ファイルの中身・目的がよくわからないのに /tmp
の中のファイルを削除してはいけません。ほとんどのファイルは実行中のプログラムにとって重要なファイルであり、削除するとシステムがクラッシュする可能性があります。大抵の環境では、古いファイルは起動時や数日間隔で消去されるようになっています。
/usr: 共有可能な、読み取り専用データ
ルートファイルシステムが一番目のファイルシステムとすれば、/usr
は二番目のファイルシステムです。ユーザーユーティリティやアプリケーションなどのユーザーデータが含まれています。/usr
は共有可能・読み取り専用のデータです。つまり /usr
は様々なホスト間で共有することができ、パッケージマネージャ以外は書き込みを行うべきではありません (パッケージのインストール・更新など)。特定のホストの情報や、何か変更を加えるファイルは別の場所に保存します。
/home
を別として、通常 /usr
にはシステムのデータの大部分を占めます。ユーザーバイナリ、バイナリのドキュメント、ライブラリ、ヘッダーファイルなどが含まれるため、システムの中で一番重要なディレクトリのひとつです。X とその補助ライブラリも /usr
に存在します。telnet, ftp などのユーザープログラムもあります。オリジナルの UNIX 実装では、/usr
には (user の略として) システムユーザーのホームディレクトリが置かれていました (つまり、今日における /home/username
が /usr/username
に相当していました)。徐々に、/usr
は (カーネル空間のプログラムやデータと対比して) ユーザー空間のプログラムやデータを保存するディレクトリに変化しました。名前自体は変わっていませんが、「ユーザーに関連する全てのファイル」を置く場所から「ユーザーが使えるプログラムやデータ」を置く場所に意味が変わったということです。そのため、後から意味づけした言葉として 'User System Resources' と呼ばれることもあります。
/usr/bin: バイナリ
コマンドバイナリ。このディレクトリにはシステム上のバイナリ (アプリケーション) のほとんどが含まれます。このディレクトリ内の実行ファイルは様々です。例えば vim や gcc、gnome-session などがここに置かれます。昔は、このディレクトリには root 権限を必要としない、そしてシングルユーザーモードで必要ないバイナリだけを置くことになっていました。しかしながら、この決まりごとは既に強制ではなくなっており、Arch の開発陣は 全てのバイナリをこのディレクトリに移動することを計画 全てのバイナリをこのディレクトリに移動しています。
/usr/include: ヘッダーファイル
ユーザー空間のソースコードをコンパイルするのに必要なヘッダーファイル。
/usr/lib: ライブラリ
アプリケーションのプライベートデータ (カーネルモジュール, systemd サービス, udev ルールなど) や共有ライブラリのイメージ (C 言語のコードライブラリ) などが含まれます。ライブラリは頻繁に使われるプログラムルーチンの集合であり、ファイル名の拡張子が *.so となっているかどうかで簡単に判別できます。システムの基本的な機能を保つために必須のファイルです。カーネルモジュール (ドライバー) は /usr/lib/modules/<kernel-version>
サブディレクトリに保存されています。
/usr/sbin: システムバイナリ (廃止)
システム管理者が使用する重要ではないシステムバイナリ。2013年6月から、/usr/sbin は /usr/bin に統合されました。filesystem パッケージには /usr/sbin から /usr/bin へのシンボリックリンクが含まれており、全てのパッケージは /usr/bin にインストールされるようになっています。
このディレクトリには共有可能で、アーキテクチャに依存しないファイル (ドキュメントやアイコン、フォントなど) が含まれています。ただし、/usr/share
は他のオペレーティングシステムとファイルを共有するためのディレクトリではないので注意してください。変更が必要ないデータを使用するプログラムやパッケージは、そのようなデータを /usr/share
に保存します (手動でインストールした場合は /usr/local/share
に保存されます、下を参照)。その際は /usr/share
のサブディレクトリを使用することが推奨されています。
/usr/src: ソースコード
'linux' サブディレクトリは、Linux のカーネルのソースコードとヘッダファイルを格納しています。
/usr/local: ローカル階層
ローカルデータを保存するための三番目のファイルシステムです。元の概念としては /usr/local
には全てのマシンの各々の ('local' の) /usr
を保存するディレクトリで、他のマシンから読み取り専用でマウントするために存在していました。/usr
と同じようなディレクトリ構造が取られています。今日では、/usr/local
は自分でコンパイルしたプログラムや第三者のプログラムを保存する場所として広く受け入れられています。Arch Linux では、デフォルトでは /usr/local
は空です。必要ならば手動でコンパイルしたソフトウェアのインストール先として使うことができます。pacman はソフトウェアを /usr
にインストールするので、手動でコンパイルしたソフトウェアを /usr/local
にインストールすることで、pacman によってインストールしたシステムソフトウェアと平和に共存することができます。
/var: 可変ファイル
ログやスプールファイル、一時的なメールファイルなどの可変ファイル。Arch では ABS ツリーや pacman のキャッシュなども保存されています。一時的な可変ファイルを /usr/
に配置しないのは CD や他のコンピュータから /usr/
を読み取り専用でマウントする可能性があるためです。/var/
に含まれているのは可変データです。システムの操作中にファイルやディレクトリは書き込みが行える状態でなければなりません。一方で /usr/
には静的なデータだけが保存されます。一部のディレクトリは別のパーティションに配置することで、ネットワークのトポロジーやセキュリティの観点からバックアップを簡単にすることができます。ブートプロセスで必須となる他のディレクトリはルートパーティションに配置する必要があります。マウントできるディレクトリは次の通りです: '/home', '/mnt', '/tmp', '/var'。起動に必須のディレクトリは次のとおりです: '/bin', '/boot', '/dev', '/etc', '/lib', '/proc', '/sbin', '/usr'。
/var/abs
ABS ツリー。ports のようなパッケージビルドシステム階層構造となっており、インストール可能な全ての Arch ソフトウェアの名前が付いたサブディレクトリにビルドスクリプトが含まれています。
/var/cache/pacman/pkg
pacman のパッケージキャッシュ。
/var/lib: 状態情報
プログラムが実行すると変更される永続データです (例: データベース、パッケージシステムのメタデータなど)。
/var/log: ログファイル
ログファイル。
/var/mail: ユーザーのメール
以前はユーザーのメールボックスとして使われていました。
/var/spool: キュー
処理されるのを待っているタスクのためのスプールです (例: プリントキュー、未読メール)。
/var/spool/mail
ユーザーメールボックスのための共有可能なディレクトリです。
/var/tmp: 保持される可能性がある一時的なファイル
再起動しても保持される一時的なファイル。