では、FHS 2.2による定義を中心に、各ディレクトリの役目やセオリーを解説していきましょう。必要に応じて、実際のディストリビューションでどのように扱われているかについても紹介します。
ここには、システム管理者と一般ユーザーの両方が使う、極めて基本的なコマンドが入っています。ほかのファイルシステムがマウントされていない、シングルユーザーモードでも一通りの作業が行えるコマンド群です。
FHS 2.2では、ここに収めるべきコマンドをRequirements(必須)とOptions(オプション)の2種類に分けて定義しています。定義されているコマンドは以下のとおりです。
Requirements(必須)コマンド
|
||||||
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 | sync | true | umount | uname | ||
Options(オプション)コマンド
|
||||||
csh | ed | tar | cpio | gzip | gunzip | zcat |
netstat | ping |
実際のシステム(ディストリビューション)では、もう少しコマンドがあります。
/binは、NFSを使ってネットワークで共有したり、ROMに収めたりすることを想定していますから、ここにユーザーが新たにコマンドをインストールするべきではありません。
ブート時に必要なファイルは、このディレクトリに配置されます。初期のLinuxには存在しなかったディレクトリで、Slackwareなどはルートディレクトリにいきなりカーネルが置かれていました。FHS 2.2では、カーネルは/(ルート)か/bootのどちらかに置くことになっています。
最近のディストリビューションでは、だいたいにおいて/bootに配置されているようです。Debianでは、/bootにある実体に対してのシンボリックリンクが/にあります。
このディレクトリがあると、BIOSの制限からブートできなくなるといった事態を回避するのに便利です。ディスクの先頭から100Mbytesくらいのパーティションを作り、これを/bootディレクトリに割り当てておくのです。
/bootはカーネルの再構築を行うとき以外、触る必要のないディレクトリです。
/devにはデバイスファイルが配置されています。コンソール画面に何かを出力するなら、/dev/consoleに書き込めばいいわけです。
Linuxの特徴として、「各種のデバイスもファイルとして扱う」ということがよくいわれます。もっとも、これはUNIXの特徴だったのですが、現代のOSは大なり小なりUNIXの影響を受けているためか、割と一般的な機能です。
よほどのことがない限り、/dev内のファイルを変更する必要はありません。訳の分からないうちにいじると、デバイスがグシャグシャになったりするので注意が必要です。
さまざまな設定ファイルは、ここ/etcにあります。かなりの数のファイルがあるので、最初は戸惑うかもしれません。しかし、一度にすべてが必要になるわけではないので、1つずつ確認していっても間に合います。関連する設定ファイルが多い場合は、/etc以下にサブディレクトリを作ってその中に配置することもあります。
/etc以下のファイルはホスト固有のデータなので、共有することは考えられていません。ディレクトリ内の細かい説明は、次回に行います。
/homeは、各ユーザーのホームディレクトリがある場所です。概して容量を必要とするので、/usrの下にシンボリックリンクが張ってあったりします。できれば、このディレクトリは独立したパーティションにしておいた方がいいでしょう(前回のパーティション分割/非分割のセオリー参照)。
もっとも、/homeはFHS 2.2ではオプション扱いになっており、必須というわけではありません。例えば、純然たる共用ファイルサーバであれば個人用のホームディレクトリは不要でしょう。
Linuxでは早くからシェアドライブラリを使ったダイナミックリンク機能が提供されていました。シェアドライブラリは、実行時、必要になった時点で初めてHDからメモリに読み込まれます。そのイメージを保存しておくディレクトリが/libです。カーネルのブート時に必要なものと、/ファイルシステムにあるコマンド(/binや/sbin内のコマンド)を実行するのに必要なライブラリはここにあります。
なお、FHS 2.2では複数の実行形式バイナリをサポートするシステムのために、/libという形式のディレクトリもオプションとして既定されています。
fsckでディスクをチェックしたときに作られる、破損ファイルの断片を収めるディレクトリです。ルートディレクトリだけでなく、あちこちにあります。とはいえ、普通のユーザーには、ここに残っている情報から元のファイルを復元するのはまず無理でしょう。/lost+foundディレクトリの内容にこだわるよりも、正常なファイルのバックアップをマメに取っておく方が重要です。
実は、このディレクトリはファイルシステムのフォーマットにも依存するので、FHS 2.2では規定されていません。
一時的にファイルシステムをマウントするためのディレクトリです。ディストリビューションによって、/mntだけの場合と、その下にcdromやfloppyを含んでいる場合があります。一般のユーザーが使うことはなく、root専用と考えた方がいいでしょう。
RPMやdpkgといったパッケージ管理システムでプログラムをインストールする場所です。ここにもbin、doc、include、info、libといったサブディレクトリがあるので、次回詳しく解説します。Red Hat Linux 7.1にはありますが、Debian GNU/Linuxにはまだありません。Solarisにもありますから、今後はこのディレクトリも標準的なものになっていくでしょう。
Linux固有の性格が強い(FreeBSDやSolarisにも存在しますが)ディレクトリで、カーネル内部の情報にアクセスするためのファイル(編注)が集まっています。CPUやPCIバス、そして文字どおり各種プロセスの情報を読み出せます。
今回紹介したほかのディレクトリは、FHS 2.2で「Requirements」(必須)あるいは「Options」(オプション)として定義されています。しかし、/procはLinux固有の性格が強いため、「Operating System Specific Annex」(OS別付記事項)のLinux限定セクションで定義されています。
スーパーユーザーのホームディレクトリです。昔はルートディレクトリがそのままスーパーユーザーのホームディレクトリでしたが、「見通しが悪い」「セキュリティ上問題がある」といった理由で専用のディレクトリである/rootができました。/homeと別なのは、そちらが壊れてもrootだけは作業できるようにするためです。
FHS 2.2ではオプションですが、最近のディストリビューションではもはや標準となっているようです。
/sbinは、ブートやシステムのリカバリーに必要なシステム標準コマンドが収められています。/binと違うのは、rootが使用するシステムメンテナンス系のコマンドが集まっていることです。一般ユーザーが使う必要はありませんし、使おうとしても権限の問題で動作しないコマンドがほとんどです。
ここに必ず置かれるべきコマンドも、やはりFHS 2.2で以下のように規定されています。
Requirements(必須)コマンド
|
||||||
shutdown | ||||||
Options(オプション)コマンド
|
||||||
fastboot | fasthalt | fdisk | fsck | getty | halt | ifconfig |
init | mkfs | mkswap | reboot | route | swapon | swapoff |
update |
/bin同様、実際のシステムではもっと多くのコマンドが入っています。
このディレクトリにはシステム標準のコマンド群のみを収めておくべきであり、新しいコマンドをここにインストールすることは感心できません。
その名のとおり、一時的な作業用のディレクトリです。リブート時にきれいに掃除されます。だれでも使えますが、持続性を要求されるファイルを置くべきではありません。
ユーザー向けのディレクトリで、多くのサブディレクトリを含んでいます。サブディレクトリの1つである/usr/localは、パッケージ管理システムの管轄外となっています。自分でソースからコンパイルしたプログラムなどは、この/usr/local下に配置するのが一般的です。
詳しいことは、次回解説します。
プリントやメール、ネットニュースのスプール、キャッシュといった作業用エリア、ログファイルなど、変化していく(variable)ファイルを配置するディレクトリです。/tmpと違って、リブートしても削除されません。
かつては、ここに属するファイルはほかのディレクトリにあるものが多かったのですが、NFSでファイルを共有するようになってから、変化しないほかのディレクトリと、変化する/varディレクトリを明確に分けるようになりました。システム運用上の効率アップと、セキュリティ対策がその理由です。
共有可能
|
共有不可
|
||
変化せず | /usr | /etc | |
/opt | /boot | ||
変化する | /var/mail | /var/run | |
/var/spool/news | /var/lock | ||
共有と変化から見たディレクトリの分類 |
これまで、FHSをベースにしてルートディレクトリのディレクトリ構成を紹介してきました。各ディレクトリの役割や使い方はおおむねお分かりいただけたと思います。
しかし、すべてのディストリビューションが完全にFHS準拠になっているわけではありません。そのため、ディストリビューション間で微妙な差異が生じていることもあります。例えば、Debian GNU/Linuxには/cdromや/floppyといったデバイスマウント用のディレクトリ(Red Hatでは/mnt以下)、/initrd(Red Hatでは/bootに相当)がありますが、Red Hat Linuxにはありません。
次回はディレクトリ構成解説の続編です。/usrや/varは非常に多くのサブディレクトリからなり、その内容はきわめて多岐にわたります。これらの構造は複雑なだけに、ここで整理しておく価値があるでしょう。
FHS 2.2を見た限りでは、/直下にいきなり/cdromや/mo、/floppyといったディレクトリを作るのは推奨されていないようです。今後は、Red Hat Linuxのように/mnt/cdrom、/mnt/floppyといった形になっていくのでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.