この章では、NIS+ テーブルとその管理方法について説明します。(デフォルトの NIS+ テーブルの詳細は、付録 C 「NIS+ テーブルの情報」 を参照してください。)
NIS+ で使われる情報は NIS+ テーブルに格納されます。Solaris 8 リリースに付属のデフォルトの NIS+ システムテーブルについては、付録 C 「NIS+ テーブルの情報」 を参照してください。
これらのコマンドの構文やオプションなどの詳細は、nis+(1) のマニュアルページを参照してください。
NIS+ テーブルに関連した作業のうちいくつかは、 Solstice AdminSuiteTMツールを使用すると容易に行えます。
nistbladm コマンドは NIS+ テーブル管理コマンドの中でも最も重要なコマンドであり、NIS+ ディレクトリオブジェクトに格納されている NIS+ テーブル上で使います。nistbladm コマンドを使うと、NIS+ テーブルまたはそのエントリを作成、修正、削除できます。ただし、ディレクトリのないところにテーブルを作成はできません。同様に、テーブルと列が定義されていないところにエントリを追加できません。
テーブルを作成するには、そのテーブルが所属するディレクトリに対する作成権が必要です。テーブルを削除するには、そのディレクトリに対する削除権が必要です。テーブルの内容を変更 (エントリの追加、変更、または削除) するには、そのテーブルまたはエントリの変更権が必要です。
nistbladm コマンドの一般的な構文は次のとおりです。
nistbladm -a column=" value" ¥ column=" value" ¥ column=" value" ¥ ... tablename nistbladm -a indexedname |
nistbladm options ¥ [columspec | columnvalue] ¥ [tablename | indexedname ] |
columnspec には、テーブル内に作成する列を指定する (具体的な指定方法については、「テーブルの列を指定する」 を参照)
columnvalue には、tablename によって表されるテーブルの中の特定のセルを指定する (具体的な指定方法については、「nistbladm と列の値」を参照)
tablename には、テーブル名 (hosts.org_dir.doc.com. など) を指定する
indexedname には、特定のテーブルの中の特定のセル値を指定する (具体的な指定方法については、「nistbladm と列の値」を参照) 。indexedname は本質的に、columnvalue と tablename の役割を兼ね備えている
オプション |
説明 |
---|---|
-a | -A |
既存の NIS+ テーブルにエントリを追加する。-a を指定した場合、nistbladm コマンドを実行すると既存のエントリが上書きされる場合には、エラーが返される。-A を指定した場合、nistbladm コマンドが既存エントリを上書きする場合でも強制的に実行される (「エントリをテーブルに追加する」を参照) |
-D defaults |
別のデフォルト特性を使ってオブジェクトを作成する (詳細は、デフォルトの nistbladm(1) のマニュアルページを参照) |
-d |
テーブルを破棄する (「テーブルを削除する」を参照) |
-c |
テーブルを作成する ( 「テーブルを作成する」を参照) |
-r | -R |
既存の NIS+ テーブルからエントリ (1 つまたは複数) を削除する。-r を指定した場合、複数のエントリの削除につながる nistbladm コマンドは実行されず、エラーが返される。-R を指定した場合、複数のエントリの削除につながる nistbladm コマンドであっても強制的に実行される (「テーブルからエントリを削除する」を参照) |
-m |
テーブルエントリを修正するためのオプション。旧リリースとの互換性を維持するためにだけ残されている。エントリを修正するのであれば、-e オプションまたは -E オプションを使うほうが望ましい |
-e | -E |
既存の NIS+ テーブルのエントリを修正する。-e を指定した場合、複数のエントリの変更につながる nistbladm コマンドは実行されず、エラーが返される。-E を指定した場合、複数のエントリの変更につながる nistbladm コマンドであっても強制的に実行される (「エントリを修正する」を参照) |
列の値は、テーブル内の個々のエントリを識別するために使われます。列の値の書式は次のとおりです。
columname="value", ¥ columnname="value ", ... |
columname はテーブルの列名を示す
value は列内の特定のセルの内容 (値) を示す。この値により、テーブルの行を識別することができる (column=value を指定してテーブルデータを作成または修正する場合は、必ず value を引用符で囲むこと)
たとえば、マシン名と IP アドレスを登録した hosts という名前のテーブルがあるとします。
表 14-2 サンプルテーブル hosts
IP アドレス |
名前 |
別名 |
---|---|---|
129.146.168.4 |
altair | |
129.146.168.119 |
deneb |
|
129.146.168.120 |
regulus |
dnsmaster |
129.146.168.121 |
regulus |
dnsmaster |
129.146.168.11 |
sirius |
このサンプルテーブルの altair エントリ (行) を識別するには、次の 3 通りの column=value の指定方法が考えられます。
name=altair
address=129.146.168.4
name=altair,address=129.146.168.4.
上記のテーブルで注目すべき点としては、regulus という名前のマルチホームマシンに 2 つの IP アドレスが割り当てられていることです。この場合、ホストマシン regulus の column=value は 2 つの行を示します。そこで、最初の regulus 行だけを識別したいという場合は次のいずれかを入力します。
address=129.146.168.120
address=129.146.168.120.,name=regulus,dnsmaster
nistbladm コマンドの一部のオプションには、テーブル内のすべての列に column=value を指定しなければならないものがあります。
NIS+ テーブルを作成する際は、S フラグまたは I フラグを指定し、1 つまたは複数の列が検索可能になるようにします (「テーブルの列を指定する」を参照)。なお、niscat -o tablename と入力すれば、テーブルの列とその特性を一覧表示できます。
テーブル内で行の「識別」に使われるのが検索可能列です。検索可能列の値 (値の組み合わせ) はすべて一意でなければなりません。したがって、検索可能列が 1 つしかないテーブルの場合、各行の検索可能列の値はすべて一意でなければならず、重複は一切許されません。
ここで、city という名前の検索可能列と country という名前の検索不可列からなるテーブルを作成する場合を想定します。次に示すのは、正しい (City 列に重複がない) テーブルの例です。
City |
Country |
---|---|
San Francisco |
United States |
Santa Fe |
United States |
Santiago |
Chile |
次は正しくない (City 列に重複がある) テーブルの例です。
City |
Country |
---|---|
London |
Canada |
London |
England |
1 つのテーブルに検索可能列が複数ある場合は、検索可能列どうしの値の組み合わせが一意であればかまいません。ここでは、Lastname および Firstname という 2 つの検索可能列と、city という検索不可列からなるテーブルを作成する場合を想定します。次に示すのは、正しい (検索可能列の値の組み合わせに重複がない) テーブルの例です。
Lastname |
Firstname |
City |
---|---|---|
Kuznetsov |
Sergei |
Odessa |
Kuznetsov |
Rima |
Odessa |
Sergei |
Alex |
Odessa |
次は正しくない (検索可能列の値の組み合わせに重複がある) テーブルの例です。
Lastname |
Firstname |
City |
---|---|---|
Kuznetsov |
Rima |
Odessa |
Kuznetsov |
Rima |
Chelm |
NIS+ のコマンドはいずれも、検索可能列の値に基づいて特定の行を識別します。
NIS+ には、テーブル名と列の値の検索基準の組み合わせ (これを「インデックス名」という) によって特定のテーブルの特定のエントリを識別する、というテーブル管理の方法もあります。インデックス名の書式は次のとおりです。
[search_criteria], tablename.directory |
search_criteria には検索基準を指定しますが、このとき角カッコ ([]) で囲むのを忘れないでください。書式は次のとおりです。
columname=value, ¥ columname=value ,... |
columname=value にはテーブルの検索可能列の値を指定します (「nistbladm と列の値」を参照)。
たとえば、表 14-2 の altair エントリを識別するには、次のようにインデックス名を指定します。
[addr=129.146.168.4,cname=altair],hosts.org_dir.doc.com. |
nistbladm -R コマンドを使用すると、間になにも入れない角カッコ [ ]をすべてのテーブル列を指定するワイルドカードとして使用し、テーブル中のすべてのエントリを一度に削除できます。
Solaris の NIS+ 環境には 3 種類のグループがあります。
UNIXグループ - UNIX グループに関する情報は groups.org_dir テーブルに格納される。UNIX グループ情報の管理には nistbladm コマンドを使う
ネットグループ - ネットグループに関する情報は netgroups.org_dir テーブルに格納される。ネットグループ情報の管理には nistbladm コマンドを使う
NIS+ グループ - NIS+ グループに関する情報は groups_dir ディレクトリオブジェクトのテーブル (1 つまたは複数) に格納される。NIS+ グループ情報の管理には nisgrpadm コマンドを使う
NIS+ グループの管理に nistbladm を使うことはできません。
その他のグループの詳細は、「Solaris グループ」を参照してください。
NIS+ テーブルには、少なくとも 1 つの列が必要で、その列のうち少なくとも 1 つが検索可能でなければなりません。NIS+ テーブルを作成するには、nistbladm コマンドに -c オプションを付けて使います。
nistbladm -c tabletype columnspec ¥ ... tablename |
tabletype は、単にテーブルをあるテーブルクラスに所属するものとして識別する文字列です。
columnspec 引数には、各列の名前と特性を指定します。1 つの columnspec には、新規テーブルに含める、それぞれの列を入力してください。
nistbladm -c tabletype columnspec columnspec ¥ columnspec tablename |
columnspec の書式については、「テーブルの列を指定する」を参照してください。
各 columnspec エントリは、以下の形式のように、2 つから 4 つの要素から成っています。
name=type,rights: |
構成要素 |
説明 |
---|---|
name |
列の名前 |
= |
等号記号 (必須) |
type |
(オプション) S、I、または C で列の種類を指定する。表 14-4 参照。type を指定しないと、その列はデフォルトとなる |
rights |
(オプション) アクセス権を指定する。ここに指定したアクセス権は、テーブル全体や特定エントリに付与したアクセス権より優先される。access を指定しないと、その列のアクセス権は、テーブル全体や特定エントリに付与したアクセス権になる。アクセス権の構文については、「コマンドによるアクセス権の指定」を参照 |
列には、次に挙げる種類のうち 1 つを指定できます。
表 14-4 列の種類
種類 |
説明 |
---|---|
|
等号 (=) のみ。列の種類は指定しない。その列は検索可能にもならなければ、暗号化されることもない |
S |
検索可能 |
I |
大文字と小文字の区別をしない。NIS+ コマンドで列を検索する場合、大文字と小文字を区別しない |
C |
暗号化する |
NIS+ の各コマンドは、列全体を調べ、検索可能列の値に基づいて個々の行を識別します。検索可能列は S フラグまたは I フラグで指定します (データベースの分野では、検索可能列のことをキー列といいます)。テーブルの最初の列は必ず検索可能にします。その他の列は検索可能にする必要はありません。検索可能列はそのテーブル内の行の識別に使われるため、検索可能列を複数にする場合は、最初の列とその隣の列を検索可能にします。検索可能列の間に通常の列を置くことはできません。したがって、常に先頭の列を検索可能とし、検索可能列の数を 1 つ増やすたびにその隣の列を検索可能にしていきます (検索可能列の詳細は、「nistbladm、検索可能列、キー、列の値」を参照)。
アクセス権だけを指定する場合、コンマを使用する必要はありません。-S、-I、-C フラグの 1 つか複数を指定する場合は、アクセス権の前にコンマを追加します。
以下の例では、上と同じテーブルが作成されますが、最初の 2 列にはその列に固有なアクセス権が付与されます。
master% nistbladm -c depts Name=I,w+m Site=w+m Name=C ¥ divs.mydir.doc.com. |
テーブル作成時の列のアクセス権の指定については、「テーブル作成時の列権限設定」を参照してください。
NIS+ では、すべての列エントリが NULL で終了するものと仮定しています。NIS+ テーブルに情報を書き込むアプリケーションやルーチンは、列エントリをすべて NULL で終了するように構成しなければなりません。
自動マウントテーブルには 2 つの列しか作ることができません。1 番目の列には key という名前を付け、2 番目の列には value という名前を付けます。たとえば、auto1 という名前の自動マウントテーブルを作成するには、次のように入力します。
master% nistbladm -c key-value key=S value= auto1.org_dir.doc.com. |
テーブルを削除するには、-d オプションを使ってテーブル名を入力します。
nistbladm -d tablename |
テーブルを削除するには、その前にテーブルが空になっていなければなりません (「テーブルからエントリを削除する」を参照)。次の例では、doc.com. ディレクトリから divs テーブルを削除します。
rootmaster% nistbladm -d divs.doc.com. |
エントリ (行) をテーブルに追加するには、nistbladm コマンドに -a オプションまたは -A オプションを指定し、続けて column=value のペア (1 つまたは複数)、テーブル名の順に指定します。あるいは、nistbladm コマンドに -a オプションまたは -A オプションを指定し、続けてインデックス名を指定します (「nistbladm とインデックス名」を参照)。
nistbladm [-a | -A] indexedname nistbladm [-a | -A] column="value" ¥ column="value" ¥ ... tablename |
-a オプションまたは -A オプションを指定して既存のテーブルに新しいエントリ (行) を追加する場合は、次の点に注意してください。
value は必ず引用符で囲む。たとえば、新たに追加するエントリの cname 列の値を deneb にする場合は、column=value ペアを cname="deneb" と指定する
テーブル内のすべての列の値を指定する
追加するエントリ (行) の列を空白にする場合は、column=" " と指定する。つまり、value には、引用符で囲んだ半角スペースを指定する
NIS+ はネームサービスであり、設計上、そのテーブルにはオブジェクト本体ではなく、オブジェクトのリファレンスが格納されます。NIS+ は、最適化された状態では 10,000 におよぶオブジェクトをサポートし、すべてのテーブルのサイズを合計しても 10M バイトを超えることはありません。NIS+ では、1 つの列のフィールドサイズの合計が 7k を超えるようなテーブルはサポートされません。テーブルが大きすぎると、rpc.nisd は失敗します。
nistbladm コマンドに -a オプションを指定しておくと、追加するエントリと同じエントリがすでに存在する場合は、エントリの上書きは行われずにエラーが返されます。あるエントリの検索可能列の値が、追加するエントリの検索可能列の値とまったく同じである場合、そのエントリは「すでに存在しているもの」と判断されます。(このとき、検索不可列の値は一切考慮されません。)
-a オプションを指定する場合、次のように、テーブル内のすべての列の値を指定する必要があります。
nistbladm -a column=" value" ¥ column=" value" ¥ ... tablename nistbladm -a indexedname |
(テーブルのすべての列名とその特性を表示する場合は、niscat -o tablename コマンドを実行します。)
たとえば、depts テーブルに新しい行を追加する場合は、次に示すように、列の数だけ column=value ペアを指定します。
rootmaster% nistbladm -a Name='R&D' Site='SanFran' ¥ Name='vattel' depts.doc.com. |
なお、これと同じエントリをインデックス名を指定して追加する場合は、次のように入力します。
rootmaster% nistbladm -a [Name='R&D',Site='SanFran' ¥ Name='vattel'],depts.doc.com. |
いずれの場合も、次のようなテーブルとなります。
Dept |
Site |
Name |
---|---|---|
R&D |
SanFran |
vattel |
C シェルを使っている場合は、角カッコを含む数式を引用符でオフセットすることもできます。
nistbladm コマンドでは 1 回につき 1 つのエントリしか追加できません。つまり、追加する行の数だけ nistbladm コマンドを実行する必要があります。
追加するエントリ (行) の各列と同じ値を持つ行がすでに存在する場合、nistbladm -a はエラーを返します。1 つのテーブルの中に同じ行が存在することはできません。検索可能列の値が同一である場合、それらの行は同一であるとみなされます。このとき、検索不可列の値は考慮されません。
たとえば、Dept 列と Site 列が検索可能であって、Name 列は検索可能ではないテーブルに対して nistbladm を実行すると、次の 2 つの行は同一であるとみなされます。
Dept (検索可能) |
Site (検索可能) |
Name (検索不可) |
---|---|---|
Sales |
Vancouver |
Hosteen |
Sales |
Vancouver |
Lincoln |
この場合、nistbladm -a を実行して Sales Vancouver Lincoln という行を作成できません。
しかし、複数の検索可能列のどちらか一方の値が重複するだけであれば、nistbladm -a を実行して新しい行を作成できます。たとえば、以下の 2 つのコマンドを実行すると、一部の値が異なるだけの 2 つの列を作成できます。
rootmaster% nistbladm -a Dept='Sales' ¥ Site='Vancouver' Name='hosteen' staff.doc.com. rootmaster% nistbladm -a Dept='Sales' ¥ Site='SanFran' Name='lincoln' staff.doc.com. |
これらのコマンドを実行すると、検索可能列の一部が同じで、すべてが同じではない 2 つの行が作成されます。
Dept |
Site |
Name |
---|---|---|
Sales |
Vancouver |
hosteen |
Sales |
SanFran |
lincoln |
-A オプションは、nistbladm コマンドで既存のエントリを上書きするアプリケーションに使用します。-a と同様に、-A もテーブルにエントリを追加するためのオプションです。しかし、追加するエントリがすでに存在する場合、エラーを返して終了するのではなく、既存のエントリを上書きします。
-A オプションを指定する場合、エントリ内のすべての列の値を指定する必要があります。
ここで、Dept 列と Site 列が検索可能である次のテーブルを想定します。
Dept (検索可能) |
Site (検索可能) |
Name |
---|---|---|
Sales |
SanFran |
Lincoln |
このテーブルに対して、次のコマンドを実行します。
rootmaster% nistbladm -A Name=Sales Site=SanFran ¥ Name=Tsosulu depts.doc.com. |
Name=Sales Site=SanFran はすでに存在するので、オプションが -a であれば、上記のコマンドはエラーを返します。しかし、上記のコマンドでは -A が指定されているので、既存の行が上書きされます。
Dept |
Site |
Name |
---|---|---|
Sales |
SanFran |
Tsosulu |
既存のエントリを修正 (編集) する場合は、-e オプションまたは -E オプションを指定します。Solaris 8 リリースでは、旧リリースとの互換性を維持するため、-m オプションも残されています。新しいアプリケーションまたはコマンド行での操作には、-e オプションまたは -E オプションを使うことをお勧めします。
テーブル内の既存のエントリ (行) を編集するには、nistbladm コマンドに -e オプションまたは -E オプションを指定し、それに続けて、値を変更した column=value のペア (1 つまたは複数) とテーブル内の特定の行を示すインデックス名を指定します (「nistbladm とインデックス名」を参照)。
nistbladm [-e | -E] column=" value" ¥ column=" value" ¥ ... indexedname |
-e オプションまたは -E オプションを指定して既存エントリ (行) を修正する場合は、次の点に注意してください。
value は必ず引用符で囲む。たとえば、cname 列の値を deneb に変更する場合は、column=value ペアを cname="deneb" と指定する
検索可能列の値は、1 行 (エントリ) 単位でしか変更できない
エントリ (行) の列を空白にする場合は、column=" " と指定する。つまり、value には、引用符で囲んだ半角スペースを指定する
-e オプションを指定した場合、複数のエントリの検索可能列値を変更することになる nistbladm コマンドは実行されず、エラーが返されます。このとき、検索不可列の値は考慮されません。
nistbladm column=" value" ¥ column=" value" ¥ ... indexedname |
-e オプションを指定した場合、変更する列の値を指定するだけです。
ここで次のテーブルについて考えます。
Dept |
Site |
Name |
---|---|---|
Sales |
SanFran |
Tsosulu |
Name 列の値を Chandar に変更するには、次のように入力します。
master% nistbladm -e Name="Chandar" [Dept='Sales',Site='SanFran'], ¥ depts.doc.com. |
修正後のテーブルは次のようになります。
Dept |
Site |
Name |
---|---|---|
Sales |
SanFran |
Chandar |
(上記の例では、インデックス名に Name 列が含まれていません。これは、Name 列が検索可能ではないためです。)
C シェルを使っている場合は、角カッコを含む数式を引用符でオフセットすることもできます。
-e オプションを指定して検索可能列の値を編集するには、新たに指定した値が (インデックス名によって識別される) 1 行にだけ適用されることが条件になります。したがって、Dept 列の値を Manf に変更するには、次のように入力します。
master% nistbladm -e Dept="Manf" [Dept='Sales',Site='SanFran'], ¥ depts.doc.com. |
Dept (検索可能) |
Site (検索可能) |
Name |
---|---|---|
Manf |
SanFran |
Chandar |
しかし、検索可能列に Manf と SanFran という値を持つエントリが既に存在する場合は、nistbladm -e はエラーを返します。
同一のエントリが対象である場合は、複数の列の変更を指定できます。たとえば、Dept 列と Name 列の値を変更するには、次のように入力します。
master% nistbladm -e Dept="Manf" Name="Thi" ¥ [Dept='Sales',Site='SanFran'],depts.doc.com. |
Dept (検索可能) |
Site (検索可能) |
Name |
---|---|---|
Manf |
SanFran |
Thi |
-E オプションは、nistbladm コマンドで既存のエントリを上書きする場合のアプリケーションに使用します。
ここで次のテーブルを想定します。
Dept (検索可能) |
Site (検索可能) |
Name |
---|---|---|
Sales |
SanFran |
Chandar |
Sales |
Alameda |
Achmed |
このテーブルに対して次のコマンドを実行します。
master% nistbladm -E Site="Alameda" Mgr="Chu" ¥ [Div='Sales',Site='SanFran'],depts.doc.com. |
すると、Sales SanFran Chandar 行が Sales Alameda Chu に変わります。しかも、キーの値 Sales Alameda によって識別される Sales Alameda Achmed 行までもが変更の対象になります。その結果、コマンド実行前には 2 つあったはずの行が 1 つになります。
Dept (検索可能) |
Site (検索可能) |
Name |
---|---|---|
Sales |
Alameda |
Chu |
これは複数の行を編集することになるので、オプションが -e であれば、上記のコマンドはエラーを返します。しかし、実際には -E が指定されているので、複数のエントリ (行) が編集されます。
テーブルから 1 つのエントリを削除する場合は、-r オプションを指定します (「1 つのエントリを削除する」を参照)。
テーブルから複数のエントリを削除する場合は、-R オプションを指定します (「複数のエントリを削除する」を参照)。
テーブルから 1 つのエントリを削除するには、次に示すように -r オプションを指定します。
nistbladm -r indexed-name |
次に示すコマンドでは、depts テーブルから Manf-1 エントリを削除します。
rootmaster% nistbladm -r [Dept=Manf-1,Site=Emeryville,Name=hosteen], ¥ depts.doc.com. |
指定する列の値の数は最小限に減らすことができます。NIS+ では、列の値の重複が見つかると、行は 1 つも削除されることなく、エラーが返されます。次のテーブルから Manf-1 エントリを削除するには、次に示すように Site 列の値を指定するだけで済みます。
rootmaster% nistbladm -r [Site=Emeryville],depts.doc.com. |
しかし、R&D エントリも Sales エントリと同じ値を持っているため、Site 列の値 (SanFran) を指定するだけでは Sales エントリを削除できません。
Dept |
Site |
Name |
---|---|---|
R&D |
SanFran |
kuznetsov |
Sales |
SanFran |
jhill |
Manf-1 |
Emeryville |
hosteen |
Manf-2 |
Sausalito |
lincoln |
テーブルから複数のエントリを削除するには、次に示すように -R オプションを指定します。
nistbladm -R indexedname |
オプションが -r であれば、最小限必要な列値を指定するだけで済みます。しかし、上記のコマンドでは -R が指定されているので、NIS+ が重複を見つけると、それに該当するすべてのエントリが削除されます。テーブル内の列の名前を確認したい場合は、niscat -o コマンドを実行します。次のコマンドを実行すると、Site 列の値が SanFran であるすべてのエントリが削除されます。
rootmaster% nistbladm -R [Site=SanFran],depts.doc.com. |
Dept |
Site |
Name |
---|---|---|
Manf-1 |
Emeryville |
hosteen |
Manf-2 |
Sausalito |
lincoln |
-R オプションを指定すると、次に示すように、列の値を指定しなければテーブル内のすべてのエントリを削除できます。
rootmaster% nistbladm -R [],depts.doc.com. |
nistbladm -R コマンドと共に使用すると、一対の空の角カッコはすべてのテーブル列を指定するワイルドカードとして解釈されます。
niscat コマンドは NIS+ テーブルの内容を表示します。このコマンドを使って、テーブルのオブジェクト属性を表示できます。表示するテーブル、エントリ、または列に対する読み取り権が必要です。
テーブルの内容を表示するには、以下のように入力します。
niscat [-hM] tablename |
テーブルのオブジェクト属性を表示するには、以下のように入力します。
niscat -o tablename niscat -o entry |
オプション |
目的 |
---|---|
-h |
ヘッダー。テーブルエントリの上にあるヘッダー行を表示し、各列の名前を表示する |
-M |
マスター。マスターサーバーに収められているテーブルのエントリだけを表示する。これによって最新情報を取得できる。デバッグにだけ使用する |
-o |
オブジェクト。列名、属性、サーバーなどの、テーブルについてのオブジェクト情報を表示する |
テーブルの内容を表示するには、niscat にテーブル名を付けて実行します。
niscat tablename |
次の例では、depts というテーブルの内容を表示します。
rootmaster% niscat -h depts.doc.com. # Name:Site:Name R&D:SanFran:kuznetsov Sales:SanFran:jhill Manf-1:Emeryville:hosteen Manf-2:Sausalito:lincoln |
*NP* は、ユーザーにそのエントリを表示するためのアクセス権がないことを示します。アクセス権は、テーブル、列、エントリ (行) ごとに与えられます。アクセス権の詳細は、第 10 章「NIS+ のアクセス権の管理」を参照してください。
テーブルのオブジェクト属性を表示するには、niscat -o にテーブル名を付けて実行します。
niscat -o tablename.org_dir |
テーブルエントリのオブジェクト属性を表示するには、niscat -o を使い、インデックス付きの名前でエントリを指定します。
entry ::=column=value ... tablename | ¥ [column=valu ,...], tablename |
次に、テーブルの例とテーブルエントリの例を示します。
「テーブル」
rootmaster# niscat -o hosts.org_dir.doc.com. Object Name : hosts Owner : rootmaster.doc.com. Group : admin.doc.com. Domain : org_dir.doc.com. Access Rights : ----rmcdr---r--- Time to Live : 12:0:0 Object Type : TABLE Table Type : hosts_tbl Number of Columns : 4 Character Separator : Search Path : Columns : [0] Name : cname Attributes : (SEARCHABLE, TEXTUAL DATA, CASE INS Access Rights: ---------------- [1] Name : name Attributes : (SEARCHABLE, TEXTUAL DATA, CASE INS Access Rights: ---------------- [2] Name : addr Attributes : (SEARCHABLE, TEXTUAL DATA, CASE INS Access Rights: ---------------- [3] Name : comment Attributes : (TEXTUAL DATA) Access Rights: ---------------- |
「テーブルエントリ」
rootmaster# niscat -o [name=rootmaster],hosts.org_dir.doc.com. Object Name : hosts Owner : rootmaster.doc.com. Group : admin.doc.com. Domain : org_dir.doc.com. Access Rights : ----rmcdr---r--- Time to Live : 12:0:0 Object Type : ENTRY Entry data of type hosts_tbl Entry has 4 columns. . # |
nismatch コマンドと nisgrep コマンドは、NIS+ テーブルを検索して、それぞれ特定の文字列または正規表現に一致するエントリを探します。これらのコマンドは、エントリ自体、またはエントリの検索できた回数のどちらかを表示します。nismatch コマンドと nisgrep コマンドの相違を表 14-6 に示します。
表 14-6 nismatch と nisgrep の 比較
機能 |
nismatch |
nisgrep |
---|---|---|
検索指定 |
テキストのみ指定可能 |
正規表現が指定可能 |
速度 |
高速 |
低速 |
検索対象 |
検索可能列のみ |
すべての列 (検索可能かどうかとは無関係) |
検索構文 |
column=string ... tablename[ column= string,...], tablename |
column=exp ... tablename |
この節の例では、両方のコマンドの構文を説明します。
どちらのコマンドを使用する場合にも、検索するテーブルに対する読み取りアクセス権が必要です。
この節の例は、次に示す depts.doc.com. というテーブルの値をベースにしています。最初の 2 つの列だけが検索可能です。
Name (S) |
Site (S) |
Name |
---|---|---|
R&D |
SanFran |
kuznetsov |
Sales |
SanFran |
jhill |
Manf-1 |
Emeryville |
hosteen |
Manf-2 |
Sausalito |
lincoln |
Shipping-1 |
Emeryville |
tsosulu |
Shipping-2 |
Sausalito |
katabami |
Service |
Sparks |
franklin |
正規表現により、テキストと記号を組み合わせて使用し、特定の構成の列の値を検索できます。たとえば、正規表現 `Hello' は、Hello で始まる値を検索します。正規表現をコマンド行で使用するときは、必ず引用符で囲んでください。その理由は、正規表現記号の多くが Bourne シェルと C シェルでは特殊な意味をもつからです。たとえば、次のように入力します。
rootmaster% nisgrep -h greeting='Hello' phrases.doc.com. |
正規表現の記号を表 14-7 にまとめます。
表 14-7 正規表現記号
記号 |
意味 |
---|---|
^string |
string で始まる値を見つける |
string $ |
string で終わる値を見つける |
. |
ピリオドの数と等しい数の文字をもつ値を見つける |
[chars] |
角かっこ内の文字のどれかを含む値を見つける |
*expr |
expr についてゼロ回以上一致する値を見つける |
+ |
1 回以上現われるものを見つける |
? |
任意の値を見つける |
¥'s-char' |
? や $ などの特殊文字を見つける |
x | y |
x または y の値を見つける |
最初の列を検索するには、以下のように入力します。
nismatch string tablename nisgrep reg-exp tablename |
特定の列を検索するには、以下のように入力します。
nismatch column=string tablename nisgrep column= reg-exp tablename |
複数の列を検索するには、以下のように入力します。
nismatch column=string tablename ...¥ nismatch [column=string,...], tablename nisgrep column= reg-exp ... ¥ tablename |
オプション |
目的 |
---|---|
-c |
カウント。エントリ自体ではなく、検索指定に一致したエントリのカウントを表示する |
-h |
ヘッダー。エントリの上のヘッダー行を表示し、各列名を表示する |
-M |
マスター。マスターサーバーに収められているテーブルのエントリだけを表示する。これによって、最新情報を取得できる。デバッグにだけ使うようにする |
テーブルの最初の列で特定の値を検索するには、最初の列の値と「tablename」を入力します。nismatch では、この値は文字列でなければなりません。nisgrep では、この値は正規表現でなければなりません。
nismatch [-h] string tablename nisgrep [-h] reg-expression tablename |
次の例では、depts テーブルを検索して、最初の列の値が R&D となっているすべてのエントリを探します。
rootmaster% nismatch -h `R&D' depts.doc.com. rootmaster% nisgrep -h `R&D' depts.doc.com. |
& がシェルによってメタキャラクタとして解釈されないように、R&D が引用符で囲まれています。
最初の列以外の特定の列を検索するには、次の構文を使います。
nismatch column=string tablename nisgrep column=reg- expression tablename |
次の例では、depts テーブルを検索して、第 2 列の値が SanFran となっているすべてのエントリを探します。
rootmaster% nismatch -h Site=SanFran depts.doc.com. rootmaster% nisgrep -h Site=SanFran depts.doc.com. |
2 つ以上の列で一致するエントリを検索するには、次の構文を使います。
nismatch [-h] [column= string, ... ¥ column= string,...], tablename nisgrep [-h] column=reg-exp ... ¥ tablename |
以下の例では、第 2 列の値が SanFran で、第 3 列の値が jhill のエントリを検索します。
rootmaster% nismatch -h [Site=SanFran,Name=jhill], depts.doc.com. rootmaster% nisgrep -h Site=SanFran Name=jhill depts.doc.com. |
nisln コマンドは、NIS+ オブジェクトとテーブルエントリの間でシンボリックリンクを作成します。すべての NIS+ 管理コマンドで、NIS+ オブジェクト間のリンクをたどるように指示する -L フラグを使用できます。
あるテーブルから他のテーブルへのリンクはできますが、あるテーブルのエントリから他のテーブルのエントリへのリンクはできません。
他のオブジェクトまたはエントリへのリンクを作成するには、ソースオブジェクトまたはエントリ、つまり他のオブジェクトまたはエントリを指すものに対する変更権が必要です。
cred テーブルをリンクしないでください。org_dir ディレクトリには、それぞれ専用の cred テーブルが必要です。org_dir cred テーブルもリンクしないでください。
リンクを作成するには次のように入力します。
nisln source target |
オプション |
目的 |
---|---|
-L |
リンクをたどる。ソース (source) 自体がリンクである場合、新しいリンクはこれにはリンクされず、そのリンク元のソースにリンクされる |
-D |
デフォルト。リンクされたオブジェクトに対して別のデフォルトセットを指定する。デフォルトについては、「デフォルトを無効にする」を参照 |
オブジェクト間のリンク (テーブルとディレクトリの間のリンクなど) を作成するには、最初に「ソース (source)」、次に「リンク先 (target)」の順で、両方のオブジェクト名を指定します。
nisln source-object target-object |
nissetup コマンドは、org_dir ディレクトリと groups_dir ディレクトリ、それにフルセットの NIS+ テーブルを作成することによって、既存の NIS+ ディレクトリオブジェクトをドメインに展開します。しかし、データでテーブルを生成することはありません。これを行うには、「nisaddent コマンド」で説明する nisaddent コマンドが必要です。ドメインにディレクトリを展開することは、ドメインの設定作業の一部です。前提条件および必要な動作の詳細は、パート II「NIS+ の紹介と概要」を参照してください。
新しい NIS+ ドメインを設定するのであれば、nissetup コマンドを使うより、nisserver スクリプトを使った方が簡単です。nisserver スクリプトの具体的な使い方については、『Solaris ネーミングの設定と構成』を参照してください。
nissetup コマンドは、NIS クライアントをサポートするドメインにもディレクトリを展開できます。
nissetup を使用するには、テーブルを格納するディレクトリに対する変更権が必要です。
nissetup コマンドは、ディレクトリ名を付けても付けなくても使えます。ディレクトリ名を付けない場合、このコマンドはデフォルトのディレクトリを使います。追加される各オブジェクトは、出力に表示されます。
rootmaster# /usr/lib/nis/nissetup doc.com. org_dir.doc.com. created groups_dir.doc.com. created a uto_master.org_dir.doc.com. created auto_home.org_dir.doc.com. created bootparams.org_dir.doc.com. created cred.org_dir.doc.com. created ethers.org_dir.doc.com. created group.org_dir.doc.com. created hosts.org_dir.doc.com. created mail_aliases.org_dir.doc.com. created sendmailvars.org_dir.doc.com. created netmasks.org_dir.doc.com. created netgroup.org_dir.doc.com. created networks.org_dir.doc.com. created passwd.org_dir.doc.com. created protocols.org_dir.doc.com. created rpc.org_dir.doc.com. created services.org_dir.doc.com. created timezone.org_dir.doc.com. created |
NIS+ と NIS のクライアント要求をサポートするドメインにディレクトリを展開するには、-Y フラグを使います。作成するテーブルは、NIS のクライアント要求がアクセスできるように、未認証カテゴリに対する読み取り権が与えられます。
rootmaster# /usr/lib/nis/nissetup -Y Test.doc.com. |
nisaddent コマンドは、テキストファイルまたは NIS マップからの情報を NIS+ テーブルにロードします。また、NIS+ テーブルの内容をテキストファイルに逆にダンプできます。NIS+ テーブルを初めて生成 (populate) する場合、『Solaris ネーミングの設定と構成』を参照してください。すべての前提条件と関連作業が説明してあります。
nisaddent を使用して、情報をある NIS+ テーブルから別のテーブルに (たとえば、別のドメインの同じ種類のテーブルに) 転送できますが、直接には転送できません。まず、テーブルの内容をファイルにダンプし、次にそのファイルを他のテーブルにロードする必要があります。ただし、ファイル内の情報は正しくフォーマットされていなければなりません。各テーブルに必要なフォーマットを付録 C 「NIS+ テーブルの情報」 で説明します。
情報をテーブルにロードするとき、置換 (replace)、追加 (append)、またはマージ (merge) の 3 つのオプションを自由に使用できます。追加オプションは、ソースエントリを NIS+ テーブルに単純に追加します。置換オプションの場合、NIS+ は、まずテーブル内のすべての既存エントリを削除し、次にソースからエントリを追加します。大規模なテーブルでは、これによって多くのエントリセット (1 セットは既存エントリの削除用、他のセットは新エントリの追加用) がテーブルの .log ファイルに追加され、/var/nis 内の領域を占有し、複製への伝達に長時間を要することになります。
マージオプションでは、置換オプションと同じ結果が得られますが、異なるプロセスを使っており、複製に送信する動作数が大幅に減少します。マージオプションの場合、NIS+ は 3 種類のエントリを別に処理します。
ソース内にだけ存在するエントリは、テーブルに「追加」される
ソースとテーブルの両方に存在するエントリは、テーブル内で「更新」される
NIS+ テーブルにだけ存在するエントリは、テーブルから「削除」される
大きなテーブルを更新する場合で、内容の変更があまりないときは、マージオプションを使用するとサーバーは多くの動作を節約できます。ソース内で重複していないエントリだけを削除する (置換オプションは全エントリを無差別に削除する) ため、重複エントリごとに 1 回の削除と 1 回の追加動作を省略できます。
初めてテーブルに情報をロードする場合、テーブルオブジェクトに対する作成権が必要です。テーブル内の既存情報を上書きする場合、テーブルに対する変更権が必要です。
テキストファイルから情報をロードするには、以下のように入力します。
/usr/lib/nis/nisaddent -f filename table-type [domain] /usr/lib/nis/nisaddent -f filename -t tablename table-type [domain] |
NIS マップから情報をロードするには、以下のように入力します。
/usr/lib/nis/nisaddent -y NISdomain table-type [domain] /usr/lib/nis/nisaddent -y NISdomain -t tablename table-type [domain] /usr/lib/nis/nisaddent -Y map table-type [domain] /usr/lib/nis/nisaddent -Y map -t tablename table-type [domain] |
NIS+ テーブルから情報をファイルにダンプするには、以下のように入力します。
/usr/lib/nis/nisaddent -d [-t tablename tabletype ] > filename |
ファイルの内容を NIS+ テーブルに転送するには、いくつかの方法があります。
-f を単独で指定すると、table-type の内容が filename の内容に置き換えられます。
nisaddent -f filename table-type |
-f と -a を同時に指定すると、filename の内容が table-type に「追加」されます。
nisaddent -a -f filename table-type |
-f と -m を同時に指定すると、filename の内容が table-type の内容に「マージ」されます。
nisaddent -m -f filename table-type |
次に示す 2 つの例では、テキストファイル /etc/passwd.xfr の内容が NIS+ passwd テーブルにロードされます。最初の例ではローカルドメインに、2 番目の例では別のドメインのテーブルにロードされます。
rootmaster# /usr/lib/nis/nisaddent -f /etc/passwd.xfr passwd rootmaster# /usr/lib/nis/nisaddent -f /etc/shadow.xfr shadow rootmaster# /usr/lib/nis/nisaddent -f /etc/passwd.xfr passwd sales.doc.com. rootmaster# /usr/lib/nis/nisaddent -f /etc/shadow.xfr shadow sales.doc.com. |
/etc ディレクトリのファイルから NIS+ passwd テーブルを作成する場合は、nisaddent を 2 回 (/etc/passwd ファイルと /etc/shadow ファイルに対して 1 回ずつ) 実行する必要があります。
もう 1 つの方法では、stdin をソースとして使います。しかし、stdin では -m オプションを使えません。次に例を示します。リダイレクト (>) やパイプ (|) を使用することは可能です。ただし、別のドメインに出力が行われるような形でパイプを使用することはできません。
作業 |
コマンド |
---|---|
リダイレクト |
cat filename > nisaddent table-type |
リダイレクト処理後、追加する |
cat filename > nisaddent -a table-type |
リダイレクト処理後、別のドメインに追加する |
cat filename > nisaddent -a table-type NIS+ domain |
パイプ |
cat filename | nisaddent table-type |
パイプ処理後、追加する |
cat filename | nisaddent -a table-type |
NIS+ テーブルが、オートマウンタテーブルの 1 つであるか標準以外のテーブルである場合、-t オプションと NIS+ テーブルの完全な名前を追加します。
master# nisaddent -f /etc/auto_home.xfr ¥ -t auto_home.org_dir.doc.com.key-value master# nisaddent -f /etc/auto_home.xfr ¥ -t auto_home.org_dir.doc.com. key-value sales.doc.com. |
NIS マップから情報を転送する方法は 2 つあり、NIS ドメインを指定するか、または実際の NIS マップを指定します。ドメインを指定した場合、NIS+ は、table-type に基づいて、/var/yp/nisdomain 内のどのマップファイルをソースとして使うかを判断します。/var/yp/nisdomain は「ローカル」ファイルでなければなりません。
NIS+ テーブル形式 |
NIS マップ名 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NIS ドメインの指定によって転送するには、-y (小文字) オプションを使い、NIS+ テーブル形式に加えて NIS ドメインを指定します。
「テーブルの置換」
nisaddent -y nisdomain table-type |
「テーブルの追加」
nisaddent -a -y nisdomain table-type |
「テーブルのマージ」
nisaddent -m -y nisdomain table-type |
デフォルトでは、nisaddent は NIS+ テーブルの内容を NIS マップの内容に置き換えます。追加またはマージを行うには、-a または -m のオプションを使います。次の例では、対応する NIS マップ (passwd.byname
) からの NIS+ passwd テーブルを old-doc ドメインにロードします。
rootmaster# /usr/lib/nis/nisaddent -y old-doc passwd |
2 番目の例でも同じことを行いますが、ローカルドメイン doc.com. の代わりに、sales.doc.com. ドメインに対して行います。
rootmaster# /usr/lib/nis/nisaddent -y old-doc passwd sales.doc.com. |
NIS+ テーブルが、オートマウンタテーブルの 1 つであるか非標準テーブルである場合、そのソースがファイルであるかのように、-t オプションと NIS テーブルの完全な名前を追加します。
rootmaster# nisaddent -y old-doc ¥ -t auto_home.org_dir.doc.com. key-value rootmaster# nisaddent -y old-doc ¥ -t auto_home.org_dir.doc.com. key-value sales.doc.com. |
マップファイルをドメイン用に使うのではなく、特定の NIS マップを指定したい場合、-Y (大文字) オプションを使い、マップ名を指定します。オプションを見つけやすいように、次の例では太字にしています。
rootmaster# nisaddent -Y hosts.byname hosts rootmaster# nisaddent -Y hosts.byname hosts sales.doc.com. |
NIS マップがオートマウンタマップの 1 つであるか非標準マップである場合、-Y オプションと -t オプションを組み合わせます。
rootmaster# nisaddent -Y auto_home ¥ -t auto_home.org_dir.doc.com. key-value rootmaster# nisaddent -Y auto_home ¥ -t auto_home.org_dir.doc.com. key-value sales.doc.com. |
NIS+ テーブルの内容をファイルにダンプするには、-d と -t のオプションを使います。-d オプションは、ダンプするようコマンドに指示します。-t オプションは、NIS+ テーブルを指定します。
rootmaster# nisaddent -Y auto_home¥ -t auto_home.org_dir.doc.com. key-value rootmaster# nisaddent -Y auto_home ¥ -t auto_home.org_dir.doc.com. key-value sales.doc.com. |