List all human users
Human users have UIDs starting at 1000, so you can use that fact to filter out the non-humans:
cut -d: -f1,3 /etc/passwd | egrep ':[0-9]{4}$' | cut -d: -f1
This cuts the first (username) and third (UID) colon-delimited fields from /etc/passwd
, then filters for the resulting lines which end with a colon and four digits, then cuts the first (username) field from that, leaving you with a list of users with UIDs between 1000 and 9999.
If you have more than nine thousand users on your system, this will fail - but it's necessary to restrict the result to 4-digit UIDs in order not to catch nobody
(UID 65534).
This does pretty much what the accepted answer does, just in one command instead of three:
awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd
And thanks to Karel in the comments, the nobody
user is also filtered out.
I personally like to use just:
ls /home
Admittedly this is not a list of users but instead a list of their home directories. Currently existing human users on the system will have home directories in /home
, but you may see the home directories of past users who were removed, as well.
This works for my purposes and may work for yours as well. For example, if you are looking to delete a user account that turns out no longer to exist (nonexistent-user
) and run the command
sudo deluser nonexistent-user
it will just tell you that that this user does not exist.