MTREE(8)

名称
mtree - ディレクトリ階層をマップする

書式
mtree [-cdeinrUux] [-f spec] [-K keywords] [-k keywords] [-p path] [-s seed]

解説
mtree は、カレントディレクトリをルートとするファイル階層を、 標準入力から読み込んだファイル階層記述と比較します。 その記述とマッチしない特性をもつファイルや、 実際のファイル階層あるいはファイル階層記述のいずれかから欠落しているファイル に関するメッセージを標準出力に出力します。

以下のオプションがあります:

-c  ファイル階層の記述を標準出力に出力します。

-d  ディレクトリ型以外のファイルは全て無視します。

-e  ファイル階層には存在するが、ファイル階層記述に存在しないファイルが あっても警告しません。

-f file
    ファイル階層記述を、標準入力からではなく、ファイル file から読み込みます。

-i  -c オプションでファイル階層記述を作成する際、 ディレクトリレベルを一つ下りる毎に空白 4 つ分ずつインデントして出力します。 各ディレクトリ前に出力される /set 文やコメントには影響を与えませんが、 各ディレクトリの最後に出力されるコメントには影響を及ぼします。

-K keywords
    指定した keywords (空白あるいはコンマで区切ったもの) を 現在のキーワード集合に追加します。

-k keywords
    現在のキーワード集合の代わりに、 ``type'' キーワードおよび 指定した keywords (空白あるいはコンマで区切ったもの) を使用します。

-n  ファイル階層記述作成の際、パス名コメントを出力しません。 -c オプション使用時は通常、各ディレクトリの前後にコメントが出力されます。

-p path
    ファイル階層のルートディレクトリを、カレントディレクトリではなく path とします。

-r  ファイル階層記述に記載されていないファイル階層に含まれるファイルを 全て削除します。

-s seed
    キーワード cksum が指定されている全ファイルに対する単一のチェックサムを 標準エラー出力に出力します。 チェックサムのシードには指定された値が用いられます。

-U  既存ファイルの所有者、グループおよびパーミッションを ファイル階層記述に合わせて修正し、欠落しているディレクトリを作成します。 欠落ディレクトリを作成するために、ユーザ、グループおよびパーミッションの 全てを指定しなければなりません。 成功するとステータス 0 で終了し、 何らかのエラーが発生すると 1 で終了します。 ミスマッチがあっても、それが訂正されればエラーとはみなされません。

-u  オプション -U と同様ですが、現ファイル階層がファイル階層記述とマッチしなければ ステータス 2 を返します。

-x  ファイル階層中のマウントポイント以下に降下しません。

ファイル階層記述は多くの場合、「キーワード」つまり ファイルに関連した値を指定する文字列から構成されます。 どのキーワードにもデフォルト値はありません。 キーワードに値が設定されていない場合、 そのキーワードに基づいたチェックは行われません。

現在サポートされているキーワードは以下の通りです:

cksum
    cksum(1) ユーティリティで規定されるデフォルトアルゴリズムを用いた ファイルのチェックサム。

ignore
    このファイル以下のファイル階層を無視します。

gid 数値で指定したファイルのグループ。

gname
    シンボル名で指定したファイルのグループ。

md5digest
    ファイルの MD5 メッセージダイジェスト。

mode
    数値 (8進数) あるいはシンボル値で指定した現ファイルのパーミッション。

nlink
    ファイルが持っているはずのハードリンク数。

nochange
    このファイルもしくはディレクトリが存在することのみ確認し、 他の属性は無視します。

uid 数値で指定したファイルの所有者。

uname
    シンボル名で指定したファイルの所有者。

size
    ファイルサイズ (バイト数)。

link
    シンボリックリンクが指し示しているはずのファイル。

time
    ファイルの最終修正時刻。

type
    ファイルタイプ。以下のいずれかを指定します:

    block
        ブロック型スペシャルデバイス
    char
        文字型スペシャルデバイス
    dir ディレクトリ
    fifo
        FIFO
    file
        通常ファイル
    link
        シンボリックリンク
    socket
        ソケット

デフォルトのキーワード集合は gid, mode, nlink, size, link, time, uid です。

ファイル階層記述には 4 つのタイプの行があります。

1 つめのタイプの行はキーワードに大域的な値を設定するもので、 文字列 ``/set'' とそれに続く空白、そしてキーワードとその値のペアの集合を 空白で区切ったものから構成されます。 キーワードとその値のペアはキーワードとそれに続く等号 (``='')、 そして値から成り、空白は含みません。 一旦キーワードが設定されると、再設定あるいは設定解除されるまで その値は変化しません。

2 つめのタイプの行はキーワードの設定を解除するもので、 文字列 ``/unset'' とそれに続く空白、そして 1 つ以上のキーワードを 空白で区切ったものから構成されます。

3 つめのタイプの行はファイル記述を行うもので、 ファイル名とそれに続く空白、そしてゼロ個以上のキーワードと値のペアを 空白で区切ったものから構成されます。 ファイル名の先頭には空白があっても構いません。 ファイル名には 標準的なファイル名マッチング文字 (``['', ``]'', ``?'', ``*'') が含まれて いてもよく、その場合、そのファイル階層に存在するファイルは、 マッチする最初のパターンと関連づけられます。

各キーワードと値のペアはキーワードと等号 (``='')、そして そのキーワードの値から構成され、空白は含みません。 これらの値は、対応するキーワードの大域的な値を変更しませんが、 大域的な値に優先します。

パスは全て相対指定です。 ディレクトリを指定すると、そのディレクトリ階層の中で 更にファイルが検索されます。 これがファイル階層記述における 4 つめのタイプの行です: 文字列 “..” だけが含まれる行は、カレントディレクトリパスを 1 レベル上に上げることを 意味します。

空行および最初の非空白文字がハッシュ記号 (``#'') であるような行は無視されます。

mtree は成功するとステータス 0 で終了し、何らかのエラーが生じると 1 で終了します。 また、ファイル階層がファイル階層記述とマッチしない場合はステータス 2 で 終了します。 ただしオプション -U が指定されている場合は、ステータス 2 はステータス 0 に変換されます。

使用例
「トロイの木馬」に感染したシステムバイナリを検出するには、 以下のように操作することを推奨します。 ファイルシステムに対して mtree -K md5digest を実行し、その結果のコピーを別マシンか、少なくとも暗号化した形式で ストアします。 出力ファイル自身は md5(1) ユーティリティを用いてダイジェストを作成します。 そして定期的に mtree と md5(1) をオンラインのファイル階層記述に対して走らせます。 クラッカーが手を加えたバイナリに合わせて オンラインのファイル階層記述を変更することは 可能ですが、オリジナルと同じ MD5 ダイジェストをもつ記述を作成するのは 非現実的だと考えらていれます。

-d オプションおよび -u オプションを組み合わせると、ソフトウェア配布やそれに類する処理のために ディレクトリ階層を作成するのに用いることができます。 /etc/mtree に置かれたファイル群は、この FreeBSD 配布のほとんど全てのディレクトリを作成するのに用いられました。

関連ファイル
/etc/mtree
    システムのファイル階層記述ディレクトリ

関連項目
chgrp(1), chmod(1), cksum(1), md5(1), stat(2), fts(3), md5(3), chown(8)

歴史
mtree ユーティリティは 4.3BSD Reno で登場しました。 MD5 ダイジェスト機能は、 cksum(1) をだますプログラムが広範囲に悪用されたのに対抗して FreeBSD 2.1 で追加されました。