getent

getent는 GNU C Library의 Name Service Switch(NSS)를 통해 사용자, 그룹, host, service 같은 관리 database의 entry를 조회하는 명령어다. 단순히 /etc/passwd/etc/hosts만 읽는 것이 아니라 /etc/nsswitch.conf에 설정된 files, DNS, LDAP, NIS, systemd 등의 source와 조회 순서를 따른다.

getent는 별도 application이 아니라 GNU libc의 utility로 제공되며, 일반적인 Linux system에는 기본 설치되어 있다.

Debian 계열에서는 libc-bin package에 포함된다.

sudo apt update
sudo apt install libc-bin
getent --version

Fedora와 RHEL 계열에서는 glibc-common package의 common binary로 제공된다.

sudo dnf install glibc-common
getent --version

macOS는 GNU libc가 아닌 Darwin libc와 Directory Services를 사용하므로 GNU libc getent를 기본 제공하지 않으며, 공식 Homebrew formula도 없다. 사용자와 host 조회에는 목적에 따라 dscl, dscacheutil, id, host 등을 사용한다. 이 명령들은 getent 및 NSS와 동작 방식이 다르다.

GNU libc getent의 공식 native Windows 또는 winget package는 없다. Linux와 같은 NSS 조회가 필요하면 WSL distribution 안에서 해당 distribution의 package를 사용한다.

wsl --install
sudo apt update
sudo apt install libc-bin
getent --version
getent [OPTION...] DATABASE [KEY ...]
  • getent [OPTIONS…] DATABASE [KEY …]
  • getent -s SERVICE DATABASE [KEY …]

KEY를 지정하면 일치하는 entry만 출력한다. 생략하면 database 전체를 열거하지만, 일부 database는 열거를 지원하지 않는다. script에서는 결과가 없을 때 exit status 2가 반환되므로 출력 문자열만으로 성공 여부를 판단하지 않는다.

Database 조회 대상과 key
ahosts host name의 IPv4/IPv6 socket address. getaddrinfo(3)를 사용한다.
ahostsv4 IPv4 address만 조회한다.
ahostsv6 IPv6 address를 조회하며 IPv4-mapped address가 포함될 수 있다.
aliases mail alias를 이름으로 조회한다.
ethers Ethernet address 또는 host name을 조회한다. key가 필수다.
group group name 또는 숫자 GID로 조회한다.
gshadow protected group database를 조회한다. 일반적으로 root 권한이 필요하다.
hosts host name 또는 IPv4/IPv6 address를 조회한다.
initgroups user의 supplementary group을 조회한다. key가 필수다.
netgroup netgroup의 host, user, domain triple을 조회하거나 membership을 검사한다.
networks network name 또는 number를 조회한다.
passwd user name 또는 숫자 UID로 조회한다.
protocols protocol name 또는 number를 조회한다.
rpc RPC program name 또는 number를 조회한다.
services service name 또는 port number를 조회한다.
shadow protected password database를 조회한다. 일반적으로 root 권한이 필요하다.

지원 database는 GNU libc version과 system 구성에 따라 달라질 수 있다. 현재 system의 목록은 getent –help에서 확인한다.

  • -s SERVICE, –service=SERVICE: 모든 database 조회에 지정한 NSS service를 강제로 사용한다.
  • -s DATABASE:SERVICE, –service=DATABASE:SERVICE: 지정 database에만 service를 강제로 사용한다. 여러 번 사용할 수 있으며 같은 database에는 마지막 값이 적용된다.
  • -i, –no-idn: ahosts 계열 조회에서 IDN encoding을 비활성화한다.
  • -?, –help: 도움말을 출력한다.
  • –usage: 짧은 usage를 출력한다.
  • -V, –version: GNU libc version과 license 정보를 출력한다.

현재 user entry 조회

getent passwd "$USER"

user name 대신 숫자 UID도 사용할 수 있다.

getent passwd 1000
getent group sudo
getent initgroups "$USER"

기존 /etc/hosts entry뿐 아니라 /etc/nsswitch.confhosts 순서에 지정된 source를 조회한다.

# /etc/hosts를 포함한 NSS source에서 localhost 조회
getent hosts localhost
 
# IPv4/IPv6 socket address를 모두 조회
getent ahosts example.com
 
# IPv4 결과만 조회
getent ahostsv4 example.com
getent services ssh
getent services 443
getent protocols tcp
if entry=$(getent passwd appuser); then
    printf '%s\n' "$entry"
else
    status=$?
    printf 'appuser lookup failed: exit %s\n' "$status" >&2
fi
# local files source에서만 host 조회
getent --service=files hosts localhost
 
# hosts database에만 DNS source 강제
getent --service=hosts:dns hosts example.com
getent shadowgetent gshadow는 password hash 같은 민감한 정보를 출력할 수 있다. 결과를 terminal scrollback, log, ticket, wiki 또는 CI artifact에 남기지 말고, 필요한 key 하나만 최소 권한으로 조회한다.
key 없이 getent passwdgetent group을 실행하면 LDAP/NIS 같은 network directory 전체를 열거할 수 있다. 대규모 또는 production directory에서는 먼저 특정 key 조회를 사용하고, 전체 열거가 필요한지 확인한다.

/etc/nsswitch.conf는 database별 NSS source와 조회 순서를 정의한다.

passwd:         files systemd
group:          files systemd
hosts:          files dns
services:       db files

앞쪽 source가 먼저 조회된다. [NOTFOUND=return] 같은 action 조건이 있으면 lookup 결과에 따라 다음 source로 진행하지 않을 수 있다. 설정을 바꾸기 전에 현재 파일과 해당 NSS module 문서를 확인한다.

getent passwd "$USER"
getent hosts localhost
getent hosts example.com

위와 같이 local entry와 외부 name을 각각 조회하여 변경 후 동작을 검증한다.

  • 0: 조회 또는 열거에 성공했다.
  • 1: 필수 argument가 없거나 알 수 없는 database다.
  • 2: 하나 이상의 지정한 key를 찾지 못했다.
  • 3: 해당 database가 전체 열거를 지원하지 않는다.

여러 key를 한 번에 조회하는 automation에서는 일부 key만 실패해도 2가 될 수 있으므로 출력과 exit status를 함께 처리한다.

getent --help (GNU libc 2.28)

  • 결과가 없고 exit status가 2임: key가 존재하지 않거나 NSS source에서 찾지 못했다. getent DATABASE KEY; echo $?로 상태를 확인한다.
  • getent DATABASE3으로 끝남: ethers, initgroups, netgroup처럼 전체 열거를 지원하지 않는 database일 수 있다. 적절한 key를 지정한다.
  • getent hosts NAMEDNS 도구의 결과가 다름: getent/etc/nsswitch.confhosts 순서, NSS module, cache와 local file을 모두 따르므로 DNS만 직접 질의하는 도구와 결과가 다를 수 있다.
  • getent hostsDNS 전체 목록이 나오지 않음: DNS zone 전체 열거는 일반적인 NSS host enumeration 대상이 아니다. 특정 host name을 key로 조회한다.
  • LDAP/NIS user가 보이지 않음: passwd 또는 group line의 NSS service 순서, module 설치, daemon 상태, network 연결과 권한을 확인한다.
  • shadow 결과가 비어 있음: protected database를 읽을 권한이 없을 수 있다. 권한을 높이기 전에 민감한 출력이 실제로 필요한지 확인한다.
  • IDN host 조회가 다름: 기본 IDN encoding의 영향을 확인하고 진단 목적으로 –no-idn과 비교한다.

이 페이지의 option과 database는 GNU libc getent 기준이다. 다른 Unix 계열에도 이름이 같은 명령이 있을 수 있지만 지원 database, NSS backend, option과 출력 형식이 다를 수 있다.

getent 출력 형식은 선택한 database와 NSS module의 결과를 반영한다. field를 parsing하는 script는 system별 추가 field, 공백, 여러 address 결과를 가정하고, password hash field가 항상 실제 hash를 포함한다고 가정하지 않는다.

  • codex:: 2026-07-29 GNU libc NSS 동작, 설치, database, option, 안전한 예제, configuration, exit status, troubleshooting과 compatibility를 추가하고 getent:ko로 이동했다.
  • /home/u613600155/domains/cli.zerotymer.net/public_html/data/pages/getent/ko.txt
  • 마지막으로 수정됨: 2026/07/29 07:29
  • (바깥 편집)