Search

通過全名/gecos 欄位查找使用者名?

  • April 19, 2018

給定一個使用者數據來自例如 OpenLDAP 數據庫並且不在/etc/passwd文件中的系統。是否可以通過指定(部分)全名來搜尋getent passwd數據庫並查找使用者 ID/名稱?

例如getent passwd newbie給了我以下條目

newbie:x:1000:1000:firstname lastname:/home/newbie:/bin/zsh

如何找到所有具有“姓氏”的使用者?getpwnamgecos 領域有類似的東西嗎?

注意:我不能只使用getent passwd(沒有使用者名)然後解析它,因為我的數據庫太大了。

我還沒有找到搜尋數據庫的方法,但是直接在 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

$

您可以使用類似以下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 現場佈局。

引用自:https://unix.stackexchange.com/questions/438629