How to check if a new username is a system user?
By Daniel Johnston
I want to create a script that change a username. I want to check if the user is not a system user. My idea is to check /etc/passwd and pick only users with an ID between 1000 and 60000 and users that have a /home directory like
user:x:1005:1021::/home/user:/bin/shMy grep command for now is like
egrep -E '1[0-9]{3}.*/home' /etc/passwd As you can see, it doesn't match my [1000-60000] pattern nor the name
11 Answer
You can use awk to find local users with id >= 1000:
awk -F: '$3>=1000 && $3!=65534 {print $1}' /etc/passwdTo also check for a home folder below /home:
awk -F: '$3>=1000 && $3 != 65534 && $6 ~ /^\/home/ {print $1}' /etc/passwdReplace /etc/passwd with <(getent passwd) to list all users including network accounts ...
See also this related question, as well as this one.
3