.\" .\" Copyright (c) 2002 Dima Dorfman. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %FreeBSD: src/sbin/devfs/devfs.8,v 1.8 2003/09/14 13:41:57 ru Exp % .\" .\" $FreeBSD$ .Dd July 1, 2002 .Dt DEVFS 8 .Os .Sh 名称 .Nm devfs .Nd DEVFS 制御コマンド .Sh 書式 .Nm .Op Fl m Ar mount-point .Ar keyword .Ar argument ... .Sh 解説 .Nm ユーティリティは、マウントされた .Xr devfs 5 のプロパティを操作するためのインタフェースです。 .Pp .Ar keyword 引数で残りの引数のコンテキストを指定します。 例えば、 ほとんどのルールサブシステム関連のコマンドの前には .Cm rule キーワードをつけなければならないことになっています。 次のフラグはすべてのキーワードに共通のものです: .Bl -tag -offset indent .It Fl m Ar mount-point 操作する .Ar mount-point を指定します。 ここには、 .Xr devfs 5 がマウントされていなければなりません。 このオプションがない時には、 .Nm は .Pa /dev を操作します。 .El .Ss ルールサブシステム .Xr devfs 5 のルールサブシステムは、システム管理者が DEVFS の各ノードの属性を変更できる ようにするためのものです。 .\" XXX devfs node? entry? what? DEVFS マウントポイントにはそれぞれに .Dq ruleset (ルールセット) というルールのリストが関連づけられています。 デバイスドライバが新しいノードを作成する時には、 そのノードがユーザランドから見えるようになる前に それぞれのマウントポイントに関連づけられているルールセットの すべてのルールが適用されます (下記参照) 。 これによって、管理者がノードの可視性を含めた属性を変更することが できるようになっています。 例えば、 .Xr jail 2 の .Pa /dev にあるすべてのディスクノードを隠すというようなこともできます。 .Ss ルールの操作 ルール操作コマンドは .Cm rule キーワードに続けて使用します。 次のフラグは、すべてのルール操作コマンドに共通のものです : .Bl -tag -offset indent .It Fl s Ar ruleset .Ar ruleset で指定したルールセットを操作します。 このフラグが指定されていない時は、 指定したマウントポイントに現在関連づけられているルールセットを 操作します。 .El .Pp 次のコマンドが使用できます: .Bl -tag -offset indent .It Cm rule add Oo Ar rulenum Oc Ar rulespec .Ar rulespec (下記参照) で、記述されたルールをルールセットに追加します。 ルール番号は、 .Ar rulenum が明示的に指定されている場合にはその番号に、 指定されていない場合には自動的にカーネルによって決められます。 .It Cm rule apply Ar rulenum | rulespec ルール番号 .Ar rulenum または .Ar rulespec で、指定されたルールをマウントポイントに適用します。 .Dq 適用される ルールには条件があって、マウントポイントのすべてのノードに対して チェックを行い、条件が一致すれば指定のアクションを起こします。 .It Cm rule applyset ルールセットのすべてのルールをマウントポイントに適用します (上記 .Dq apply の説明を参照) 。 .It Cm rule del Ar rulenum ルールセットからルール番号 .Ar rulenum のルールを削除します。 .It Cm rule delset 指定したルールセットのすべてのルールを削除します。 .It Cm rule show Op Ar rulenum .Ar rulenum で指定したルール番号のルール、 またはルールセットのすべてのルールを表示します。 出力行は (ルール毎に 1 行ずつ) 正しい .Ar rulespec Ns になっています。 .It Cm rule showsets 設定されているルールセットの番号を表示します。 .It Cm ruleset Ar ruleset .Ar ruleset で指定した番号のルールセットをマウントポイントのカレントルールセットにします。 .El .Ss ルール仕様 ルールには 2 つのパートがあります: 条件部とアクション部です。 条件部でルールを適用する DEVFS ノードを指定し、 アクション部でルールが当てはまるノードに何をするかを指定します。 例えば、メジャー番号が 53 のすべてのデバイスの GID を .Dq Li games に設定するルールを書くこともできます。 ルール指定の最初のトークンがダッシュ文字 1 つ .Pq Sq Fl の場合、ルールは標準入力から読み込まれて残りの指定は無視されます。 .Pp 次のような条件が使用できます。 デバイスをチェックする時には、条件は AND されます。 OR 条件を使いたい時には、複数のルールを書いてください。 .Bl -tag -offset indent .It Cm major Ar majdev メジャー番号が .Ar majdev のすべてのノードに適合します。 .It Cm path Ar pattern パス名が .Ar pattern に合うノードすべてに適合します。 このパターンは .Xr glob 3 と同じパターンで解析されます。 .It Cm type Ar devtype タイプが .Ar devtype のすべてのノードに適合します。 使用できるタイプは .Cm disk , mem , tape および .Cm tty です。 .El .Pp 次のようなアクションが使用できます。 条件部とアクション部の間には特にデリミタはありませんが、 混乱することはないでしょう。 .Bl -tag -offset indent .It Cm group Ar gid ノードのグループ ID を .Ar gid に設定します。 グループ名 .Pa ( /etc/group で照会されます) または、数値で指定します。 .It Cm hide ノードを隠します。 隠されたノードは、マニュアルで .Xr mknod 8 を使用するか、 .Cm unhide アクションを使用するとまた見えるようになります。 .It Cm include Ar ruleset ルールセット番号が .Ar ruleset のルールセットのすべてのルールをノードに適用します。 これによってノードが変更されるとは限りません (例えば、ルールセットに一致するルールがない場合など)。 .It Cm mode Ar filemode ファイルのモードを .Ar filemode に設定します。 8 進数として解釈されます。 .It Cm user Ar uid ユーザ ID を .Ar uid に設定します。ユーザ名 .Pa ( /etc/passwd で照会されます) または数値で指定します。 .It Cm unhide ノードを見えるようにします。 .El .Sh 実装に関する注 ルールセットは、最初に参照される時にカーネルによって作成され、 最後の参照がなくなる時に削除されます。 すなわち、ルールセットはルールが追加される時かどこかのマウントポイントの カレントルールセットに設定された時に作成されます。 また、セットの中の最後のルールが削除される時でもう他からの参照もない (つまり、他のルールにインクルードされてもなく、 どのマウントポイントのカレントルールセットにもなっていない) 時に削除されます。 .Pp ルールセット 0 番は すべての新しいマウントポイントのデフォルトルールセットです。 このルールセットは常に空で、変更や削除はできず、 .Cm showsets コマンドの出力にも表示されません。 .Pp ルールやルールセットは特定のマウントポイント毎ではなく、 システム全体で一意です。 つまり、 .Cm showsets は、 .Fl m で指定したマウントポイントにかかわらず、常に同じ情報を表示します。 マウントポイントが有効なのは、 カレントルールセットを変更する時や apply コマンドを使用する時だけです。 .Sh 実行例 システム起動時には、 ルールセット 0 番のみが存在しますが、 このルールセットは後から変更することができないので、 ルールを追加する前に別のルールセットを作成しなければなりません。 以下の例ではほとんど .Fl m オプションを指定していませんので、 操作は .Pa /dev に対して実行されることに注意してください (これは、ノードのプロパティを変更するものだけが問題だからです) 。 .Pp .Dl "devfs ruleset 10" .Pp ルールセット 10 番を .Pa /dev のカレントルールセットに指定しています (もし、存在していなければ作成されます)。 .Pp .Dl "devfs rule add path speaker mode 666" .Pp パス名が .Dq Li speaker にマッチするすべてのノード (これは .Pa /dev/speaker だけですが) をファイルモード 666 (すべてのユーザが読み書き可能) にするルールを追加しています。 気をつけて欲しいのは、そのようなノードが既に存在する場合には、 このルール (やルールセット) が明示的に適用される (下記参照) まで そのノードは変更されないということです。 モードが変更 .Em される のはルールが追加された .Em 後に ノードが作成された場合です (つまり、上記のルールが追加された後に .Pa atspeaker モジュールがロードされた場合)。 .Pp .Dl "devfs rule applyset" .Pp カレントルールセットのすべてのルールを、 存在するすべてのノードに適用しています。 つまり、上記のルールが .Pa /dev/speaker を作成した後に追加された場合に、 このコマンドを使用してルール通りにファイルモードを 666 にすることができます。 .Pp .Dl devfs rule add path "snp*" mode 660 group snoopers .Pp (引数を引用符で囲うのは .Cm パス名 がシェルのファイルグロブ機能で展開されるのを防ぐ必要があるからです。) パス名が .Dq Li snp* , にマッチするすべてのデバイスのファイルモードを 660 に、GID を .Dq Li snoopers に設定します。 このようにすると、 .Dq Li snoopers グループのユーザが .Xr snp 4 デバイスを使えるようになります。 .Pp .Dl "devfs rule -s 20 add major 53 group games" .Pp ルールセット 20 番にルールを追加します。 このルールセットは どこのマウントポイントのカレントルールセットにもなっていないので、 このルールが自動的に適用されることはありません (後でルールセット 20 番がどこかのマウントポイントの カレントルールセットになるまでは)。 それでも以下のようにして、明示的にルールを適用することができます: .Pp .Dl "devfs -m /my/jail/dev rule -s 20 applyset" .Pp このコマンドではルールセット 20 番のすべてのルールを .Pa /my/jail/dev の DEVFS マウントに適用しています。 このときには、ルールセット 20 番がそのマウントポイントの カレントルールセットであるかどうかにかかわりなくルールが適用されます。 .Pp .Dl "devfs rule apply hide" .Pp このルールには条件部がありませんので、 .Pq Cm hide アクションがすべてのノードに適用されます。 すべてのノードを非表示にするのはあまり便利ではありませんので、 下のようにして取り消すことができます: .Pp .Dl "devfs rule apply unhide" .Pp このコマンドは .Cm unhide をすべてのノードに適用して、 再び表示されるようにしています。 .Pp .Dl "cat my_rules | devfs rule -s 10 add -" .Pp .Pa my_rules ファイルに書いてあるルールをすべてルールセット 10 番に追加します。 .Pp .Dl "devfs rule -s 20 show | devfs rule -s 10 add -" .Pp .Cm show コマンドの出力が有効なルールになっているので、 この機能を利用してルールセットをコピーすることができます。 上のコマンドでは、ルールセット 20 番のルールをすべて ルールセット 10 番にコピーしています。 ルール番号は予約されていますが、 ルールセット 10 番にはすでに 衝突しない番号のルールが入っています (その番号も予約されます)。 .Sh 関連項目 .Xr chmod 1 , .Xr jail 2 , .Xr glob 3 , .Xr devfs 5 , .Xr chown 8 , .Xr jail 8 , .Xr mknod 8 .Sh 作者 .An Dima Dorfman