Solaris のシステム管理 (ネーミングとディレクトリサービス : FNS、NIS+ 編)

第 19 章 NIS+ テーブルの管理

この章では、NIS+ テーブルとその管理方法について説明します。デフォルトの NIS+ テーブルの詳細については、表 10–1 を参照してください。


注 –

NIS+ は、将来のリリースでサポートされない可能性があります。NIS+ から LDAP への移行支援ツールは、Solaris 9 オペレーティング環境で使用できます (『Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)』を参照)。詳細については、http://www.sun.com/directory/nisplus/transition.html を参照してください。


NIS+ テーブル

NIS+ で使用される情報は、NIS+ テーブルに格納されます (Solaris オペレーティング環境で提供されるデフォルトの NIS+ システムテーブルについては、第 23 章「NIS+ テーブルの情報」を参照)。

NIS+ テーブル関連のコマンドと、その構文およびオプションの詳細については、NIS+ のマニュアルページを参照してください。

nistbladm コマンド


注 –

NIS+ テーブルに関連した作業のうちいくつかは、 Solstice AdminSuiteTMツールを使用すると容易に行えます。


nistbladm コマンドは NIS+ テーブル管理コマンドの中でも最も重要なコマンドであり、NIS+ ディレクトリオブジェクトに格納されている NIS+ テーブル上で使います。nistbladm コマンドを使うと、NIS+ テーブルまたはそのエントリを作成、修正、削除できます。ただし、ディレクトリのないところにテーブルを作成はできません。同様に、テーブルと列が定義されていないところにエントリを追加できません。

テーブルを作成するには、そのテーブルが所属するディレクトリに対する作成権が必要です。テーブルを削除するには、そのディレクトリに対する削除権が必要です。テーブルの内容を変更 (エントリの追加、変更、または削除) するには、そのテーブルまたはエントリの変更権が必要です。

nistbladm 構文

nistbladm コマンドの一般的な構文は次のとおりです。


nistbladm options \
 [columspec | columnvalue] \
 [tablename | indexedname]

表 19–1 nistbladm コマンドのオプション

オプション 

説明 

-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 コマンドであっても強制的に実行される (エントリを修正するを参照)

nistbladm と列の値

列の値は、テーブル内の個々のエントリを識別するために使われます。列の値の書式は次のとおりです。


columname="value", \
 columnname="value", ...

引数の意味は、それぞれ以下のとおりです。

たとえば、マシン名と IP アドレスを登録した hosts という名前のテーブルがあるとします。

表 19–2 hosts テーブルの例

IP アドレス 

名前 

別名 

129.146.168.4

altair

 

129.146.168.119

deneb

mail

129.146.168.120

regulus

dnsmaster

129.146.168.121

regulus

dnsmaster

129.146.168.11

sirius

 

このサンプルテーブルの altair エントリ (行) を識別するには、次の 3 通りの column=value の指定方法が考えられます。

上記のテーブルで注目すべき点としては、regulus という名前のマルチホームマシンに 2 つの IP アドレスが割り当てられていることです。この場合、ホストマシン reguluscolumn=value は 2 つの行を示します。そこで、最初の regulus 行だけを識別したいという場合は次のいずれかを入力します。


注 –

nistbladm コマンドの一部のオプションには、テーブル内のすべての列に column=value を指定しなければならないものがあります。


nistbladm、検索可能列、キー、列の値

NIS+ テーブルを作成する際は、S フラグまたは I フラグを指定し、1 つまたは複数の列が検索可能になるようにします (テーブルの列を指定するを参照)。なお、niscat -o tablename と入力すれば、テーブルの列とその特性を一覧表示できます。

テーブル内で行の「識別」に使われるのが検索可能列です。検索可能列の値 (値の組み合わせ) はすべて一意でなければなりません。したがって、検索可能列が 1 つしかないテーブルの場合、各行の検索可能列の値はすべて一意でなければならず、重複は一切許されません。

ここで、city という名前の検索可能列と country という名前の検索不可列からなるテーブルを作成する場合を想定します。次に示すのは、正しい (検索可能列の値の組み合わせに重複がない) テーブルの例です。

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+ のコマンドはいずれも、検索可能列の値に基づいて特定の行を識別します。

nistbladm とインデックス名

NIS+ には、テーブル名と列の値の検索基準の組み合わせ (これを「インデックス名」という) によって特定のテーブルの特定のエントリを識別する、というテーブル管理の方法もあります。インデックス名の書式は次のとおりです。


[search_criteria],tablename.directory

search_criteria には検索基準を指定しますが、このとき角カッコ ([]) で囲むのを忘れないでください。書式は次のとおりです。


columname=value, \
 columname=value,...

columname=value にはテーブルの検索可能列の値を指定します (nistbladm と列の値を参照)。

たとえば、表 19–2altair エントリを識別するには、次のようにインデックス名を指定します。


[addr=129.146.168.4,cname=altair],hosts.org_dir.doc.com.

nistbladm -R コマンドを使用すると、間になにも入れない角カッコ [ ]をすべてのテーブル列を指定するワイルドカードとして使用し、テーブル中のすべてのエントリを一度に削除できます。

nistbladm とグループ

Solaris の NIS+ 環境には 3 種類のグループがあります。


注 –

NIS+ グループの管理に nistbladm を使うことはできません。


その他のグループの詳細については、Solaris グループを参照してください。

テーブルを作成する

NIS+ テーブルには、少なくとも 1 つの列が必要で、その列のうち少なくとも 1 つが検索可能でなければなりません。NIS+ テーブルを作成するには、nistbladm コマンドに -c オプションを付けて使います。


nistbladm -c tabletype columnspec \
  ... tablename

引数の意味は、それぞれ以下のとおりです。


nistbladm -c tabletype columnspec columnspec  \
columnspec tablename

columnspec の書式については、テーブルの列を指定する (下記) を参照してください。

テーブルの列を指定する

columnspec エントリは、以下の形式のように、2 つから 4 つの要素から成っています。


name=type,rights:
表 19–3 テーブルの列の構成要素

コンポーネント 

説明 

name

列の名前 

=

等号記号 (必須) 

type

(オプション) SI、または C で列の種類を指定する。表 19–4 参照。このコマンドは省略可能です。type を指定しないと、その列はデフォルトとなる

rights

(オプション) アクセス権を指定する。ここに指定したアクセス権は、テーブル全体や特定エントリに付与したアクセス権より優先される。access を指定しないと、その列のアクセス権は、テーブル全体や特定エントリに付与したアクセス権になる。アクセス権の構文については、コマンドによるアクセス権の指定を参照

列には、次に挙げる種類のうち 1 つを指定できます。

表 19–4 列の種類

形式 

説明 

 

等号 (=) のみ。列の種類は指定しない。その列は検索可能にもならなければ、暗号化されることもない

S

検索可能 

I

大文字と小文字の区別をしない。NIS+ コマンドで列を検索する場合、大文字と小文字を区別しない 

C

暗号化する 

NIS+ の各コマンドは、列全体を調べ、検索可能列の値に基づいて個々の行を識別します。検索可能列は S フラグまたは I フラグで指定します (データベースの分野では、検索可能列のことをキー列といいます)。テーブルの最初の列は必ず検索可能にします。その他の列は検索可能にする必要はありません。NIS+ テーブルのキーは、検索可能列に対して作成されます。このため、検索可能列が複数存在する場合は、最初の列から連続した領域に割り当てなければなりません。検索可能列以外の列がその領域に存在してはなりません。たとえば、テーブルの検索可能列が 1 列だけの場合は、最初の列に配置しなければなりません。検索可能列が 2 列の場合は、最初の 2 列に配置しなければなりません。検索可能列の詳細については、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 オプションを指定して既存のテーブルに新しいエントリ (行) を追加する場合は、次の点に注意してください。


注 –

NIS+ はネームサービスであり、設計上、そのテーブルにはオブジェクト本体ではなく、オブジェクトのリファレンスが格納されます。NIS+ は、最適化された状態では 10,000 におよぶオブジェクトをサポートし、すべてのテーブルのサイズを合計しても 10M バイトを超えることはありません。NIS+ では、1 つの列のフィールドサイズの合計が 7k を超えるようなテーブルはサポートされません。テーブルが大きすぎると、rpc.nisd は失敗します。


-a オプションを指定してエントリを追加する

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 オプションを指定してエントリを追加する

-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 オペレーティング環境では、旧リリースとの互換性を維持するため、-m オプションもサポートしています。新しいアプリケーションまたはコマンド行での操作には、-e オプションまたは -E オプションを使うことをお勧めします。

テーブル内の既存のエントリ (行) を編集するには、nistbladm コマンドに -e オプションまたは -E オプションを指定し、それに続けて、値を変更した column=value のペア (1 つまたは複数) とテーブル内の特定の行を示すインデックス名を指定します (nistbladm とインデックス名を参照)。


nistbladm [-e | -E] column="value" \
 column="value" \
 ... indexedname

-e オプションまたは -E オプションを指定して既存エントリ (行) を修正する場合は、次の点に注意してください。

-e オプションを指定してエントリを編集する

-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 

しかし、検索可能列に ManfSanFran という値を持つエントリが既に存在する場合は、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 オプションを指定してエントリを編集する

-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 つのエントリを削除する

テーブルから 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 コマンド

niscat コマンドは NIS+ テーブルの内容を表示します。このコマンドを使って、テーブルのオブジェクト属性を表示できます。表示するテーブル、エントリ、または列に対する読み取り権が必要です。

構文

テーブルの内容を表示するには、以下のように入力します。


niscat [-hM] tablename

テーブルのオブジェクト属性を表示するには、以下のように入力します。


niscat -o tablename
niscat -o entry
表 19–5 niscat 構文のオプション

オプション 

説明 

-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* は、ユーザーにそのエントリを表示するためのアクセス権がないことを示します。アクセス権は、テーブル、列、エントリ (行) ごとに与えられます。アクセス権の詳細については、第 15 章「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.
 .
#

nismatchnisgrep コマンド

nismatch コマンドと nisgrep コマンドは、NIS+ テーブルを検索して、それぞれ特定の文字列または正規表現に一致するエントリを探します。これらのコマンドは、エントリ自体、またはエントリの検索できた回数のどちらかを表示します。nismatch コマンドと nisgrep コマンドの相違を表 19–6 に示します。

表 19–6 nismatchnisgrep の 比較

特性 

nismatch

nisgrep

検索指定 

テキストのみ指定可能 

正規表現が指定可能 

速度 

高速 

低速 

検索対象 

検索可能列のみ 

すべての列 (検索可能かどうかとは無関係) 

検索構文 

column= string ... tablename[ column= string,...], tablename

column=exp ... tablename

この節の例では、両方のコマンドの構文を説明します。

どちらのコマンドを使用する場合にも、検索するテーブルに対する読み取りアクセス権が必要です。

この節の例は、次に示す depts.doc.com. というテーブルの値をベースにしています。最初の 2 つの列だけが検索可能です。

Name (検索可能) 

Site (検索可能) 

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. 

正規表現の記号を表 19–7 にまとめます。

表 19–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
表 19–8 nismatch 構文と nisgrep 構文のオプション

オプション 

説明 

-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 コマンド

nisln コマンドは、NIS+ オブジェクトとテーブルエントリの間でシンボリックリンクを作成します。すべての NIS+ 管理コマンドで、NIS+ オブジェクト間のリンクをたどるように指示する -L フラグを使用できます。


注 –

テーブルエントリはリンクしないでください。あるテーブルから他のテーブルへのリンクはできますが、あるテーブルのエントリから他のテーブルのエントリへのリンクはできません。


他のオブジェクトまたはエントリへのリンクを作成するには、ソースオブジェクトまたはエントリ、つまり他のオブジェクトまたはエントリを指すものに対する変更権が必要です。


注意 – 注意 –

cred テーブルをリンクしないでください。org_dir ディレクトリには、それぞれ専用の cred テーブルが必要です。org_dir cred テーブルもリンクしないでください。


構文

リンクを作成するには次のように入力します。


nisln source target
表 19–9 nisln 構文のオプション

オプション 

説明 

-L

リンクをたどる。ソース (source) 自体がリンクである場合、新しいリンクはこれにはリンクされず、そのリンク元のソースにリンクされる

-D

デフォルト。リンクされたオブジェクトに対して別のデフォルトセットを指定する。デフォルトについては、デフォルトを無効にするを参照

リンクを作成する

オブジェクト間のリンク (テーブルとディレクトリの間のリンクなど) を作成するには、最初に「ソース (source)」、次に「リンク先 (target)」の順で、両方のオブジェクト名を指定します。 テーブルエントリはリンクしないでください。


nisln source-object target-object

nissetup コマンド

nissetup コマンドは、org_dir ディレクトリと groups_dir ディレクトリ、それにフルセットの NIS+ テーブルを作成することによって、既存の NIS+ ディレクトリオブジェクトをドメインに展開します。しかし、データでテーブルを生成することはありません。これを行うには、nisaddent コマンドで説明する nisaddent コマンドが必要です。ドメインにディレクトリを展開することは、ドメインの設定作業の一部です。


注 –

新しい NIS+ ドメインを設定するのであれば、nissetup コマンドを使うより、nisserver スクリプトを使った方が簡単です。nisserver の使用法の詳細については、NIS+ ルートサーバーの設定を参照してください。


nissetup コマンドは、NIS クライアントをサポートするドメインにもディレクトリを展開できます。

nissetup を使用するには、テーブルを格納するディレクトリに対する変更権が必要です。

ディレクトリを NIS+ ドメインに展開する

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+ と NIS のクライアント要求をサポートするドメインにディレクトリを展開するには、-Y フラグを使います。作成するテーブルは、NIS のクライアント要求がアクセスできるように、未認証カテゴリに対する読み取り権が与えられます。


rootmaster# /usr/lib/nis/nissetup -Y Test.doc.com. 

nisaddent コマンド

nisaddent コマンドは、テキストファイルまたは NIS マップからの情報を NIS+ テーブルにロードします。また、NIS+ テーブルの内容をテキストファイルに逆にダンプできます。NIS+ テーブルを初めて生成する場合は、NIS+ テーブルの生成 (populate)を参照してください。すべての前提条件と関連作業が説明してあります。

nisaddent を使用して、情報をある NIS+ テーブルから別のテーブルに (たとえば、別のドメインの同じ種類のテーブルに) 転送できますが、直接には転送できません。まず、テーブルの内容をファイルにダンプし、次にそのファイルを他のテーブルにロードする必要があります。ただし、ファイル内の情報は正しくフォーマットされていなければなりません。各テーブルに必要なフォーマットについては第 10 章「NIS+ のテーブルと情報」で説明しています。

情報をテーブルにロードするとき、置換 (replace)、追加 (append)、またはマージ (merge) の 3 つのオプションを自由に使用できます。追加オプションは、ソースエントリを NIS+ テーブルに単純に追加します。置換オプションの場合、NIS+ は、まずテーブル内のすべての既存エントリを削除し、次にソースからエントリを追加します。大規模なテーブルでは、これによって多くのエントリセット (1 セットは既存エントリの削除用、他のセットは新エントリの追加用) がテーブルの .log ファイルに追加され、/var/nis 内の領域を占有し、複製への伝達に長時間を要することになります。

マージオプションでは、置換オプションと同じ結果が得られますが、異なるプロセスを使っており、複製に送信する動作数が大幅に減少します。このオプションでは、NIS+ は次の 3 種類のエントリを異なる方法で処理します。

大きなテーブルを更新する場合で、内容の変更があまりないときは、マージオプションを使用するとサーバーは多くの動作を節約できます。ソース内で重複していないエントリだけを削除する (置換オプションは全エントリを無差別に削除する) ため、重複エントリごとに 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+ テーブルに転送するには、いくつかの方法があります。


nisaddent -f filename table-type

nisaddent -a -f 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 回ずつ) 実行する必要があります。


/etc/inet/ipnodes ファイル (IPv6 アドレス) のエントリを ipnodes.org_dir テーブルにマージするには、-v オプションと -f オプションを使用します。


rootmaster# /usr/lib/nis/nisaddent -mv -f  /etc/inet/ipnodes ipnodes

もう 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 マップからデータをロードする

NIS マップから情報を転送する方法は 2 つあり、NIS ドメインを指定するか、または実際の NIS マップを指定します。ドメインを指定した場合、NIS+ は、table-type に基づいて、/var/yp/nisdomain 内のどのマップファイルをソースとして使うかを判断します。/var/yp/nisdomain は「ローカル」ファイルでなければなりません。

NIS+ テーブル形式 

NIS マップ名 

Hosts

hosts.byaddr

Nodes

ipnodes.byaddr

Passwd

passwd.byname

Group

group.byaddr

Ethers

ethers.byname

Netmasks

netmasks.byaddr

Networks

networks.byname

Protocols

protocols.byname

RPC

rpc.bynumber

Services

services.byname

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+ テーブルの内容をファイルにダンプする

NIS+ テーブルの内容をファイルにダンプするには、-d-t のオプションを使います。-d オプションは、ダンプするようコマンドに指示します。-t オプションは、NIS+ テーブルを指定します。


rootmaster# nisaddent -d auto_home \
 -t auto_home.org_dir.doc.com. key-value 
rootmaster# nisaddent -d auto_home \
 -t auto_home.org_dir.doc.com.  key-value sales.doc.com.