第2章 ファイルシステム構造とメンテナンス
ファイルシステムの構造は、オペレーティングシステムの組織の最も基本的なレベルです。オペレーティングシステムがユーザー、アプリケーション、およびセキュリティーモデルと対話する方法は、オペレーティングシステムがストレージデバイスでファイルを編成する方法にほぼ常に依存します。一般的なファイルシステムの構造を提供することで、ユーザーとプログラムがファイルにアクセスして書き込むことができます。
ファイルシステムは、ファイルを 2 つの論理カテゴリーに分類します。
- 共有可能および共有不可能なファイル
- 共有可能 ファイルは、ローカルおよびリモートホストからアクセスできます。Unsharable ファイルはローカルでのみ利用可能です。
- 変数および静的ファイル
- ドキュメントなどの 変数 ファイルはいつでも変更できます。バイナリー などの 静的 ファイルは、システム管理者のアクションなしでは変更されません。
この方法でファイルを分類すると、各ファイルの機能と、それらを保持するディレクトリーに割り当てられたパーミッションとを相互に関連付ける上で役立ちます。オペレーティングシステムとそのユーザーがファイルを操作する方法によって、ファイルが配置されるディレクトリー、そのディレクトリーが読み取り専用パーミッションまたは読み取りと書き込みのパーミッションでマウントされているかどうか、および各ユーザーがそのファイルにアクセスできるレベルが決まります。この組織のトップレベルは非常に重要です。基礎となるディレクトリーへのアクセスを制限できます。そうしないと、トップレベルから下のアクセスルールが厳密な構造に準拠していない場合に、セキュリティー問題が発生する可能性があります。
2.1. ファイルシステム階層標準 (FHS) の概要
Red Hat Enterprise Linux は、Filesystem Hierarchy Standard (FHS) のファイルシステム構造を使用します。これは、多くのファイルタイプやディレクトリーの名前、場所、およびパーミッションを定義します。
FHS ドキュメントは、すべての FHS 準拠のファイルシステムにとって信頼できるリファレンスですが、この標準では、多くの領域が未定義または拡張可能です。このセクションでは、標準の概要と、標準でカバーされていないファイルシステムの部分について説明します。
FHS コンプライアンスの 2 つの最も重要な要素は次のとおりです。
- 他の FHS 準拠システムとの互換性
/usr/
パーティションを読み取り専用としてマウントする機能。/usr/
には一般的な実行ファイルが含まれており、ユーザーが変更すべきではないため、これは重要です。さらに、/usr/
は読み取り専用としてマウントされているため、CD-ROM ドライブまたは他のマシンから、読み取り専用 NFS マウントを介してマウントできる必要があります。
2.1.1. FHS 組織
ここで記載されているディレクトリーおよびファイルは、FHS ドキュメントで指定された小さなサブセットです。最も詳しい情報については、最新の FHS ドキュメント http://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.pdf を参照してください。file-hierarchy(7) の man ページにも概要が記載されています。
注記
利用可能なディレクトリーは、指定のシステムにインストールされた内容によって異なります。以下のリストは、見つかる可能性のあるものの一例になります。
2.1.1.1. ファイルシステム情報の収集
df コマンド
df コマンドは、システムのディスク領域の使用状況を報告します。出力は以下のようになります。
例2.1 df コマンドの出力
Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/VolGroup00-LogVol00 11675568 6272120 4810348 57% / /dev/sda1 100691 9281 86211 10% /boot none 322856 0 322856 0% /dev/shm
デフォルトでは、df は 1 キロバイトブロックでパーティションのサイズと、使用中および利用可能なディスク容量をキロバイト単位で表示します。メガバイトおよびギガバイトで情報を表示するには、df -h を使用します。-h 引数は、"human-readable" 形式を表します。df -h の出力は以下のようになります。
例2.2 df -h コマンドの出力
Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 12G 6.0G 4.6G 57% / /dev/sda1 99M 9.1M 85M 10% /boot none 316M 0 316M 0% /dev/shm
注記
この例では、マウントされたパーティション
/dev/shm
はシステムの仮想メモリーファイルシステムを表します。
du コマンド
du コマンドは、ディレクトリー内のファイルが使用している推定容量を表示し、各サブディレクトリーのディスク使用量を表示します。du の出力の最後の行は、ディレクトリーの合計ディスク使用量を表示します。人間が判読できる形式でディレクトリーの合計ディスク使用量のみを表示するには、du -hs を使用します。その他のオプションは、man du を参照してください。
GNOME システムモニター
グラフィカル形式でシステムのパーティションとディスク領域の使用状況を表示するには、 をクリックするか、gnome-system-monitor コマンドを使用して Gnome を使用します。ファイルシステム タブ を選択 して、システムのパーティションを表示します。以下の図は、ファイルシステム タブを 示しています。
図2.1 GNOME システムモニターのファイルシステムタブ
[D]
2.1.1.2. /boot/
ディレクトリー
/boot/
ディレクトリーには、Linux カーネルなど、システムを起動するために必要な静的ファイルが含まれます。これらのファイルは、システムが正しく起動するためには不可欠です。
警告
/boot/
ディレクトリーを削除しないでください。削除すると、システムが起動できなくなります。
2.1.1.3. /dev/
ディレクトリー
/dev/
ディレクトリーには、以下のデバイス種別を表すデバイスノードが含まれます。
- システムに接続されているデバイス
- カーネルが提供する仮想デバイス
これらのデバイスノードは、システムが適切に機能するために不可欠です。udevd デーモンは、必要に応じて
/dev/
内のデバイスノードを作成および削除します。
/dev/
ディレクトリーおよびサブディレクトリー内のデバイスは、文字 (マウスやキーボードなどの入出力のシリアルストリームのみを提供)または ブロック (ハードドライブやフロッピードライブなどのランダムにアクセス可能)のいずれかで定義されます。GNOME または KDE がインストールされている場合は、一部のストレージデバイスは (USB などで) 接続または (CD または DVD ドライブなどの) 挿入時に自動的に検出され、内容を表示するポップアップウィンドウが表示されます。
ファイル | 説明 |
---|---|
/dev/hda | プライマリー IDE チャネル上のマスターデバイス。 |
/dev/hdb | プライマリー IDE チャンネル上のスレーブデバイス。 |
/dev/tty0 | 最初の仮想コンソール。 |
/dev/tty1 | 2 番目の仮想コンソール |
/dev/sda | プライマリー SCSI または SATA チャネル上の最初のデバイス。 |
/dev/lp0 | 最初の並列ポート。 |
有効なブロックデバイスは、以下の 2 種類のエントリーのいずれかになります。
- マップされたデバイス
- ボリュームグループの論理ボリューム(例:
/dev/mapper/VolGroup00-LogVol02
)。 - 静的デバイス
- たとえば、/dev/sdbX などの従来のストレージボリューム。sdb はストレージデバイス名で、X はパーティション番号になります。
/dev/sdbX
は、/dev/disk/by-id/WWID
または/dev/disk/by-uuid/UUID
にすることもできます。詳細は、「永続的な命名」 を参照してください。
2.1.1.4. /etc/
ディレクトリー
/etc/
ディレクトリーは、マシンのローカルとなる設定ファイル用に予約されています。バイナリーを含めることはできません。バイナリーがある場合は、それらを /usr/bin/
または /usr/sbin/
に移動します。
たとえば、
/etc/skel/
ディレクトリーにはスケルトンユーザーファイルが格納されます。このファイルは、ユーザーの初回作成時にホームディレクトリーを設定するために使用されます。また、アプリケーションはこのディレクトリーに設定ファイルを保存し、実行時にそれらを参照する可能性があります。/etc/exports
ファイルは、リモートホストにどのファイルシステムをエクスポートするかを制御します。
2.1.1.5. /mnt/
ディレクトリー
/mnt/
ディレクトリーは、NFS ファイルシステムのマウントなど、一時的にマウントされたファイルシステム用に予約されています。すべてのリムーバブルストレージメディアには、/media/
ディレクトリーを使用します。自動的に検出されたリムーバブルメディアは、/media
ディレクトリーにマウントされます。
重要
/mnt
ディレクトリーは、インストールプログラムでは使用しないでください。
2.1.1.6. /opt/
ディレクトリー
/opt/
ディレクトリーは通常、デフォルトのインストールの一部ではないソフトウェアおよびアドオンパッケージ用に予約されています。/opt/
にインストールするパッケージは、その名前を持つディレクトリーを作成します(例: /opt/packagename/
)。多くの場合、このようなパッケージは予測可能なサブディレクトリー構造に従います。ほとんどの場合、バイナリーを /opt/packagename/bin/
に保存し、man ページを /opt/packagename/man/
に保存します。
2.1.1.7. /proc/
ディレクトリー
/proc/
ディレクトリーには、カーネルから情報を抽出するか、カーネルに情報を送信する特別なファイルが含まれています。このような情報の例には、システムメモリー、CPU 情報、およびハードウェア設定が含まれます。/proc/
の詳細は、「/proc 仮想ファイルシステム」 を参照してください。
2.1.1.8. /srv/
ディレクトリー
/srv/
ディレクトリーには、Red Hat Enterprise Linux システムが提供するサイト固有のデータが含まれます。このディレクトリーは、FTP、WWW、または CVS などの特定サービスのデータファイルの場所をユーザーに提供します。特定のユーザーのみに関連するデータは、/home/
ディレクトリーに置く必要があります。
2.1.1.9. /sys/
ディレクトリー
/sys/
ディレクトリーは、カーネルに固有の新しい sysfs
仮想ファイルシステムを使用します。カーネルのホットプラグハードウェアデバイスのサポートが増えると、/sys/
ディレクトリーには、/proc/
が保持する情報と同様の情報が含まれますが、ホットプラグデバイスに固有のデバイス情報の階層ビューが表示されます。
2.1.1.10. /usr/
ディレクトリー
/usr/
ディレクトリーは、複数のマシンにまたがって共有できるファイル用です。/usr/
ディレクトリーは、多くの場合、独自のパーティションにあり、読み取り専用でマウントされます。少なくとも、/usr/
には以下のサブディレクトリーが含まれている必要があります。
/usr/bin
- このディレクトリーはバイナリーに使用されます。
/usr/etc
- このディレクトリーは、システム全体の設定ファイルに使用されます。
/usr/games
- このディレクトリーにはゲームが保存されています。
/usr/include
- このディレクトリーは C ヘッダーファイルに使用されます。
/usr/kerberos
- このディレクトリーは、Kerberos 関連のバイナリーおよびファイルに使用されます。
/usr/lib
- このディレクトリーは、シェルスクリプトまたはユーザーが直接使用するように設計されていないオブジェクトファイルやライブラリーに使用されます。Red Hat Enterprise Linux 7.0 以降、
/lib/
ディレクトリーは/usr/lib
に統合されました。/usr/bin/
および/usr/sbin/
でバイナリーを実行するために必要なライブラリーも含まれるようになりました。これらの共有ライブラリーイメージは、システムを起動したり、root ファイルシステム内でコマンドを実行したりするために使用されます。 /usr/libexec
- このディレクトリーには、他のプログラムによって呼び出される小さなヘルパープログラムが含まれます。
/usr/sbin
- Red Hat Enterprise Linux 7.0 以降、
/sbin
は/usr/sbin
に移動しました。これは、システムの起動、復元、復旧、または修復に不可欠なものを含む、すべてのシステム管理バイナリーが含まれていることを意味します。/usr/sbin/
のバイナリーを使用するには、root 権限が必要です。 /usr/share
- このディレクトリーには、アーキテクチャー固有ではないファイルを保存します。
/usr/src
- このディレクトリーには、ソースコードが保存されます。
/var/tmp
にリンクされている/usr/tmp
- このディレクトリーには、一時ファイルが保存されます。
/usr/
ディレクトリーには、/local/
サブディレクトリーも含まれている必要があります。FHS によると、このサブディレクトリーは、ソフトウェアをローカルでインストールする際にシステム管理者によって使用されるので、システムの更新中に上書きされないようにする必要があります。 /usr/
local
ディレクトリーには /usr/ と似ており、以下のサブディレクトリーが含まれます。
/usr/local/bin
/usr/local/etc
/usr/local/games
/usr/local/include
/usr/local/lib
/usr/local/libexec
/usr/local/sbin
/usr/local/share
/usr/local/src
Red Hat Enterprise Linux の
/usr/local/
の使用は FHS とは若干異なります。FHS は、/usr/local/
を使用して、システムソフトウェアのアップグレードから安全に保つ必要があるソフトウェアを保存する必要があることを示しています。RPM Package Manager はソフトウェアのアップグレードを安全に実行できるため、ファイルを /usr/local/
に保存してファイルを保護する必要はありません。
代わりに、Red Hat Enterprise Linux は、マシンにローカルなソフトウェアに
/usr/local/
を使用します。たとえば、/usr/
ディレクトリーがリモートホストから読み取り専用 NFS 共有としてマウントされている場合でも、/usr/local/
ディレクトリーにパッケージまたはプログラムをインストールすることができます。
2.1.1.11. /var/
ディレクトリー
FHS では、Linux が
/usr/
を読み取り専用としてマウントする必要があるため、ログファイルを書き込むプログラムや、spool/
または lock/
ディレクトリーが必要なプログラムは、それらを /var/
ディレクトリーに書き込む必要があります。FHS は、/var/
は、スプールディレクトリーとファイル、ロギングデータ、一時的ファイルなどの変数データ用です。
以下は、
/var/
ディレクトリーにあるディレクトリーの一部です。
/var/account/
/var/arpwatch/
/var/cache/
/var/crash/
/var/db/
/var/empty/
/var/ftp/
/var/gdm/
/var/kerberos/
/var/lib/
/var/local/
/var/lock/
/var/log/
/var/spool/mail/
にリンクされた/var/mail
/var/mailman/
/var/named/
/var/nis/
/var/opt/
/var/preserve/
/var/run/
/var/spool/
/var/tmp/
/var/tux/
/var/www/
/var/yp/
重要
/var/run/media/ユーザー
ディレクトリーには、USB ストレージメディア、DVD、CD-ROM、Zip ディスクなどのリムーバブルメディアのマウントポイントとして使用されるサブディレクトリーが含まれます。以前は、/media/
ディレクトリーがこの目的で使用されていたことに注意してください。
メッセージ
や lastlog
などのシステムログファイルは、/var/log/
ディレクトリーに移動します。/var/lib/rpm/
ディレクトリーには RPM システムデータベースが含まれます。ロックファイルは、通常は ファイルを使用するプログラムのディレクトリーにある /var/lock/
ディレクトリーに移動します。/var/spool/
ディレクトリーには、一部のプログラムのデータファイルを保存するサブディレクトリーがあります。これらのサブディレクトリーには以下が含まれます。
/var/spool/at/
/var/spool/clientmqueue/
/var/spool/cron/
/var/spool/cups/
/var/spool/exim/
/var/spool/lpd/
/var/spool/mail/
/var/spool/mailman/
/var/spool/mqueue/
/var/spool/news/
/var/spool/postfix/
/var/spool/repackage/
/var/spool/rwho/
/var/spool/samba/
/var/spool/squid/
/var/spool/squirrelmail/
/var/spool/up2date/
/var/spool/uucp/
/var/spool/uucppublic/
/var/spool/vbox/