There are two well-known commands to manage users in Linux: useradd & adduser.
Let’s take a look at both these commands and how they create users in Linux.
First, let’s have a look at the default behavior of the useradd command. Have you ever run the following command?
I am yet to see a distribution where this command has created a complete user account. Even after setting a password for the new user, you would need to use additional options with it.
For example, on my system, the above command added the following entry in the /etc/
If you read the article on listing users on Linux, you probably already are fam
First, the second field contains ‘x’. This means that the placeholder for password information is in /etc/shadow. But I have not set a password. This means test user will not be able to log in.
Second, the home directory. The thing is that /home/test does not exist. Even after you set a password, an error will occur if the user logs in. Depending on other configuration, your Linux system may prevent a user without a valid home directory to login. Most probably, user test would be allowed to log in on your system, at least in text mode. But user test will not be allowed to create his home directory.
Third, the default shell is sh, not bash. I don’t use sh as a shell. You probably don’t either because bash is the default shell on most Linux distributions.
Adduser is not available. on some Linux distributions. On others, it is a soft link to useradd. While on some others, it is a Perl script.
Adduser is an interactive high-level utility. It uses the low level utility useradd as a backend. Settings in /etc/login.defs will be used when using adduser. On Debian based distros, even the man page recommends its use over the useradd command.
Calling adduser with just a username will walk you through a series of questions.
After answering a few questions, a complete user account will be created. The new user is ready to log in through your login manager or in the text mode.
To accomplish almost the same result using the low-level utility useradd, the command would look similar to this:
sudo useradd -d /home/test -m -s/bin/bash \ -c FullName,Phone,OtherInfo test && passwd test
The -c options can be removed without problems, the comma separated list that follows are comments added to /etc/passwd. But even then adduser saves you two additional commands.
Adduser has a list of options available to you. Here is a short list I think will be most useful to know. Refer to the help or man page for more details.
- –system: Add a system user. By default system users are placed in nogroup group. To add a system user to an existing group, provide –gid or –ingroup option.
- –home DIR: Use DIR as home directory instead of the default. Directory will be created if needed and skeleton files will be copied.
- –shell SHELL: Use SHELL instead of the default.
- –ingroup GROUP: Set user’s primary group to GROUP
- –add_extra_groups: Add new user to extra group defined in the configuration file.
- Default shell
- Home directory
- Extra groups
- Add extra groups
In my personal experience, adduser is a lot better at creating new users in Linux. I prefer adduser over useradd any given day and I recommend the same.
What about you? Which one do you prefer between adduser and useradd?