ldap的命令行工具,这里分别列举了oracle 10.2客户端安装包自带的工具($ORACLE_HOME/bin路径下)和OpenLDAP 2.2包含的客户端工具。
搜索
以下2个搜索结果是等价的,都是将basedn 'dc=zj,DC=com' 下的整棵树显示出来(Base DN必须指定)。差别:oracle 可以用 -X 打印出XML样式的输出;而 OpenLDAP 默认会输出许多注释(版本,数量,当前记录是什么),可用 -LLL 全部禁用掉。
OpenLDAP 默认是 sasl 验证,所以需要 -x 选项指定 simple auth。
OpenLDAP 中 filter 如果为空,则默认等于 'objectclass=*' ;而 oracle 必须指定 filter。
如果filter后紧接着Attr是 '' 则表示只输出dn,对两者都是一样的。
oracle 10.2:
ldapsearch -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe -s sub -b 'dc=zj,DC=com' 'objectclass=*'
openldap 2.2:
ldapsearch -x -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe -s sub -b 'dc=zj,DC=com'
添加
下面两个操作都表示从文件 file.ldif 中导入 -c 选项都表示,遇到错误继续(默认行为是遇到错误即停止添加操作)
oracle 10.2:
ldapadd -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe -f file.ldif
openldap 2.2:
ldapadd -x -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe -f file.ldif
删除
因为 ldapdelete 不支持递归删除,所以这里用一个shell脚本来完成该任务。
这里的例子表示删除 DN 为 ou=People,dc=zj,DC=com 及其下面的所有 children
2 # For openldap
3
4 # 临时文件
5 DELETE_ENTRY_FILE=/tmp/$$.ldif
6
7 # 输出ou=People,dc=zj,DC=com下的所有DN。注意这里对结果进行了反转,即最后一行转置位第一行
8 ldapsearch -x -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe -s sub -b 'ou=People,dc=zj,DC=com' -LLL '' | sed -e 's+^dn: *++' |tac > $DELETE_ENTRY_FILE
9
10 # 删除文件中列出的DN
11 ldapdelete -x -h localhost -p 389 -D 'cn=root,dc=zj,DC=com' -w 123qwe -f $DELETE_ENTRY_FILE
12
13 # 删除临时文件
14 rm $DELETE_ENTRY_FILE