ユーザーデータが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フィールドに「James Smith」などの<FIRSTNAME> <SPACE> <LASTNAME>が含まれていると想定しています。他のGECOSサイトのレイアウトに合わせて簡単に変更できます。
答え3
次の出力でawkを使用できますgetent passwd
。
getent passwd | awk -F: '$5 ~ /lastname/ {print $1}'