How to List Users in Linux
Knowing how to list or count users on a Linux system can be very useful for managing who has access to use your server or machine.
What commands can we use to find users and what information can we show about them? In this article, we will go through a number of different commands to list all users and find specific users by their name in Linux.
List All Users from /etc/passwd
All local users are stored in /etc/passwd
and can be opened using a command-line based text editor such as nano
.
nano /etc/passwd
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico
taskgated:*:13:13:Task Gate Daemon:/var/empty:/usr/bin/false
networkd:*:24:24:Network Services:/var/networkd:/usr/bin/false
installassistant:*:25:25:Install Assistant:/var/empty:/usr/bin/false
lp:*:26:26:Printing Services:/var/spool/cups:/usr/bin/false
postfix:*:27:27:Postfix Mail Server:/var/spool/postfix:/usr/bin/false
john:*:1000:1000:John H:/home/john:/bin/bash
james:*:5001:5001:James H:/home/james:/bin/bash
The above output looks messy but once you know what each component of a line represents it is easy enough to break down.
From left to right they are:
- User name
- Encrypted representation of the password
- User ID (UID)
- Group ID (GID)
- Full user name
- User root directory
- Shell default
Pro tip - typically a user with an ID of 1000 and above will be a “real” user and ones below will be “system” users, though there is no physical difference between them.
List Users with Getent
Using the getent
command we can get user information from passwd
and from the GNU Name Service Switch, which is obtained VIA the /etc/nsswitch.conf
configuration file.
getent /etc/paswd
To exit the above output press :
(colon) followed by W
.
List Users with Compgen
If we just need a list of all users with no other information the compgen
command will work perfectly.
compgen -u
root
daemon
bin
sys
...
pollinate
john
-agent
colord
To make the above output easier to look though we can pipe in the sort
command to order users alphabetically.
compgen -u | sort
_apt
backup
bin
colours
...
uucp
uuidd
vmail
www-data
Check a User Exists in Linux
If we need to check if a user name exists we can pipe in the grep command to search lines in the user database. If no matches are found nothing will be returned.
getent passwd | grep john
john:x:1000:1000:John,1,,:/home/john:/bin/bash
Note - the above grep command is case sensitive; please follow the above link to the grep
command if you would like to learn about how to change the behaviour of grep.
Check Logged in Users in Linux
To check users that are logged into your system use the who command.
who
john pts/0 2020-07-07 22:18 (82.124.175.9)
Here are the columns of the who command from left to right.
- User name.
- How the user connected;
pts/0
for terminal and:0
for GUI (Graphical User Interface). - Time of log in
- User log in IP address
Conclusion
You now know a number of ways to find out what users have access to your Linux system and what users are logged in. There are other ways to filter down what users by their attributes, though that is more related to the usage of the grep command.