では早速、dsLocalのデータベースにアクセスしてみよう。Open Directoryにはインタラクティブなアクセスを行うdsclというコマンドがある。これを実行することでdsclをじっくりと見て回ることが可能だ。

dsclコマンドの実行は「dscl」と入力するだけだ。すると、ローカルのDirectoryServiceサーバに接続し、「>」のプロンプトが表示される(実行例1)。

実行例1 dsclコマンドの実行

 % dscl
 Entering interactive mode... (type "help" for commands)
  >

接続後、lsコマンドを実行すると、Open Directoryに格納された、階層化された情報が表示される(実行例2)。これはファイルツリーに対するlsコマンドとほぼ同様だ。

実行例2 Leopard上でのlsコマンド実行結果

 % dscl
 Entering interactive mode... (type "help" for commands)
  > ls
 BSD
 Local

 Search
 Contact
  >

Leopardの場合、実行例2のように「BSD」「Local」「Search」「Contact」といった要素が表示される。これがTigerの場合は、実行例3のように「Local」がなく、代わりに「NetInfo」が表示される。このNetInfoがこれまでローカルの情報を格納していたNetInfoから提供されていた情報のツリーであり、「Local」が、Leopardから採用されたdsLocalにより提供されているツリーになる。

実行例3 Tiger上でのlsコマンド実行結果

  > ls
 Bonjour
 BSD
 NetInfo
 SLP

 Search
 Contact
  >

なお、それ以外の要素を簡単に説明すると、BSDは/etc以下のフラットファイルで、読み取りのみが可能となっている。1行開けて下にあるSearchとContactはディレクトリの検索用、あるいはアドレス帳目的のディレクトリをアクセスするための特別なディレクトリだ。Mac OS X ServerのOpen Directoryを利用している場合は、さらにLDAPv3というディレクトリが存在し、その下にMac OS X ServerのIPアドレスごとサブディレクトリが用意されている(図1)

図1: Mac OS X ServerのOpen Directoryを利用している場合

cd /Local」を実行すると、Localサブディレクトリにカレントディレクトリを変更できる。

なお、dsclはeditlineライブラリ(注1)を利用しており、emacsキーバインドによる行編集やパスの補完ができるようになっているが、Leopardではコマンドのヒストリが使えるように機能強化されている。

通常、/Localの下にはDefaultというサブディレクトリのみが存在する。このサブディレクトリの下が実際の情報が格納されたディレクトリになる(実行例4)。

実行例4 /Local配下のDefaultサブディレクトリ

 % dscl
 Entering interactive mode... (type "help" for commands)
  > ls
 BSD
 Local

 Search
 Contact
  > cd /Local/
 /Local > ls
 Default
 /Local > cd Default/
 /Local/Default >

Defaultの下には数多くのサブディレクトリが存在する(実行例5)。例えば、Usersの下には各ユーザごとのディレクトリが存在し、パスワードを除くアカウント情報が格納されている。Hostsサブディレクトリの下は/etc/hostsに相当する情報が格納されるが、デフォルトでは空になっている(実行例6)。それぞれのディレクトリの説明は表1にある通りだ。

実行例5 Defaultの下には数多くのサブディレクトリが存在する

 /Local/Default > ls
 AFPServer
 AFPUserAliases
 Aliases
 AppleMetaRecord
 Augments
 Automount
 AutomountMap
 AutoServerSetup
 Bootp
 ……
 ……
 Protocols
 QTSServer
 Resources
 RPC
 Server
 Services
 SharePoints
 SMBServer
 Users
 WebServer
 /Local/Default >

実行例6 Hostsサブディレクトリの下は/etc/hostsに相当する情報が格納されるが、デフォルトでは空となっている

 /Local/Default > ls Hosts
 /Local/Default >

表1: RecordType 一覧(一般的に利用されているもののみ。これ以外にも特定状況で利用される様々な RecordTypeが存在する)

名称 DirectoryServiceでのキーワード 内容
AFPServer kDSStdRecordTypeAFPServer AFPサーバに関する設定
AFPUserAliases kDSStdRecordTypeAFPUserAliases AFPサーバのプロセスが利用するユーザ名のエイリアスの設定
Aliases kDSStdRecordTypeAliases メールなどで使われるエイリアスの設定
Automount kDSStdRecordTypeAutomount オートマウンタが用いる、NFSのマウント情報を格納
AutomountMap kDSStdRecordTypeAutomountMap オートマウンタが用いる、NFSのマウント用マップ情報を格納
Computers kDSStdRecordTypeComputers 各クライアントおよびサーバマシンに関する情報(MACアドレスなど)が格納される
Config kDSStdRecordTypeConfig 各種サーバソフトウェアの設定が格納される。実際にはサービスごとこのツリーの下にサブディレクトリを構築している
Groups kDSStdRecordTypeGroups グループに関する情報を格納
Mounts kDSStdRecordTypeMounts クライアントマシンでの、リモートのファイルサーバにおけるファイル共有のマウント情報を格納
People kDSStdRecordTypePeople ユーザアカウントとは限らない、人に関連する情報を格納
PresetComputers kDSStdRecordTypePresetComputerGroups WorkGroupManagerのコンピュータに対する設定のひな形を格納
PresetGroups kDSStdRecordTypePresetGroups WorkGroupManagerのグループに対する設定のひな形を格納
PresetUsers kDSStdRecordTypePresetUsers WorkGroupManagerのユーザアカウントに対する設定のひな形を格納
Printers kDSStdRecordTypePrinters 設定されたプリンタの情報を格納
SharePoints kDSStdRecordTypeSharePoints Leopardにおける、ファイル共有の設定を格納
Users kDSStdRecordTypeUsers ユーザアカウント情報を格納
注1: editline
BSD由来の行編集ライブラリ。GNUのreadline互換のAPIと、より強力な独自のAPIを備えている。詳細は「man editline」で参照のこと。機能面もさることながら、1番の利点はreadlineと違いBSDライセンスのためGPLの縛りを気にすることなく利用できる点だろう。1番の問題点は、readlineに比べ参照できる文献が少なく、利用するに少し骨なところか。

なお、dsclのコマンドのソースコード自体はDarwinの一部として公開されている。