read files directly VS getent

A lot of this will come down to factors stemming from the specific environment you're in, but I prefer the getent method because it looks up external users as well as local users. Specifically, it will look up the LDAP users in my environment from the LDAP server, whereas a cat /etc/passwd or similar has no idea my LDAP server even exists, much less has valid users on it. If all your users are always local, getent doesn't really buy you much aside from "no need to rewrite if we add an LDAP server in 10 years".


The getent approach would be more compatible and preferable. Those files (/etc/group, /etc/hosts, /etc/services, /etc/passwd, ...) are not always in /etc they could also be, depending on the operating system you're on, in other places. getent would anyway find the entries (if it's on the system).

Also as @John stated, getent searches trough all configured nsswitch databases. Even if you have (multiple) external sources connected, where your users are authenticated with or name resolutions via DNS-servers and so on. getent therefore is slower, because every lookup must go trough all databases.