给定一个系统,其中用户数据来自 OpenLDAP 数据库,并且不在文件中/etc/passwd
。是否可以getent passwd
通过指定(部分)全名来搜索数据库并查找用户 ID/名称?
例如getent passwd newbie
给我以下条目
newbie:x:1000:1000:firstname lastname:/home/newbie:/bin/zsh
如何找到所有具有“姓氏”的用户?有没有类似的东西getpwnam
对于 gecos 领域?
注意:我不能只使用getent passwd
(没有用户名)然后解析它,因为我的数据库太大了。
答案1
我还没有找到搜索数据库的方法,但在 OpenLDAP 中查找条目直接对我有用。
$ ldapsearch -x -h ldap.example.com -ZZ \
-D cn=lookup,dc=example,dc=com -W \
-b ou=People,dc=example,dc=com -LLL \
sn=lastname uid
dn: uid=newbie,ou=People,dc=example,dc=com
uid: newbie
$
答案2
您可以使用类似以下sed
命令的命令:
$ SURNAME=Smith
$ getent passwd | sed -n '/'$SURNAME'/s/^\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([[:alpha:]]\+ '$SURNAME'\):\([^:]*\):\([^:]*\)$/\1 (\5)/p'
$ fps (Finnbarr Smith)
jms (James Smith)
$
根据您的问题,上面的“sed”正则表达式假定 GECOS 字段恰好包含 <FIRSTNAME><SPACE><LASTNAME>,例如“James Smith”。它可以轻松修改以适应其他 GECOS 现场布局。
答案3
您可以在以下输出上使用 awk getent passwd
:
getent passwd | awk -F: '$5 ~ /lastname/ {print $1}'