Could anyone please suggest how we can check in Linux if a user or a group name is already existing? In case of a user the command should also be able to specify the user with a given directory and shell. We can of course check this using a grep command but since that is just a pattern match, is there any better way to do this?
"id <test_id>" will tell you if an id is in service. In the beginning, all IDs were in /etc/passwd in colon-separated text, and all groups were in /etc/group.
Later, to maintain identical values across many systems, NIS and YP (yellow pages) were created to share values across systems in addition to the original files, with presentations like the original files from nispasswd or yppasswd. This was especially necessary with NFS mounts, where the same disk with ID and Group #'s on UFS-like file inodes is on two or more systems. Man Page for yppasswd (all Section 1) - The UNIX and Linux Forums
But my idea too is that 'id' should be a better approach. getent again is a pattern matching thing and could be ambiguous if there are users like test, test1, test2 and we are looking only for test user. Please correct me if i am wrong. I know that giving the correct pattern could be a solution, but the example I have taken is only a simple one. Is 'id' not the surest way to do this as compared to getent, grep etc.?
I'm afraid you are. getent is not pattern matching based but expects complete names or ids. In addition getent can query the group database while id is restricted to the passwd one. The question is also asking how to make sure a group name isn't already used but id can't be used to achieve that task.
So, in a positive vein, what is the ldap equivalent of "ypcat passwd" and "ypcat group"? We could pile up all the possibilities inside parens in bash, feeding "| sort -u ".