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와 조회 순서를 따른다.
Installation
getent는 별도 application이 아니라 GNU libc의 utility로 제공되며, 일반적인 Linux system에는 기본 설치되어 있다.
Debian / Ubuntu
Debian 계열에서는 libc-bin package에 포함된다.
sudo apt update sudo apt install libc-bin getent --version
Fedora / RHEL
Fedora와 RHEL 계열에서는 glibc-common package의 common binary로 제공된다.
sudo dnf install glibc-common getent --version
macOS
macOS는 GNU libc가 아닌 Darwin libc와 Directory Services를 사용하므로 GNU libc getent를 기본 제공하지 않으며, 공식 Homebrew formula도 없다. 사용자와 host 조회에는 목적에 따라 dscl, dscacheutil, id, host 등을 사용한다. 이 명령들은 getent 및 NSS와 동작 방식이 다르다.
Windows
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
Usage
getent [OPTION...] DATABASE [KEY ...]
getent [OPTIONS…] DATABASE [KEY …]getent -s SERVICE DATABASE [KEY …]
KEY를 지정하면 일치하는 entry만 출력한다. 생략하면 database 전체를 열거하지만, 일부 database는 열거를 지원하지 않는다. script에서는 결과가 없을 때 exit status 2가 반환되므로 출력 문자열만으로 성공 여부를 판단하지 않는다.
Databases
| 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에서 확인한다.
Options
-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 정보를 출력한다.
Examples
현재 user entry 조회
getent passwd "$USER"
user name 대신 숫자 UID도 사용할 수 있다.
getent passwd 1000
Group 조회
getent group sudo getent initgroups "$USER"
Host와 address 조회
기존 /etc/hosts entry뿐 아니라 /etc/nsswitch.conf의 hosts 순서에 지정된 source를 조회한다.
# /etc/hosts를 포함한 NSS source에서 localhost 조회 getent hosts localhost # IPv4/IPv6 socket address를 모두 조회 getent ahosts example.com # IPv4 결과만 조회 getent ahostsv4 example.com
Service와 protocol 조회
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
특정 NSS service만 사용
# local files source에서만 host 조회 getent --service=files hosts localhost # hosts database에만 DNS source 강제 getent --service=hosts:dns hosts example.com
getent shadow와 getent gshadow는 password hash 같은 민감한 정보를 출력할 수 있다. 결과를 terminal scrollback, log, ticket, wiki 또는 CI artifact에 남기지 말고, 필요한 key 하나만 최소 권한으로 조회한다.
getent passwd나 getent group을 실행하면 LDAP/NIS 같은 network directory 전체를 열거할 수 있다. 대규모 또는 production directory에서는 먼저 특정 key 조회를 사용하고, 전체 열거가 필요한지 확인한다.
Configuration
/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을 각각 조회하여 변경 후 동작을 검증한다.
Exit Status
0: 조회 또는 열거에 성공했다.1: 필수 argument가 없거나 알 수 없는 database다.2: 하나 이상의 지정한 key를 찾지 못했다.3: 해당 database가 전체 열거를 지원하지 않는다.
여러 key를 한 번에 조회하는 automation에서는 일부 key만 실패해도 2가 될 수 있으므로 출력과 exit status를 함께 처리한다.
Help
Troubleshooting
- 결과가 없고 exit status가
2임: key가 존재하지 않거나 NSS source에서 찾지 못했다.getent DATABASE KEY; echo $?로 상태를 확인한다. getent DATABASE가3으로 끝남:ethers,initgroups,netgroup처럼 전체 열거를 지원하지 않는 database일 수 있다. 적절한 key를 지정한다.getent hosts NAME과 DNS 도구의 결과가 다름:getent는/etc/nsswitch.conf의hosts순서, NSS module, cache와 local file을 모두 따르므로 DNS만 직접 질의하는 도구와 결과가 다를 수 있다.getent hosts에 DNS 전체 목록이 나오지 않음: DNS zone 전체 열거는 일반적인 NSS host enumeration 대상이 아니다. 특정 host name을 key로 조회한다.- LDAP/NIS user가 보이지 않음:
passwd또는groupline의 NSS service 순서, module 설치, daemon 상태, network 연결과 권한을 확인한다. shadow결과가 비어 있음: protected database를 읽을 권한이 없을 수 있다. 권한을 높이기 전에 민감한 출력이 실제로 필요한지 확인한다.- IDN host 조회가 다름: 기본 IDN encoding의 영향을 확인하고 진단 목적으로
–no-idn과 비교한다.
Compatibility
이 페이지의 option과 database는 GNU libc getent 기준이다. 다른 Unix 계열에도 이름이 같은 명령이 있을 수 있지만 지원 database, NSS backend, option과 출력 형식이 다를 수 있다.
getent 출력 형식은 선택한 database와 NSS module의 결과를 반영한다. field를 parsing하는 script는 system별 추가 field, 공백, 여러 address 결과를 가정하고, password hash field가 항상 실제 hash를 포함한다고 가정하지 않는다.
See Also
History
- codex:: 2026-07-29 GNU libc NSS 동작, 설치, database, option, 안전한 예제, configuration, exit status, troubleshooting과 compatibility를 추가하고
getent:ko로 이동했다.