スポンサーリンク

DEVFS(8) FreeBSD システム管理者マニュアル DEVFS(8)

名称

devfs − DEVFS 制御コマンド

書式

devfs [−m mount-point] keyword argument ...

解説

devfs ユーティリティは、マウントされた devfs(5) のプロパティを操作するた めのインタフェースです。

keyword 引数で残りの引数のコンテキストを指定します。例えば、ほとんどの ルールサブシステム関連のコマンドの前には rule キーワードをつけなければな らないことになっています。次のフラグはすべてのキーワードに共通のものです:

             −m mount-point

操作する mount-point を指定します。ここには、 devfs(5) がマウントされていなければなりません。このオプションが ない時には、 devfs/dev を操作します。

ルールサブシステム
devfs(5) のルールサブシステムは、システム管理者が DEVFS の各ノードの属性 を変更できるようにするためのものです。 DEVFS マウントポイントにはそれぞれ に ‘‘ruleset’’ (ルールセット) というルールのリストが関連づけられていま す。デバイスドライバが新しいノードを作成する時には、そのノードがユーザラ ンドから見えるようになる前にそれぞれのマウントポイントに関連づけられてい るルールセットのすべてのルールが適用されます (下記参照) 。これによって、 管理者がノードの可視性を含めた属性を変更することができるようになっていま す。例えば、 jail(2)/dev にあるすべてのディスクノードを隠すというよう なこともできます。

ルールの操作
ルール操作コマンドは rule キーワードに続けて使用します。次のフラグは、す べてのルール操作コマンドに共通のものです :

−s ruleset
ruleset
で指定したルールセットを操作します。このフラグ が指定されていない時は、指定したマウントポイントに現在 関連づけられているルールセットを操作します。

次のコマンドが使用できます:

rule add [
rulenum
] rulespec
rulespec
(下記参照) で、記述されたルールをルールセット に追加します。ルール番号は、 rulenum が明示的に指定され ている場合にはその番号に、指定されていない場合には自動 的にカーネルによって決められます。

rule apply rulenum | rulespec
ルール番号 rulenum または rulespec で、指定されたルール をマウントポイントに適用します。 ‘‘適用される’’ ルール には条件があって、マウントポイントのすべてのノードに対 してチェックを行い、条件が一致すれば指定のアクションを 起こします。

rule applyset
ルールセットのすべてのルールをマウントポイントに適用し ます (上記 ‘‘apply’’ の説明を参照) 。

rule del rulenum
ルールセットからルール番号 rulenum のルールを削除しま す。

rule delset
指定したルールセットのすべてのルールを削除します。

rule show [rulenum]
rulenum
で指定したルール番号のルール、またはルールセッ トのすべてのルールを表示します。出力行は (ルール毎に 1 行ずつ) 正しい rulespecになっています。

rule showsets
設定されているルールセットの番号を表示します。

ruleset ruleset
ruleset
で指定した番号のルールセットをマウントポイント のカレントルールセットにします。

ルール仕様
ルールには 2 つのパートがあります: 条件部とアクション部です。条件部でルー ルを適用する DEVFS ノードを指定し、アクション部でルールが当てはまるノード に何をするかを指定します。例えば、メジャー番号が 53 のすべてのデバイスの GID を ‘‘games’’ に設定するルールを書くこともできます。ルール指定の最初の トークンがダッシュ文字 1 つ (‘’) の場合、ルールは標準入力から読み込まれ て残りの指定は無視されます。

次のような条件が使用できます。デバイスをチェックする時には、条件は AND さ れます。 OR 条件を使いたい時には、複数のルールを書いてください。

major majdev
メジャー番号が majdev のすべてのノードに適合します。

path pattern
パス名が pattern に合うノードすべてに適合します。このパ ターンは glob(3) と同じパターンで解析されます。

type devtype
タイプが devtype のすべてのノードに適合します。使用でき るタイプは disk, mem, tape および tty です。

次のようなアクションが使用できます。条件部とアクション部の間には特にデリ ミタはありませんが、混乱することはないでしょう。

group gid
ノードのグループ ID を gid に設定します。グループ名 (/etc/group で照会されます) または、数値で指定します。

hide
ノードを隠します。隠されたノードは、マニュアルで mknod(8) を使用するか、 unhide アクションを使用するとま た見えるようになります。

include ruleset
ルールセット番号が ruleset のルールセットのすべてのルー ルをノードに適用します。これによってノードが変更される とは限りません (例えば、ルールセットに一致するルールが ない場合など)。

mode filemode
ファイルのモードを filemode に設定します。 8 進数として 解釈されます。

user uid
ユーザ ID を uid に設定します。ユーザ名 (/etc/passwd で 照会されます) または数値で指定します。

unhide
ノードを見えるようにします。

実装に関する注

ルールセットは、最初に参照される時にカーネルによって作成され、最後の参照 がなくなる時に削除されます。すなわち、ルールセットはルールが追加される時 かどこかのマウントポイントのカレントルールセットに設定された時に作成され ます。また、セットの中の最後のルールが削除される時でもう他からの参照もな い (つまり、他のルールにインクルードされてもなく、どのマウントポイントの カレントルールセットにもなっていない) 時に削除されます。

ルールセット 0 番はすべての新しいマウントポイントのデフォルトルールセット です。このルールセットは常に空で、変更や削除はできず、 showsets コマンド の出力にも表示されません。

ルールやルールセットは特定のマウントポイント毎ではなく、システム全体で一 意です。つまり、 showsets は、 −m で指定したマウントポイントにかかわら ず、常に同じ情報を表示します。マウントポイントが有効なのは、カレントルー ルセットを変更する時や apply コマンドを使用する時だけです。

実行例

システム起動時には、ルールセット 0 番のみが存在しますが、このルールセット は後から変更することができないので、ルールを追加する前に別のルールセット を作成しなければなりません。以下の例ではほとんど −m オプションを指定して いませんので、操作は /dev に対して実行されることに注意してください (これ は、ノードのプロパティを変更するものだけが問題だからです) 。

devfs ruleset 10

ルールセット 10 番を /dev のカレントルールセットに指定しています (もし、 存在していなければ作成されます)。

devfs rule add path speaker mode 666

パス名が ‘‘speaker’’ にマッチするすべてのノード (これは /dev/speaker だけ ですが) をファイルモード 666 (すべてのユーザが読み書き可能) にするルール を追加しています。気をつけて欲しいのは、そのようなノードが既に存在する場 合には、このルール (やルールセット) が明示的に適用される (下記参照) まで そのノードは変更されないということです。モードが変更 されるのはルールが追 加された 後にノードが作成された場合です (つまり、上記のルールが追加された 後に atspeaker モジュールがロードされた場合)。

devfs rule applyset

カレントルールセットのすべてのルールを、存在するすべてのノードに適用して います。つまり、上記のルールが /dev/speaker を作成した後に追加された場合 に、このコマンドを使用してルール通りにファイルモードを 666 にすることがで きます。

devfs rule add path snp* mode 660 group snoopers

(引数を引用符で囲うのは パス名がシェルのファイルグロブ機能で展開されるの を防ぐ必要があるからです。) パス名が ‘‘snp*’’, にマッチするすべてのデバイ スのファイルモードを 660 に、GID を ‘‘snoopers’’ に設定します。このように すると、 ‘‘snoopers’’ グループのユーザが snp(4) デバイスを使えるようにな ります。

devfs rule -s 20 add major 53 group games

ルールセット 20 番にルールを追加します。このルールセットはどこのマウント ポイントのカレントルールセットにもなっていないので、このルールが自動的に 適用されることはありません (後でルールセット 20 番がどこかのマウントポイ ントのカレントルールセットになるまでは)。それでも以下のようにして、明示的 にルールを適用することができます:

devfs -m /my/jail/dev rule -s 20 applyset

このコマンドではルールセット 20 番のすべてのルールを /my/jail/dev の DEVFS マウントに適用しています。このときには、ルールセット 20 番がそのマ ウントポイントのカレントルールセットであるかどうかにかかわりなくルールが 適用されます。

devfs rule apply hide

このルールには条件部がありませんので、 (hide) アクションがすべてのノード に適用されます。すべてのノードを非表示にするのはあまり便利ではありません ので、下のようにして取り消すことができます:

devfs rule apply unhide

このコマンドは unhide をすべてのノードに適用して、再び表示されるようにし ています。

cat my_rules | devfs rule -s 10 add -

my_rules ファイルに書いてあるルールをすべてルールセット 10 番に追加しま す。

devfs rule -s 20 show | devfs rule -s 10 add -

show コマンドの出力が有効なルールになっているので、この機能を利用してルー ルセットをコピーすることができます。上のコマンドでは、ルールセット 20 番 のルールをすべてルールセット 10 番にコピーしています。ルール番号は予約さ れていますが、ルールセット 10 番にはすでに衝突しない番号のルールが入って います (その番号も予約されます)。

関連項目

chmod(1), jail(2), glob(3), devfs(5), chown(8), jail(8), mknod(8)

作者

Dima Dorfman

FreeBSD 10.0 July 1, 2002 FreeBSD 10.0

スポンサーリンク