전체 이름/gecos 필드로 사용자 이름을 찾으시겠습니까?

전체 이름/gecos 필드로 사용자 이름을 찾으시겠습니까?

사용자 데이터가 OpenLDAP 데이터베이스에서 나오며 파일에는 없는 시스템이 있다고 가정합니다 /etc/passwd. getent passwd전체 이름(일부)을 지정하여 데이터베이스를 검색하고 사용자 ID/이름을 찾을 수 있습니까 ?

예를 들어 getent passwd newbie다음 항목을 알려주십시오.

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

"성"을 가진 모든 사용자를 찾는 방법은 무엇입니까? 비슷한 게 있나요getpwnamgecos 필드의 경우?

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}'

관련 정보