UNIX / Linux Command To Check Existing Groups and Users

by on June 27, 2008 · 18 comments· LAST UPDATED April 6, 2015

in , ,

How do I check the existing Linux / UNIX users and groups under Linux operating system?

You can easily check the existing users and groups under a Linux or Unix-like systems such as HP-UX, AIX, FreeBSD, Apple OSX and more using the following commands:
Tutorial details
DifficultyEasy (rss)
Root privilegesNo
RequirementsNone
Estimated completion time1m

[a] getent command : Fetch details for a particular user or group from a number of important text files called databases on a Linux or Unix-like systems. This is portable and recommended way to get information on users and groups.

[b] Directly query /etc/passwd for user names or /etc/group file for group names.

Method #1: getent command to lookup username and group name

The syntax is as follows to find out if user named foo exists in system:

 
getent passwd userNameHere
getent passwd foo
 

The syntax is as follows to find out if group named bar exists in system:

 
getent group groupNameHere
getent group bar
 

Sample demo of all commands:

Fig.01: getent and friends demo on a Linux or Unix system to find out user and group names

Fig.01: getent and friends demo on a Linux or Unix system to find out user and group names

Method #2: Find out if user exists in /etc/passwd file

/etc/passwd file stores essential information required during login. All you have to do is search this file for user name using the following syntax:
grep username /etc/passwd
OR
egrep -i "^username" /etc/passwd
For, example find out if vivek user exists or not, enter:
$ egrep -i "^vivek" /etc/passwd
OR
$ egrep -i "^vivek:" /etc/passwd
Sample outputs:

vivek:x:1000:1000:Vivek Gite,,,,:/home/vivek:/bin/bash

A quick shell script code:

#!/bin/bash
# init
USERID="$1"
#....
/bin/egrep  -i "^${USERID}:" /etc/passwd
if [ $? -eq 0 ]; then
   echo "User $USERID exists in /etc/passwd"
else
   echo "User $USERID does not exists in /etc/passwd"
fi
# ....

Normally, exit status is 0 returned if user accounts (lines) are found and 1 otherwise.

Use awk command to search user name

The syntax is as follows to search user named 'apache'

 
awk -F':' '/^apache/{print $1}' /etc/passwd
 

Find out if group exists in /etc/group file

/etc/group is an text file which defines the groups to which users belong under Linux and UNIX operating system. Again, you have to search /etc/group file using following syntax:
$ egrep -i "^groupname" /etc/group
For, example find out if vivek group exists or not, enter:
$ egrep -i "^vivek" /etc/group

Say hello to id command

The id command is another option to display user / group information for any USERNAME, or the current user. To find out more about user called, tom, enter:
$ id tom
Sample outputs:

uid=516(tom) gid=516(tom) groups=516(tom)

id command exit status is 0 returned if user accounts (lines) are found and 1 otherwise. A sample shell script using id command:

#!/bin/bash
USERID="$1"
/bin/id $USERID 2>/dev/null
[ $? -eq 0 ] && echo "User found" || echo "User not found"
 
/bin/id -g $USERID 2>/dev/null
[ $? -eq 0 ] && echo "Group found" || echo "Group not found"
 
Further readings:
Tweet itFacebook itG+ itDownload PDF versionFound an error/typo on this page?

{ 18 comments… read them below or add one }

1 z0mbix June 27, 2008 at 12:15 pm

don’t forget the “:” after the username otherwise you could end up with this scenario:

$ egrep -i “^vivek” /etc/passwd
vivek:x:1000:1000:Vivek Gite,,,,:/home/vivek:/bin/bash
viveks:x:1001:1001:Vivek Smith,,,,:/home/viveks:/bin/bash

Reply

2 dkp April 6, 2015 at 4:36 am

I really wish the author would update the article to include that because you know 7 years later and still no fix? Worse yet, it’s the first Google search result for “linux check if group exists”.

Reply

3 Ramesh | The Geek Stuff June 27, 2008 at 2:29 pm

If you are using NIS do the following:

ypcat passwd | grep vivek

Ramesh

Reply

4 Pedro June 27, 2008 at 4:00 pm

The ‘id’ command should be demonstrated first in this tutorial, as systems using LDAP (other or remote authentication services) will not have users in the local {passwd,group} files.

Also why the uses of egrep when a simple grep will do. Keep it simple for the beginners your aiming at.

Reply

5 davidhi June 27, 2008 at 6:26 pm

You should look at getent rather than grepping the local files. “getent passwd” or “getent group” will provide a unified view of users or groups available, respecting your NSS (Name Service Switch) configuration (which is important when you have additional users or groups via LDAP or NIS).

Reply

6 himadri August 9, 2008 at 6:45 pm

hey Vivek, that was cool..

many of us surely wont care if its grep or egrep ( or fgrep) as long as it does the job and we are taught these wonderful tricks..

Reply

7 New in linux July 15, 2009 at 9:08 am

Can you please tell me a command to list all of existing user ?

Reply

8 Shahin December 15, 2011 at 5:43 am

U can try
egrep “*” /etc/passwd
or
egrep “?” /etc/passwd

Reply

9 nixCraft July 15, 2009 at 9:09 am

Try:

cut -d: -f1 /etc/passwd | less

Reply

10 Praba March 17, 2010 at 4:00 am

Very nice site, I could get, what i want in seconds rather than in minutes

Reply

11 Rob November 14, 2011 at 11:22 am

`id` comand does not check if groups exist.
`man id`

Print user and group information for the specified USERNAME

the -g flag prints out the primary group id for the user

Reply

12 sohaib December 29, 2011 at 5:05 pm

have you find any solution for that?

Reply

13 sachin November 15, 2011 at 10:56 am

Hello
Linux Gurus,
Is there a Command to find out user creation date ?

or any other possible ways to find the same.

please help me
Its urgent.

Thanks In Advance

Reply

14 manh March 14, 2012 at 3:58 am

please tell everyone you ask.
no way to list the user is not disabled in linux.
and has been in how long dis.

Reply

15 Sebastian March 26, 2012 at 3:24 am

The grep approaches are all wrong. You are assuming that an user won’t pick a name that is a started substring of an existing group. Even worse, if you choose to limit the ‘username’ string you could match a group instead of a user. You will mistakenly get output from the script thinking that the user ‘apache’ (or whatever) exists…

You can’t play with strings without semantics. You need a tool that in fact *knows* that what you are talking about is indeed a user.

The best approach for not playing with strings semantics is the id command:

NAME
id – print real and effective user and group IDs

Regards

Reply

16 SMougenot August 1, 2012 at 10:29 am

As davidhi mentioned
Using getent is a much better solution in my opinion

# search for user named ‘vivek’
getent passwd vivek

#search for group named ‘vivek’
getent group vivek

Reply

17 shri May 24, 2014 at 1:17 pm

Thank you :-)

Reply

18 yash March 4, 2015 at 4:40 pm

Hi,

Thanks…

Resolved my issue..!!!

Reply

Leave a Comment

Tagged as: , , , ,

Previous Faq:

Next Faq: