≡ Menu

UNIX / Linux Command To Check Existing Groups and Users

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 itGoogle+ itPDF itFound an error/typo on this page?

{ 19 comments… add one }

  • z0mbix June 27, 2008, 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

    • dkp April 6, 2015, 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”.

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

    If you are using NIS do the following:

    ypcat passwd | grep vivek

    Ramesh

  • Pedro June 27, 2008, 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.

  • davidhi June 27, 2008, 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).

  • himadri August 9, 2008, 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..

  • New in linux July 15, 2009, 9:08 am

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

    • Shahin December 15, 2011, 5:43 am

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

  • nixCraft July 15, 2009, 9:09 am

    Try:

    cut -d: -f1 /etc/passwd | less
  • Praba March 17, 2010, 4:00 am

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

  • Rob November 14, 2011, 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

    • sohaib December 29, 2011, 5:05 pm

      have you find any solution for that?

  • sachin November 15, 2011, 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

  • manh March 14, 2012, 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.

  • Sebastian March 26, 2012, 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

  • SMougenot August 1, 2012, 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

  • shri May 24, 2014, 1:17 pm

    Thank you :-)

  • yash March 4, 2015, 4:40 pm

    Hi,

    Thanks…

    Resolved my issue..!!!

  • Shahzad Aslam August 25, 2015, 12:13 pm

    To get the list of all users only shows their usernames
    getent passwd | awk -F: ‘{print $1}’
    To get exact number of user currently logged in
    w | grep “users” | awk -F’ ‘ ‘{print $4}’

    Hope it worked & solve ur issue
    Tested well in centOS 7

    Thanks ,
    SHAHZAD ASLAM

Leave a Comment