では早速、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)
「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の一部として公開されている。