DEVFS(8) | FreeBSD System Manager's Manual | DEVFS(8) |
名称
devfs — DEVFS 制御書式
devfs | [ -m mount-point] keyword argument ... |
解説
devfs ユーティリティは、マウントされた devfs(5) のプロパティを操作するためのインタフェースを提供しています。keyword 引数は、引数の残りのコンテキストを決定します。例えば、ルールサブシステムに関連するコマンドのほとんどは、 rule キーワードを前に付けなければなりません。次のフラグは、すべてのキーワードに共通です:
- -m mount-point
- devfs(5) マウントであると予想される mount-point で動作します。このオプションが指定されないなら、 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 ノードを指定し、アクション部でルールが当てはまるノードに何をするかを指定します。例えば、テープ型 (type tape) のすべてのデバイスのために GID を“operator
”に設定するルールを書くこともできます。ルール指定の最初のトークンがダッシュ文字 1 つ (‘
-’) の場合、ルールは、標準入力から読み込まれて残りの指定は、無視されます。
次のような条件が使用できます。デバイスをチェックする時には、条件は、AND されます。 OR 条件を使いたい時には、複数のルールを書いてください。
- path pattern
- glob(3) スタイルのパータンとして解釈される pattern に適合するパスに対してどんなノードも適合します。
- type devtype
- タイプが devtype のすべてのノードに適合します。使用できるタイプは、 disk, mem, tape と tty です。
次のようなアクションが使用できます。条件部とアクション部の間には、特にデリミタはありませんが、混乱することはないでしょう。
- group gid
- ノードのグループ ID を gid に設定します。グループ名 ( /etc/group で照会されます) または、数値で指定します。
- hide
- ノードを隠します。隠されたノードは、マニュアルで mknod(8) を使用するか、 unhide アクションを使用するとまた見えるようになります。ディレクトリノードを隠すことは、その子どものすべてのノードを効果的に隠します。
- include ruleset
- ルールセット番号が ruleset のルールセットのすべてのルールをノードに適用します。これによってノードが変更されるとは限りません (例えば、ルールセットに一致するルールがない場合など)。参照される ruleset に含まれるコマンドは、決定されていません。
- mode filemode
- ファイルモードを chmod(1) で解釈される filemode に設定します。
- user uid
- ユーザ ID を uid に設定します。ユーザ名 ( /etc/passwd で照会されます) または数値で指定します。
- unhide
- ノードを見えるようにします。ノードがサブディレクトリに存在するなら、すべての親ディレクトリのノードは、ノードにアクセスすることができるように目に見えなければなりません。
実装に関する注
ルールセットは、最初に参照される時にカーネルによって作成され、最後の参照がなくなる時に削除されます。すなわち、ルールセットは、ルールが追加される時かどこかのマウントポイントのカレントのルールセットに設定された時に作成され、ルールセット中の最後のルールが削除されるとき、および、もう他からの参照もない (つまり、他のルールにインクルードされてもなく、どのマウントポイントのカレントのルールセットにもなっていない) ときに削除されます。ルールセット 0 番は、すべての新しいマウントポイントのデフォルトルールセットです。このルールセットは、常に空で、変更や削除はできず、 showsets コマンドの出力にも表示されません。
ルールやルールセットは、特定のマウントポイント毎ではなく、システム全体で一意です。つまり、 showsets は、 -m で指定したマウントポイントにかかわらず、常に同じ情報を表示します。マウントポイントが有効なのは、カレントのルールセットを変更する時や apply コマンドを使用する時だけです。
関連ファイル
- /etc/defaults/devfs.rules
- デフォルトの devfs 設定ファイル。
- /etc/devfs.rules
- ローカルの devfs 設定ファイル。ここのルールセットは、同じルールセット番号で、 /etc/defaults/devfs.rules のそれらを上書きします、そうでなければ、事実上、2 つのファイルは、マージされます。
- /etc/devfs.conf
- ブート時の devfs 設定ファイル。
- /usr/share/examples/etc/devfs.conf
- ブート時の devfs 設定ファイルの例。
実行例
システム起動時には、ルールセット 0 番のみが存在しますが、このルールセットは、後から変更することができないので、ルールを追加する前に別のルールセットを作成しなければなりません。以下の例ではほとんど -m オプションを指定していませんので、操作は、 /dev に対して実行されることに注意してください (これは、ノードのプロパティを変更するものだけが問題だからです)。ルールセット 10 が /dev のためのカレントのルールセットであるべきであることを指定します (まだ存在していないなら、作成されます):
devfs ruleset 10
(すべてのユーザが読み込み書き込みする) ファイルモード 666 にするために“ speaker
”に一致する (これは、 /dev/speaker のみです) パスがあるすべてのノードにルールを追加します。そのようなノードが既に存在するなら、そして、このルール (またはルールセット) が明白に適用されないなら、それらのモードは、変更されないことに注意してください (下記を参照)。モードは、ルールが追加された 後に ノードが作成されるなら、変更される かもしれません (例えば、上記のルールが追加された後に atspeaker モジュールがロードされます):
devfs rule add path speaker mode 666
カレントのルールセットのすべてのルールを、すべての存在するノードに適用します。例えば、 /dev/speaker が作成した後に、下記のルールが追加されたなら、このコマンドによって、ファイルモードは、次のルールによって示されるように、666 に変更されます:
devfs rule applyset
“ snp*
”に一致するパスがあるすべてのデバイスについて、ファイルモードを 660 に、GID を“ snoopers
”に設定します。これは、 snp(4) デバイスを使用するために“ snoopers
”グループのユーザを許可します ( path への引数をクォートすることは、シェルのグロブ (globbing) 機能を無効にするためにしばしば必要です):
devfs rule add path snp* mode 660 group snoopers
ルールセット番号 20 にルールを追加します。このルールセットは、あらゆるマウントポイントのためのカレントのルールセットでないので、(ルールセット 20 が、後になって、いくつかのマウントポイントのためにカレントのルールセットになるまで) このルールは、決して自動的に適用されません:
devfs rule -s 20 add type disk group wheel
ルールセット番号 20 のすべてのルールを /my/jail/dev の DEVFS マウントに明白に適用します: ルールセット 20 が、そのマウントポイントのためのカレントのルールセットでないことは問題となりません。ルールは、それでも適用されます:
devfs -m /my/jail/dev rule -s 20 applyset
次のルールには、条件部がないので、アクション ( hide) は、すべてのノードに適用されます:
devfs rule apply hide
すべてのノードを隠すことは、あまり有用ではないので、それを取り消すことができます。次は、すべてのノードを再び現れるようにして、 unhide をすべてのノードに適用します:
devfs rule apply unhide
ファイル my_rules のすべてのルールをルールセット 10 に追加します:
devfs rule -s 10 add - < my_rules
下記は、ルールセット 20 のすべてのルールをルールセット 10 にコピーします。ルール番号は、保存されますが、ルールセット 10 には、衝突しない番号のルールが既にあるかもしれません (これらは、保存されます)。 show は、有効なルールを出力するので、ルールセットをコピーするためにこの機能を使用することができます:
devfs rule -s 20 show | devfs rule -s 10 add -
関連項目
chmod(1), jail(2), glob(3), devfs(5), devfs.conf(5), devfs.rules(5), chown(8), jail(8), mknod(8)作者
July 12, 2013 | FreeBSD |