連載
» 2001年09月07日 00時00分 UPDATE

Windowsユーザーに教えるLinuxの常識(3):各ディレクトリの役割を知ろう(サブディレクトリ編) (2/2)

[関野史朗,@IT]
前のページへ 1|2       

巨大な/usrのディレクトリ構造

 /usrには、読み出し可能かつ共有可能なファイルを配置します。一般的にいって、ここには多数のファイルが配置され、ディレクトリ構造も複雑になっています。

 FHS 2.2におけるサブディレクトリは以下のように定義されています。ここでも、ディレクトリによって「必須」と「オプション」に分かれます。

/usr  
bin/(必須) 大部分のユーザーコマンド
perl/(例:オプション)
python/(例:オプション)
tcl/(例:オプション)
など
include/(必須) C言語で使うヘッダファイル
lib/(必須) ライブラリファイル
local/(必須) パッケージシステム管理外
bin/(必須) ローカルにインストールしたプログラム
games/(必須) ゲーム
include/(必須) C言語用ヘッダファイル
lib/(必須) ライブラリとプログラム
man/(必須) /local/bin用manページ
sbin/(必須) 管理者用プログラム
share/(必須) アーキテクチャに依存しないデータ
src/(必須) ソースコード
sbin/(必須) システム用バイナリファイル
share/(必須) アーキテクチャに依存しないデータ
man/(必須) manページ
misc/(必須) さまざまなデータ
X11R6/(オプション) X Window System
games/(オプション) ゲームと教育用
lib<qual>/(オプション) ライブラリの代替形式
src/(オプション) ソースコード
linux/ Linux Kernelのソースコード
図4 /usr以下のサブディレクトリ構造。binやsbin、libなど、他所にもあるディレクトリがあるため始めは混乱させられる

 X Window Systemがインストールされる/usr/X11R6だけはちょっと特別扱いです。これは歴史的な経緯が絡んでいるためです。また、/usr/spool、/usr/tmp、/usr/spool/locksをそれぞれ/var/spool、/var/tmp、/var/lockに対するシンボリックリンクとして設置することもできます。これは古いシステムとの互換性を確保するためなので、できれば使わない方がいいでしょう。

/usr/bin

/usr  
bin/ 大部分のユーザーコマンド
  perl/  
  python/  
  tcl/  
  など  
図5 /usr/bin。ここはインストールするプログラムによって内容が異なる

 /usr/binは、シングルユーザーモードには不要なバイナリファイルを配置するディレクトリで、パッケージの追加や削除によってディレクトリ内のファイルは増減します。この点だけからも、/binと/usr/binでは扱いが違うことが分かるでしょう。なお、複数のバイナリファイルで構成されているアプリケーションの場合は、さらにサブディレクトリを作成します。例を挙げると、mhやperl、python、tcl、wishなどです。

/usr/local

/usr  
local/ パッケージシステム管理外
  bin/ ローカルにインストールしたプログラム
  games/ ゲーム
  include/ C言語用ヘッダファイル
  lib/ ライブラリとプログラム
  man/ /local/bin用manページ
  sbin/ 管理者用プログラム
  share/ アーキテクチャに依存しないデータ
  src/ ソースコード
図6 管理者が自由に使える/usr/local。上記のサブディレクトリは「必須」に指定されている

 /usr/local以下は、システム管理者が自分でアプリケーションをインストールする場所として利用します。ここは、システム関連のソフトウェアをアップデートしても変更されないようになっています。サブディレクトリはbin、games、include、lib、man、sbin、share、srcが必須です。各サブディレクトリの用途は、/usrや/にある同名のディレクトリに準じます。

/usr/sbin

 /usr/sbinは、比較的重要でないシステムバイナリを配置します。「比較的」というのは/sbinと比べた場合です。/sbinには緊急時に必要なプログラム、/usr/sbinは通常運用時に使うプログラム、のように使い分けられています。

/usr/share

 /usr/shareには、アーキテクチャに依存しないデータを収めます。つまり、i386システム、Alphaシステム、PowerPCシステムのいずれでも、同じものがそのまま使えるということです。/usr/share/manと/usr/share/miscが必須、それ以外はオプションです。

/usr  
share/(必須) アーキテクチャに依存しないデータ
  man/(必須) manページ
  misc/(必須) さまざまなデータ
  dict/(オプション) さまざまな辞書
  doc/(オプション) 各種ドキュメントなど
  games/(オプション) /usr/games用の静的なデータ
  info/(オプション) GNU Info用のディレクトリ
  locale/(オプション) ロケール情報
  nls/(オプション) Native Language Support(各国語サポート)用
  sgml/(オプション) SGMLとXMLのデータ
  terminfo/(オプション) terminfoデータベース
  tmac/(オプション) troffマクロ
  zoneinfo/(オプション) タイムゾーン情報
図7 /usr/shareで「必須」とされているのは2ディレクトリのみ。あとはオプション

 /usr/share/man以下にはさらにサブディレクトリがあり、それぞれ

/usr  
share/(必須)  
  man/  
    man1/ ユーザープログラム
    man2/ システムコール
    man3/ Cライブラリ関数
    man4/ スペシャル(デバイス)ファイル
    man5/ ファイルフォーマット
    man6/ ゲーム
    man7/ そのほか
    man8/ システム管理
図8 man以下のサブディレクトリは、それぞれmanページのセクション番号に対応している

のような意味を持っています。

共有できない/var

 /varホスト固有の可変データ(variable data)用領域であり、ホストごとに用意する必要があります。当然、他ホストとの共有はできません

 /varもほかのディレクトリと同様、多くのサブディレクトリを持っています。

/var  
cache/(必須) キャッシュデータ
fonts/(オプション)
man/(オプション)
www/(オプション)
<package>/(オプション)
lib/(必須) 動的状態情報
misc/(必須)
<editor>/(オプション)
<pkgtool>/(オプション)
<package>/(オプション)
hwclock/(オプション)
xdm/(オプション)
local/(必須) /usr/local用動的データ
lock/(必須) ロックファイル
log/(必須) 記録ファイル
opt/(必須) /opt用動的データ
run/(必須) 実行プロセス関連データ
spool/(必須) アプリケーション用スプール
cron/(オプション)
lpd/(オプション)
mqueue/(オプション)
news/(オプション)
rwho/(オプション)
uucp/(オプション)
tmp/(必須) システム再起動時にも保存される一時ファイル
account/(オプション) プロセス課金記録
crash/(オプション) システムクラッシュダンプデータ
games/(オプション) ゲーム用動的データ
mail/(オプション) ユーザーメールボックス
yp/(オプション) NISデータベース
図9 /varにも多くのサブディレクトリがある。あせらず、徐々に覚えていけばいいだろう

/var/cache

 /var/cacheは、一時的な記憶場所です。例えば、インストール直後のRed Hat Linux 7.1にはmanコマンドで表示する整形済みのテキストが入っていたりします。普通は容量に上限を設けて、古いものから順に捨てていきます。これによって、最近参照したデータを再び参照するとき、素早い応答が可能になります。

/var/lock

 /var/lockは、ファイルの読み書きなどで排他制御を行う場合に使います。Linuxはマルチユーザー/マルチタスクシステムですから、1つのファイルに対して同時に書き込み要求が発生する可能性があります。そのままではファイルに不整合が発生するので、書き込み中という目印のファイルを/var/lockに作成します。個々のプロセスは、このファイルを見て自分が書き込めるかどうか、あるいは読み出すデータが信頼できるものかどうかを判断します。本来ならOSに任せたい処理ですが、細かい作業を行うときにはどうしても必要になってきます。

/var/log

 各種プログラムの動作記録を収めているのが/var/logです。例えば、ブート時のメッセージを収めたboot.logを見ることで、起動時に特定のハードウェアを認識しているかどうかを確認したりします。

 また、Linux動作中の各種メッセージはmessagesに記録されます。ここを見ることで、不正なアクセスがないかどうかをある程度は判断できます。実際には、毎日ここをチェックするのは大変なのでswatchやTripwireといったチェックプログラムを使った方がいいでしょう。

 さらに、mailloghttpd-access.logも重要です。それぞれ、sendmailなどのMTA(Mail Transfer Agent)、ApacheなどのWebサーバの動作記録です。記憶に新しいところでは、Code Redによるアクセスがhttpd-access.logに記録されます。自サイトに対する攻撃だけでなく、他サイトに対する攻撃の踏み台になっていないかどうか、このファイルで頻繁にチェックする必要があります。ただし、httpd-access.logに形跡がないからといって、100%安全というわけではありませんが……。

/var/run

 /var/runにあるのは、特定プロセスのプロセス番号を含んだファイルがほとんどです。あるプロセスにシグナルを送る場合、まずpsコマンドでプロセス番号を調べる必要があります。これは面倒ですし、タイプミスの恐れもあります。そこで、

$ kill -HUP `cat /var/run/sendmail.pid`

などとタイプして使います。これならシェルによるファイル名補完などが使えるので、よりタイプが楽になるしミスも少なくなります。ただ、すべてのプログラムがここを利用しているわけではありません。

/var/spool

 spoolはSimultaneous Peripheral Operation On-Lineの省略形で、もともとはIBM用語です。本来は、動作の遅い周辺機器に対して効率よくデータを送るためのバッファです。転じて、FIFO(First In First Out)の、いわゆる「キュー」と呼ばれるバッファとして使われているようです。/var/spool/lpdは、プリンタに送るデータをためておくバッファなので、字義に近い使われ方です。ほかには/var/spool/mqueueや/var/spool/fax、/var/spool/atといったディレクトリもあります。それぞれ、うまく送れなかった電子メールやFAXのデータを保存しておいたり、atコマンドで指定されたコマンドを保存しておいたりする場所です。ここにあるデータは、各デーモンが適当な間隔でサーチすることで処理されます。従って、対応するデーモンが何かの拍子に止まってしまうと、いつまでたっても処理されないことになってしまいます。

 また、sendmailを使ったメールサーバであれば、/var/spool/mailの下に各ユーザー名と同じファイルがあります。これが、いわゆるメールボックスです。ユーザーに送られたメールは、いったんここに保存されます。その後、mailコマンドで読み出したり、POP3でメーラーに読み込んだりするわけです。最近では、MTAとしてqmailを使うサーバもあるようですが、その場合は/var/spool/mailを使わず、直接各ユーザーのホームディレクトリにメールを配送するのが一般的です。

FHSは基本パターン

次回:10月上旬公開予定

 次回はユーザーとパーミッションについて解説します。Windows 9xには存在しない概念ですが、Linuxを使いこなすためには不可欠の要素です。


 以上、2回にわたってLinuxのディレクトリ構造を解説してきました。FHS 2.2をベースとしているので、実際はディストリビューションによって微妙に違います。ですが、基本的な考え方は同じはずですから、FHSを押さえておけばだいたいの類推は可能でしょう。


前のページへ 1|2       

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。