使用
ldapmodify
和
ldapdelete
管理条目
ldapmodify
和
ldapdelete
命令行实用程序提供了用于添加、编辑和删除目录内容的完整功能。可以使用这些实用程序管理服务器的配置条目和用户条目中的数据。还可以使用这些实用程序编写脚本,以便对一个或多个目录执行批量管理。
本书中的过程几乎都使用了
ldapmodify
和
ldapdelete
命令。以下部分介绍执行这些过程所需的基本操作。有关
ldapmodify
和
ldapdelete
命令的详细信息,请参见
《Sun Java System Directory Server Enterprise Edition 6.2 Reference》
。
命令行实用程序的输入始终采用 LDIF 格式,可以直接从命令行或通过输入文件提供此输入。以下部分提供了与 LDIF 输入有关的信息,后续部分将介绍适用于每种修改类型的 LDIF 输入。
有关正确设置 LDIF 输入格式的信息,请参见
《Sun Java System Directory Server Enterprise Edition 6.2 Reference》
中的
“Guidelines for Providing LDIF Input”
。
以下部分介绍这些基本操作:
使用 ldapmodify 添加条目
$ ldapmodify -a -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: ou=People,dc=example,dc=com
objectclass: top
objectclass: organizationalUnit
ou: People
description: Container for user entries
dn: uid=bjensen,ou=People,dc=example,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetorgPerson
uid: bjensen
givenName: Barbara
sn: Jensen
cn: Babs Jensen
telephoneNumber: (408) 555-3922
facsimileTelephoneNumber: (408) 555-4000
mail: [email protected]
userPassword: secret
-D
和
-w
选项分别提供用户的绑定 DN 和密码(该用户具有创建这些条目的权限)。
-a
选项表示将添加 LDIF 中的所有条目。然后将按 DN 和属性值列出每个条目,各条目之间以空行分隔。
ldapmodify
实用程序将在输入每个条目后创建该条目,并会报告任何错误。
按照约定,条目的 LDIF 将列出以下属性:
条目 DN。
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: ou=People,dc=example,dc=com
changetype: add
objectclass: top
objectclass: organizationalUnit
ou: People
description: Container for user entries
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: add
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetorgPerson
uid: bjensen
givenName: Barbara
sn: Jensen
cn: Barbara Jensen
telephoneNumber: (408) 555-3922
facsimileTelephoneNumber: (408) 555-4000
mail: [email protected]
userPassword: secret
changetype: add
关键字表示应该使用所有后续属性创建具有给定 DN 的条目。所有其他选项和 LDIF 约定都与本部分前面的叙述相同。
在这两个示例中,都可以使用
-f
filename
选项从文件(而非终端输入)中读取 LDIF。LDIF 文件所包含的格式必须与终端输入使用的格式相同,这取决于您是否使用
-a
选项。
使用
ldapmodify
修改条目
可使用 DSCC 执行此任务。有关信息,请参见
目录服务控制中心界面
和 DSCC 联机帮助。
可以使用
changetype: modify
关键字在现有条目中添加、替换或删除属性及属性值。指定
changetype: modify
时,还必须提供一个或多个更改操作,以表明将如何修改条目。以下示例中显示了三种可能的 LDIF 更改操作:
可以使用独占一行的连字符 (
-
) 分隔相同条目上的操作,并可使用空行来分隔不同条目上的操作组。还可以为每个操作提供多个
attribute
:
value
对。
添加属性值
无法使用 DSCC 执行此任务。请使用命令行,如以下过程所述。
以下示例显示如何使用相同的
add
LDIF 语法向现有多值属性和尚未存在的属性中添加值:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: cn
cn: Babs Jensen
add: mobile
mobile: (408) 555-7844
如果存在以下任一情况,则此操作可能会失败,并且服务器将返回错误:
属性中已存在给定的值。
使用二进制属性子类型
可使用 DSCC 执行此任务。有关信息,请参见
目录服务控制中心界面
和 DSCC 联机帮助。
attribute
;binary
子类型表示属性值必须作为二进制数据通过 LDAP 进行传输,而不考虑属性值的实际语法。此子类型适用于没有 LDAP 字符串表示的复杂语法,如
userCertificate
。不应将二进制子类型用于其他目的。
在
ldapmodify
命令中使用时,可以将相应的子类型添加到任何 LDIF 语句的属性名称中。
要输入二进制值,可以在 LDIF 文本中直接键入或从其他文件读取。以下示例显示了用于从文件读取二进制值的 LDIF 语法:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
version: 1
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: userCertificate;binary
userCertificate;binary:< file:///local/cert-file
要使用
:<
语法指定文件名,必须将
version: 1
行作为 LDIF 语句的开头。当
ldapmodify
处理此语句时,它会将属性设置为从给定文件的全部内容中读取的值。
添加具有语言子类型的属性
可使用 DSCC 执行此任务。有关信息,请参见
目录服务控制中心界面
和 DSCC 联机帮助。
属性的语言和发音子类型可指定本地化的值。为属性指定语言子类型时,该子类型将添加到属性名称中,如下所示:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
add: homePostalAddress;lang-fr
homePostalAddress;lang-fr: 34, rue de la Paix
注 –
如果属性值包含非 ASCII 字符,则这些字符必须为 UTF-8 编码的字符。
修改属性值
可使用 DSCC 执行此任务。有关信息,请参见
目录服务控制中心界面
和 DSCC 联机帮助。
以下示例说明如何通过使用 LDIF 中的
replace
语法更改属性值:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
replace: sn
sn: Morris
replace: cn
cn: Barbara Morris
cn: Babs Morris
将删除指定属性的所有当前值,并添加所有给定值。
更改属性值之后,您可以使用
ldapsearch
命令验证此更改。
属性值中的结尾空格
修改属性值时,请勿不小心在值的末尾包含空格。结尾空格可能会导致值以 base-64 编码格式显示(如
34xy57eg
)。
如果属性值的末尾是空格,则此空格将作为属性值的一部分进行编码。在使用 DSCC 或
ldapsearch
命令验证更改时,所显示的值可能是纯文本,也可能是 base-64 编码的文本。这取决于您所使用的目录服务器客户端。
删除属性值
可使用 DSCC 执行此任务。有关信息,请参见
目录服务控制中心界面
和 DSCC 联机帮助。
以下示例说明如何完整地删除属性,以及如何仅删除多值属性的一个值:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
delete: facsimileTelephoneNumber
delete: cn
cn: Babs Morris
使用
delete
语法时如果不指定
attribute: value
对,将删除该属性的所有值。如果指定
attribute: value
对,则只会删除该值。
修改多值属性的一个值
可使用 DSCC 执行此任务。有关信息,请参见
目录服务控制中心界面
和 DSCC 联机帮助。
要使用
ldapmodify
命令修改多值属性的一个值,必须执行以下示例中显示的两个操作:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: modify
delete: mobile
mobile: (408) 555-7845
add: mobile
mobile: (408) 555-5487
使用
ldapdelete
删除条目
可使用 DSCC 执行此任务。有关信息,请参见
目录服务控制中心界面
和 DSCC 联机帮助。
可以使用
ldapdelete
命令行实用程序从目录中删除条目。此实用程序将绑定到目录服务器,并根据条目 DN 删除一个或多个条目。必须提供具有删除指定条目的权限的绑定 DN。
您无法删除具有子条目的条目。LDAP 协议不允许出现子条目不再具有父条目的情形。例如,您无法删除组织单位条目,除非先删除了属于该组织单位的所有条目。
以下示例仅显示组织单位的一个条目。可以先后删除此条目及其父条目。
$ ldapdelete -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
Enter bind password:
uid=bjensen,ou=People,dc=example,dc=com
ou=People,dc=example,dc=com
使用
ldapmodify
删除条目
可使用 DSCC 执行此任务。有关信息,请参见
目录服务控制中心界面
和 DSCC 联机帮助。
使用
ldapmodify
实用程序时,还可以使用
changetype: delete
关键字删除条目。使用
ldapdelete
时的所有限制此时同样适用,如上一部分所述。使用 LDIF 语法删除条目的优点在于,您可以在单个 LDIF 文件中执行混合操作。
以下示例执行与上一示例相同的删除操作:
$ ldapmodify -h host1 -p 1389 -D cn=admin,cn=Administrators,cn=config -w -
dn: uid=bjensen,ou=People,dc=example,dc=com
changetype: delete
dn: ou=People,dc=example,dc=com
changetype: delete
使用
ldapsearch
搜索条目
可使用 DSCC 执行此任务。有关信息,请参见
目录服务控制中心界面
和 DSCC 联机帮助。
可以使用
ldapsearch
命令行实用程序查找和检索目录条目。请注意,
ldapsearch
实用程序不是 Solaris 平台提供的实用程序,而是 Directory Server Resource Kit 的一部分。
有关使用
ldapsearch
、
ldapsearch
常用选项、接受的格式以及示例的详细信息,请参阅
《Sun Java System Directory Server Enterprise Edition 6.2 Reference》
。