Comando getent in Linux: consultare utenti, gruppi e host con NSS
getent consulta le voci di utenti, gruppi e host tramite NSS (Name Service Switch), il meccanismo che seleziona le fonti di informazioni sui nomi del sistema. Permette di verificare il percorso di ricerca configurato, che può comprendere sia file locali sia servizi esterni.
In un sistema con la libreria GNU C, detta glibc, le fonti e l’ordine di ricerca dipendono da /etc/nsswitch.conf e dalle sue regole di risposta. Per questo getent può trovare un account assente dal solo file /etc/passwd. Una consultazione riuscita descrive le informazioni disponibili tramite NSS; non prova che la password funzioni o che l’accesso a un servizio sia autorizzato.
Sintassi di base
getent [opzioni] database [chiave...]
Scrivi prima il database e poi una o più chiavi, per esempio un nome utente. Parentesi e puntini indicano parti facoltative e ripetibili: sono notazione. Senza chiavi, getent tenta l’enumerazione delle voci, ma alcuni database o servizi non la supportano. Per una verifica mirata, comincia da una chiave precisa.
Questa guida descrive getent su glibc. La presenza del comando e le opzioni disponibili dipendono dal sistema: verifica con man getent e getent --version. Un altro ambiente o una diversa libreria C può fornire un comportamento differente.
Esempi d’uso
Consultare un account
getent passwd alice
Cerca l’account alice nelle fonti NSS previste per passwd. Il nome è un esempio: sostituiscilo con un account che vuoi verificare. Non crea l’utente e non cambia alcuna password.
Consultare un gruppo
getent group editors
Cerca il gruppo editors. Il record contiene nome, campo password, GID (Group ID, identificatore numerico del gruppo) ed elenco dei membri, separati da due punti. L’elenco non va interpretato da solo come inventario di tutti i gruppi di un utente: per questi controlli considera anche il gruppo primario e le informazioni di id.
Consultare un nome host
getent hosts localhost
Consulta la voce localhost tramite la configurazione NSS degli host. Il risultato può contenere indirizzi IPv4 o IPv6 secondo le fonti e la configurazione; non è una prova di connessione al servizio e non equivale a interrogare esclusivamente DNS (Domain Name System).
Leggere un risultato del database passwd
La ricerca seguente consulta l’account root tramite NSS:
getent passwd root
Output illustrativo; directory personale, descrizione e shell possono variare:
root:x:0:0:root:/root:/bin/bash
I sette campi, separati da due punti, sono:
- Nome dell’account: nell’esempio, root.
- Campo della password: x è un segnaposto e non mostra la password reale. Nel formato locale con password shadow, il dato corrispondente è gestito separatamente.
- UID (User ID), identificatore numerico dell’utente: qui 0.
- GID del gruppo primario: qui 0.
- Campo descrittivo, detto GECOS: qui contiene root.
- Directory personale: nell’esempio, /root.
- Shell di accesso: nell’esempio, /bin/bash.
Il manuale del formato passwd(5) descrive questi campi. Il nome del database passwd non va confuso con il comando che cambia la password: qui si consultano record di account.
Una risposta vuota non basta per decidere che un utente non esista in assoluto. Potrebbero mancare la chiave o una fonte raggiungibile nel contesto corrente. Confronta la chiave, il codice di uscita e la configurazione delle fonti prima di concludere.
Database e opzioni principali
| Database o opzione | Significato |
|---|---|
passwd |
Consulta account per nome o UID; senza chiave tenta l’enumerazione. |
group |
Consulta gruppi per nome o GID. |
hosts |
Consulta nomi e indirizzi degli host secondo NSS. |
-s servizio |
In glibc forza il servizio per i database. La forma -s database:servizio limita la sostituzione al database indicato. |
Le due forme di -s hanno ambiti diversi: il manuale getent(1) documenta -s servizio da glibc 2.2.5 e -s database:servizio da glibc 2.4. Per esempio, getent -s passwd:files passwd alice limita quella consultazione al servizio files. Una simile prova cambia il percorso interrogato dal comando, non riscrive la configurazione globale e non verifica le altre fonti.
Risposte vuote, errori e limiti
In glibc, dopo una consultazione puoi leggere subito $? nella stessa shell; un altro comando ne sostituisce il valore. I codici documentati sono:
0: comando completato con successo.1: argomenti mancanti o database sconosciuto.2: una o più chiavi non trovate nel database.3: enumerazione non supportata per quel database.
Il codice 2 non identifica da solo la causa di una mancata risposta. Controlla l’ortografia, quale database stai interrogando e le fonti effettive. Un servizio esterno come LDAP (Lightweight Directory Access Protocol) deve essere configurato, disponibile e raggiungibile; un file locale senza la voce non esclude un account fornito da quel servizio.
Le regole di nsswitch.conf comprendono ordine delle fonti e azioni in base all’esito, per esempio continuare o restituire una risposta. Non presumere che getent interroghi sempre tutte le fonti e ne unisca i risultati. Anche una cache o una libreria del servizio può incidere su ciò che osservi.
La ricerca per chiave e l’enumerazione completa sono operazioni diverse: una ricerca mirata può funzionare anche quando il servizio non elenca tutti gli utenti. Evita l’enumerazione completa come primo tentativo su directory grandi. Per una diagnosi, consulta prima la configurazione in sola lettura, senza cambiarla soltanto per far comparire il risultato atteso.
Domande frequenti
Che differenza c’è fra getent passwd alice e grep alice /etc/passwd?
getent effettua la ricerca per chiave attraverso NSS. grep cerca testo solo nel file locale e, con quella forma, può trovare alice anche dentro altri campi o nomi più lunghi. Con fonti esterne configurate, i risultati possono quindi differire sia per la fonte interrogata sia per il criterio di ricerca.
Documentazione di riferimento
Consulta il manuale getent(1) per database, opzioni e codici di uscita e il manuale nsswitch.conf(5) per il percorso di ricerca configurato.




