사용자 데이터가 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}'