EN JA
MTREE(8)
MTREE(8) FreeBSD System Manager's Manual MTREE(8)

名称

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

書式

mtree [ -bCcDdejLlMnPqrStUuWx][ -i | -m][ -E tags][ -F flavor][ -f spec][ -I tags][ -K keywords][ -k keywords][ -N dbdir][ -O onlyfile][ -p path][ -R keywords][ -s seed][ -X exclude-file]

解説

mtree ユーティリティは、ファイル階層と仕様 (specification) を比較するか、ファイル階層のための仕様を作成するか、または仕様を修正します。

コマンド行オプションによって上書きされなかったなら、デフォルトのアクションは、カレントディレクトリをルートとするファイル階層と標準入力から読み込まれた仕様を比較することです。メッセージは、その特性が仕様と一致しないか、またはファイル階層または仕様のいずれかから失われているあらゆるファイルに関して標準出力に書き込まれます。

オプションは、次の通りです:

-b
ディレクトリに入る前と出た後に、空白行を抑制します。
-C
仕様を様々なツールで解析することを簡単にする形式に変換します。入力仕様は、標準入力または -f spec によって与えられたファイルから読み込まれます。出力では、各ファイルまたはディレクトリは、(非常に長いかもしれない) 単一の行を使用して表わされます。 (“./”から始まる) フルパス名は、最初のフィールドとして常に印刷されます。印刷される他のキーワードを制御するために -K, -k-R を使用することができます。印刷されるファイルを制御するために -E-I を使用することができます。そして、出力をソートするために -S オプションを使用することができます。
-c
現在の作業ディレクトリ (または -p path によって提供されるディレクトリ) から始まるファイル階層のための仕様を標準出力に印刷します。出力は、相対パス名を使用するスタイルです。
-D
-C のように、パス名を除いて、最初の代わりに最後のフィールドとして常に印刷されます。
-d
ディレクトリタイプのファイルを除いてすべてを無視します。
-E tags
コンマで区切られたタブを“exclusion” (排他) リストに追加します。排除リストにあるタグが付けられたディレクトリ以外は、 -C-D で印刷されません。
-e
仕様ではなくファイル階層にあるファイルに関してエラーをだしません。
-F flavor
mtree ユーティリティの互換性のフレーバ (flavor) を設定します。 flavor は、 mtree, freebsd9 または netbsd6 のうちの 1 つを指定できます。デフォルトは、 mtree です。 freebsd9netbsd6 フレーバ (flavor) は、それぞれ FreeBSD 9.0NetBSD 6.0 との出力互換性とコマンド行のオプション後方互換性を保存することを試みます。
-f spec
標準入力からの代わりに、 file から仕様を読み込みます。

このオプションが 2 度指定されるなら、2 つの仕様は、ファイル階層にではなく互いと比較されます。仕様は、 -c を使用して生成された出力のようにソートされます。この場合、出力形式は、それぞれ、0、1 と 2 つのタブ文字を前に付いた、いくらか "in first spec only", "in second spec only"と "different"カラムがある comm(1) によく似ています。 "different"カラムの各エントリは、各仕様から 1 つ、2 つの行を占領します。

-I tags
コンマで区切られたタブを“inclusion” (包含) リストに追加します。 inclusion (包含) リストにあるタグが付いたディレクトリ以外は、 -C-D で印刷されます。 inclusion (包含) リストが提供されないなら、デフォルトは、すべてのファイルを表示することです。
-i
指定されるなら、schg および sappnd フラグを設定します。
-j
-c オプションで仕様を作成するとき、ディレクトリレベルが下られるごとに、 4 つの空白を出力して字下げ (indent) します。これは、各ディレクトリの前に /set 文またはコメントのいずれにも影響しません。しかしながら、それは、各ディレクトリのクローズの前のコメントに影響します。これは、 mtreeFreeBSD バージョンの -i オプションと同等です。
-K keywords
指定された (空白類またはコンマで区切られた) キーワードをキーワードの現在のセットに追加します。‘ all’が指定されるなら、他のキーワードをすべて追加します。
-k keywords
type キーワードとキーワードの現在のセットの代わりに指定された (空白類またはコンマで区切られた) キーワードを使用します。‘ all’が指定されるなら、すべての他のキーワードを使用します。 type キーワードが求められないなら、 -R type でそれを抑制します。
-L
ファイル階層のすべてのシンボリックリンクをたどります。
-l
より厳格なパーミッションが、それほど厳格でないものと一致する、“loose”パーミッションチェックを行います。例えば、モード 0444 でマークされたファイルは、モード 0644 のためのチェックを通ります。“loose”チェックは、読み込み、書き込みと実行パーミッションのみに適応します -- 特にスティッキビットまたは suid/sgid ビットのような他のビットが仕様またなファイルのいずれかに設定されているなら、正確なチェックが行なわれます。このオプションは、 -U または -u オプションとして同時に設定することはできません。
-M
優先順位をとる最後のエントリと共に異なるタイプがある仕様エントリのマージを許可します。
-m
schg および sappnd フラグが指定されるなら、これらのフラグをリセットします。これは、1 未満の (すなわち、シングルユーザモードまたは、システムが不安定なモードで実行している間) securelevel でのみ可能であることに注意してください。セキュリティレベルの情報については、 init(8) を参照してください。
-n
仕様を作成するとき、パス名のコメントを出力しませせん。通常、コメントは、 -c オプションを使用するとき、各ディレクトリとそのディレクトリをクローズする前に出力されます。
-N dbdir
システムの getpwnam(3)getgrnam(3) (と関連する) ライブラリ呼び出しからの結果を使用するのではなく、 dbdir からユーザデータベースのテキストファイル master.passwd とグループデータベースのテキストファイル group グループを使用します。
-O onlypaths
このパス名のリストに含まれたファイルのみを含め (インクルードし) ます。
-P
あらゆる比較でシンボリックリンク自体を考慮するのではなく、ファイル階層のシンボリックリンクをたどりません。これは、デフォルトです。
-p path
カレントディレクトリの代わりに path をルートとするファイル階層を使用します。
-q
静かなモード。それが既に存在するので、“見つからない”ディレクトリを作成することができないとき、エラーを出しません。これは、ディレクトリがシンボリックリンクであるとき、起こります。
-R keywords
キーワードの現在のセットから指定された (空白類たはコンマで区切られた) キーワードを削除します。‘ all’が指定されるなら、他のすべてのキーワードを削除します。
-r
仕様に記述されていないファイル階層のあらゆるファイルを削除します。
-S
内部データ構造に仕様を読み込むとき、エントリをソートします。ソートは、 -C または -D オプションによって生成された出力の順序に影響し、ディレクトリツリーが仕様とチェックされるとき、見つからないエントリが作成されるか、または報告される順序にも影響します。

ソート順序は、サブディレクトリのためのエントリが他のエントリの後でソートすることを除いて、同じディレクトリ内のエントリが strcmp(3) によって使用される順序にソートされるということである、 -c オプションによって使用されるものと同じです。デフォルトで、 -S オプションが使用されないなら、同じディレクトリ内のエントリは、 (他のディレクトリのためのエントリから分離された) ともに集められますが、ソートされません。

-s seed
キーワード cksum が指定されたすべてのファイルを表わす標準エラー出力への単一のチェックサムを表示します。チェックサムは、指定された値でシード (種) とされます。
-t
仕様と一致するために、既存のファイルの更新時刻、デバイスのデバイスタイプとシンボリックリンクのターゲットを修正します。
-U
修正されたなら、不一致が、エラーであると見なされないことを除いて、 -u と同じです。
-u
仕様と一致するために、所有者、グループ、パーミッション、既存のファイルのフラグ、デバイスのデバイスタイプとシンボリックリンクのターゲットを修正します。あらゆる見つからないディレクトリ、デバイスまたはシンボリックリンクを作成します。ユーザ、グループとパーミッションは、作成される見つからないディレクトリに対してすべて指定されなければなりません。 -i オプションが与えられないなら、たとえ指定されたとしても、 schg と sappnd のフラグが設定されないことに注意してください。 -m が与えられるなら、これらのフラグは、リセットされます。成功すれば、0 のステータスで終了し、ファイル階層が仕様と一致しなかったなら、 2 のステータスで終了し、他のエラーが生じたなら、1 のステータスで終了します。
-W
新しいディレクトリを作成するか、または既存のエントリを変更するとき、所有権、モード、フラグまたは時間のような様々なファイル属性を設定することを試みません。このオプションは、 -U または -u とともに使用されるとき、もっとも役に立ちます。
-X exclude-file
指定されたファイルは、1 行に 1 つの仕様から除外される fnmatch(3) パターンに一致するファイルを含んでいます。パターンが‘ /’文字を含んでいるなら、(開始ディレクトリと関連する) 全てのパス名と一致します。そうでなければ、それは、ファイル名の部分 (basename) だけと一致します。コメントは、 exclude-list ファイルで許可されます。
-x
ファイル階層のマウントポイント以下に降下しません。

仕様のほとんどは、“keywords”からできています、すなわち、ファイルに関係のある値を指定する文字列。キーワードは、デフォルト値がなく、キーワードに値が設定されていないなら、それに基づいたチェックは、実行されません。

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

cksum
cksum(1) ユーティリティによって指定されたデフォルトのアルゴリズムを使用するファイルのチェックサム。
device
block または char ファイルタイプのために使用するデバイス番号。引数は、次の形式のうちの 1 つでなければなりません:
format, major, minor
format で指定されたオペレーティングシステムのための majorminor フィールドがあるデバイス。有効形式にについては、下記を参照してください。
format, major, unit, subunit
format で指定されたオペレーティングシステムのための major, unitsubunit フィールドがあるデバイス。 (現在、これは、 bsdos 形式によってのみサポートされています。)
number
(ファイルシステムで格納されるように) 不透明 (opaque) な数。

format に対して次の値が認識されます: native, 386bsd, 4bsd, bsdos, freebsd, hpux, isc, linux, netbsd, osf1, sco, solaris, sunos, svr3, svr4, と ultrix

より詳しい情報については、 mknod(8) を参照してください。

flags
シンボリック名としてのファイルフラグ。これらの名前に関する情報については、 chflags(1) を参照してください。フラグが設定されていないなら、文字列‘ none’は、現在のデフォルトを上書きするために使用されます。 schg と sappnd フラグは、特別に扱われることに注意してください ( -i-m オプションを参照)。
ignore
このファイルより下のあらゆるファイル階層を無視します。
gid
数値としてのファイルグループ。
gname
シンボリック名としてのファイルグループ。
link
シンボリックリンクが参照すると予想されるファイル。
md5
ファイルの MD5 暗号メッセージのダイジェスト。
md5digest
md5 と同意語。
mode
数値 (8 進数) またはシンボリック値としての現在のファイルのパーミッション。
nlink
ファイルにあると予想されるハードリンクの数。
nochange
このファイルまたはディレクトリが存在することをよく確かめますが、そうでなければすべての属性を無視します。
optional
ファイルは、オプションです。ファイルがファイル階層にないなら、それについてエラーを出しません。
ripemd160digest
rmd160 と同意語。
rmd160
ファイルの RMD-160 暗号のメッセージダイジェスト。
rmd160digest
rmd160 と同意語。
sha1
ファイルの SHA-1 暗号のメッセージダイジェスト。
sha1digest
sha1 と同意語。
sha256
ファイルの 256 ビットの SHA-2 暗号のメッセージダイジェスト。
sha256digest
sha256 と同意語。
sha384
ファイルの 384 ビットの SHA-2 暗号のメッセージダイジェスト。
sha384digest
sha384 と同意語。
sha512
ファイルの 512 ビットの SHA-2 暗号のメッセージダイジェスト。
sha512digest
sha512 と同意語。
size
ファイルのバイト単位のサイズ。
tags
コンマは、 -E-I に一致させられるタグで区切られます。これらは、先導するコンマ、または後続するコンマなしで指定されますが、それらで内部に格納されます。
time
秒とナノ秒単位のファイルの最後の更新時刻。値は、ピリオド文字とピリオドの後に正確に 9 つの数字を含んでいるべきです。
type
ファイルのタイプ。次のうちのいずれか 1 つに設定されます:

block
ブロックスペシャルデバイス
char
キャラクタスペシャルデバイス
dir
ディレクトリ
fifo
FIFO
file
通常ファイル
link
シンボリックリンク
socket
ソケット
uid
数値としてファイルの所有者。
uname
シンボリック名としてファイルの所有者。

キーワードのデフォルトのセットは、 flags, gid, link, mode, nlink, size, time, typeuid です。

仕様に 4 つのタイプの行があります:

  1. キーワードに対してグローバルな値を設定します。これは、空白類によって分離され、文字列‘ /set’に続いて空白類、キーワード/値のペアのセットが続くものから成ります。キーワード/値のペアは、空白類の文字なしで、キーワード、等号 (‘ =’) が続き、値が続くものから成ります。いったんキーワードが設定されたなら、その値は、リセットするかまたは、未設定となるまで、変更されません。
  2. キーワードに対すしてグローバルな値を未設定とします。これは、空白類によって分離され、文字列‘ /unset’に続いて空白類、1 つ以上のキーワードが後続するものから成ります。‘ all’が指定されるなら、すべてのキーワードを未設定とします。
  3. ファイル仕様、パス名、空白類が続き、0 以上の空白類で分離されたキーワード/値のペアが続くものから成ります。

    パス名は、空白類の文字に先行します。パス名は、階層中のファイルが、それらが一致する最初のパターンに関係している場合に、文字 (‘ [’, ‘ ]’, ‘ ?’または‘ *’) に一致する標準パス名のうちのいずれかを含むことができます。 mtree は、非印刷可能文字を含んでいるパス名をエンコード (符号化) するために (VIS_CSTYLE 形式の) strsvis(3) を使用します。空白類文字は、‘ \s’ (空白), ‘ \t’ (タブ), and ‘ \n’ (改行) としてエンコードされます。パス名中の‘ #’文字は、それらとコメントを区別するためにバックスラッシ‘ \’を前に付けることによってエスケープされます。

    キーワード/値のペアの各々は、空白類文字なしで、キーワード、等号 (‘ =’) が続き、キーワードの値が続くものから成ります。これらの値は、変更せずに、対応するキーワードのグローバルな値を上書きします。

    リストされた最初のパス名のエントリは、完全なパス名と相対パス名を混ぜ合わせることは、一貫して正確に動作するということを、これが保証するように、指定された‘ .’ディレクトリでなければなりません。指定された‘ .’ディレクトリのための複数のエントリは、許可されます。最後のそのようなエントリのための設定は、既存のエントリのものを上書きします。

    最初の文字でないスラッシュ (‘ /’) を含んでいるパス名は、(ツリーのルートに関連する) フルパスとして扱われます。パス名で参照されているすべての親ディレクトリは、存在していなければなりません。相対パス名によって使用されるカレントディレクトリのパスは、適切に更新されます。タイプが同じ ( -M が与えられなければ、その場合に、タイプは異なるかもしれません) であるなら、同じフルパスのための複数のエントリは、許可されます。この場合、最後のエントリのための設定が優先します。

    スラッシュを含んでいないパス名は、相対パスとして扱われます。ディレクトリを指定することによって、続くファイルは、そのディレクトリ階層で検索されます。

  4. 文字列‘ ..’だけを含んでいる行によって、(相対パスによって使用される) カレントディレクトリのパスは、1 レベル上昇します。

空行と最初の空白類でない文字がハッシュマーク (‘ #’) である行は、無視されます。

mtree ユーティリティは、成功すれば、0 のステータスで終了し、なんらかのエラーが生じたなら、1 のステータスで終了し、そしてファイル階層が仕様と一致しなかったなら、2 のステータスで終了します。

関連ファイル

/etc/mtree
システム仕様ディレクトリ

使用例

“トロイの木馬” (trojan horsed) だったシステムバイナリを検出するためには、ファイルシステムで mtree が実行されること、そして異なったマシンでまたは少なくとも暗号化された形式で格納された結果のコピーをお勧めします。 -s オプションのためのシード (種) は、明白な値であるべきではありません、そして最終のチェックサムは、いかなる状況であってもオンラインで格納されるべきではありません! その後、定期的に、 mtree は、前の値と比較して、オンライン仕様と最終のチェックサムに対して実行されるべきです。それらの修正されたバイナリに適合するオンライン仕様を変更することが悪いやつらのために可能ですが、同じ最終のチェックサム値を生成することは彼らのために可能であるべきではありません。最終のチェックサム値が変化するなら、どのバイナリの実際に修正されたか検出するために、仕様のオフラインのコピーを使用することができます。

-d オプションは、例えば、配布のためのディレクトリ階層を作成するために -U または -u と組み合わせて使用することができます。

互換性

-F オプションによって提供される互換性の shim は、設計によって不完全です。既知の制限が、下記に説明されます。

freebsd9 形式 (flavor) は、失敗してエラー報告するのではなく適切な uidgid キーワードでそれらを置き換えることによって、 unamegroup キーワードのための検索の失敗のデフォルト取り扱いを保持します。関連する -w フラグは、印刷される警告を起こし、出力されるキーワードがないということよりむしろ無操作 (no-op) です。後の振る舞いは、/set 文の外観で潜在的に危険であるので、エミュレートされません。

netbsd6 形式 (flavor) は、0 パディングされたナノ秒値のない seconds.nanoseconds として報告された時間が 100000000 未満であるという歴史的のバグを複製しません。

歴史

mtree ユーティリティは、 4.3BSD-Reno で登場しました。 optional キーワードは、 NetBSD 1.2 で登場しました。 -U オプションは、 NetBSD 1.3 で登場しました。 flagsmd5 キーワードと -i-m オプションは、 NetBSD 1.4 で登場しました。 device, rmd160, sha1, tagsall キーワード、 -D, -E, -I, -L, -l, -N, -P, -R, -W-X オプションとフルパスのサポートは、 NetBSD 1.6 で登場しました。 sha256, sha384sha512 キーワードは、 NetBSD 3.0 で登場しました。 -S オプションは、 NetBSD 6.0 で登場しました。ではじめて登場しました。
February 3, 2013 FreeBSD