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.