MTREE(8)

名称
mtree - ディレクトリツリーの比較、変更

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

解説
mtree ユーティリティは、カレントディレクトリをルートとしたファイル階層と 標準入力から読み込んだ仕様とを比較します。 特徴が仕様に合っていない、もしくは そのファイル階層か仕様のどちらかにない全てのファイルについては、 そのメッセージを標準出力に書き出します。

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

-c  ファイル階層の仕様を標準出力に書き出します。

-d  ディレクトリ以外のものは全て無視します。

-e  ファイル階層内にあるが、仕様にないファイルについて訴えません。

-f  仕様を、標準出力の代りに file から読みます。

-K  指定したキーワード (空白やコンマで区切ることができます) を現在のキーワード集合 に追加します。

-k  現在のキーワード集合の代りに ``type'' キーワードと 指定したキーワード (空白やコンマで区切ることができます) を用います。

-p  カレントディレクトリの代りに path をルートとしたファイル階層を用います。

-r  ファイル階層内にあるファイルで 仕様にないものを削除します。

-s  キーワード cksum が指定された全てのファイルに対して、 チェックサムを標準エラー出力に表示します。 チェックサムの種は引数で指定した値が使われます。

-u  ファイルの所有者、グループ、パーミッションを仕様に合うように変更し、 存在しないディレクトリは作成します。 存在しないディレクトリを作成するためには、 所有者、グループ、パーミッションの全てを 指定しなければなりません。

-x  ファイル階層内のマウントポイントの下へは下りません。

仕様のほとんどは、ファイルに関係する値を指定する文字列である ``キーワード'' からなります。 キーワードにはデフォルト値がありません。もしキーワードに値がない場合、 それをもとにしたチェックは行われません。

現在サポートしているキーワードには以下のものがあります:

cksum
    ファイルのチェックサムは cksum(1) ユーティリティで明記したアルゴリズムを用いています。

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

gid ファイルのグループを数値で表します。

gname
    ファイルのグループをシンボル名で表します。

link
    そのシンボリックリンクが参照すると思われるファイルです。

mode
    現在のファイルのパーミッションを、数値 (8 進数) もしくはシンボルで表します。

nlink
    ファイルが持っていると思われるハードリンクの数です。

optional
    ファイルがオプションであることを表します。 もしそれがファイルファイル階層にない場合でも訴えません。

uid ファイルの所有者を数値で表します。

uname
    ファイルの所有者をシンボル名で表します。

size
    ファイルサイズをバイト数で表します。

time
    ファイルの最終変更時間です。

type
    ファイルタイプです。以下のもののうちのいずれかです:

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

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

仕様の各行は 4 つのタイプがあります。

最初のタイプはキーワードのグローバル値を設定する行です。 これは、文字列 ``/set''、それに続く空白、続いてキーワードと値の組のペアから なります。キーワードと値のペアの集合は、各組の間を空白で区切られます。 キーワードと値の各組は、キーワード、これに続く イコール記号 (``='')、 続く値からなります。 いったんキーワードがセットされると、reset や unset が行われるまでは、 その値が変更されずに残ります。

2 番目のタイプはキーワードの unset です。これは、文字列 ``/unset''、 それに続く空白、続く 1 個以上のキーワードからなります。キーワードのセットは 空白で区切られます。

3 番目のタイプはファイルの仕様です。これは、ファイル名、それに続く空白、 空白に続いてキーワードと値のペアが 0 個以上並びます。 キーワードと値のペアが複数ある場合は、各ペアの間を空白で区切ります。 ファイル名の前には空白が入っても構いません。 ファイル名には、ファイル名のマッチングキャラクタの標準的なもの (``['', ``]'', ``?'', ``*'') が利用できます。この場合、 その階層内にあるファイルには、最初にマッチしたパタンのキーワー ドと値のペアが適用されます。

キーワードと値の各組は、キーワード、これに続く イコール記号 (``='')、 続くキーワードの値からなります。この間には空白は入ってはいけません。 これらの値は、対応するキーワードのグローバル値を変更せずに上書きします。

全てのパス表記は相対パスです。 ディレクトリを指定すると、そのディレクトリ階層内のファイルが 探索されることになります。 仕様内の行の 4 つのタイプのうちの最後のタイプは、 文字列 “..” しか含まない行です。これは、現在のディレクトリのパスを 1 レベル上に上げます。

空行、および、空白でない最初の文字がハッシュマーク (``#'') の行は 無視されます。

mtree ユーティリティは 成功時には 0 を、エラーが起こった時には 1 を返します。 ファイル階層が仕様に合わなかった時には 2 を返します。

使用例
``トロイの木馬'' のバイナリを見つけるために、ファイルシステム上で mtree を走らせ、その結果のコピーを別のマシンに置くか、 もしくは少なくとも暗号化した形で置くことを推奨します。 -s オプションの種は、 わかりやすい値にすべきではありません。また、 もっとも最近のチェックサムは、どんな事情があろうとオンラインに ストアすべきではありません。 もしそうした場合は、オンラインにストアした仕様に対して mtree を定期的に実行し、そのチェックサムを最終チェックサムと比較すべきです。 悪人が、オンラインの仕様を彼らが書き換えたバイナリと合わせることができた としても、最終チェックサムと同じチェックサムを作ることができてはいけません。 もし最終チェックサムが変更になったならば、仕様のオフラインのコピーを使えば、 実際にどのバイナリが変更されたか見つけることができるでしょう。

-d および -u オプションを組み合わせて使うことで、 ディストリビューションや他の目的用に、ディレクトリ階層の作成を行うことが できます。

関連ファイル
/etc/mtree
    システムの spec ファイルを収めたディレクトリ

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

歴史
mtree ユーティリティは 4.3BSD Reno から登場しました。