What's the difference between "adduser" and "useradd"?

66

21

I wonder: Why are there these two commands on Debian Linux, with very similar names and functionality? This has always been confusing for me.

  • Is any of them superior to another?
  • Why aren't they merged into one?
  • Is there any significant difference between them?
  • Which one should I use? Or does it depend on a use case?

Petr Pudlák

Posted 2013-02-07T15:23:57.917

Reputation: 2 197

2Note that useradd is available on all Unix-like platform; adduser is only for Debian and its derivatives. – Franklin Yu – 2019-04-03T19:21:30.073

Answers

72

useradd is native binary compiled with the system. But, adduser is a perl script which uses useradd binary in back-end.

adduser is more user friendly and interactive than its back-end useradd. There's no difference in features provided.

Apple II

Posted 2013-02-07T15:23:57.917

Reputation: 3 669

1adduser isn't available on all distros (eg. suse-based), and on some others it's just a symlink to useradd (redhat-based). – ychaouche – 2018-02-21T12:30:44.943

13

The main advantage to adduser over useradd is dealing with system level users. With adduser the system level users account when created puts a user directory in home for the system user where useradd does not automatically. If you read the man they are essentially the same except for system level users and associated home directories are automatic. adduser creates a /home/user directory automatically for system level users where there is not a provision in useradd, except if specified by -m option. The other readings I have come across generically state that UID and GUID are assigned by accepted conformal Debian standards in adduser.

user517969

Posted 2013-02-07T15:23:57.917

Reputation: 131

1adduser has a --no-create-home option. – ychaouche – 2018-02-21T12:31:33.680

2

In a couple of Redhat instances I checked (4.9 from 2011 and 6.9 from 2017), adduser is simply an alias to useradd, not a Perl script. Here it is in Redhat 6.9:

$ ls -la /usr/sbin/useradd /usr/sbin/adduser
lrwxrwxrwx. 1 root root      7 Nov  2  2016 /usr/sbin/adduser -> useradd
-rwxr-x---. 1 root root 111320 Feb  9  2016 /usr/sbin/useradd

The way I remember that useradd is the 'correct' program is this: adding a user is just one operation in the CRUD spectrum. You also need 'modify' and 'delete' operations ('read' is presumably covered by viewing /etc/passwd). And so, the programs are named user* (useradd, usermod and userdel respectively). I suppose the alternative *user naming convention (adduser, moduser and deluser -- these don't exist) could also work. But it would be slightly more awkward (for a reason I cannot express clearly at the moment :)

Happyblue

Posted 2013-02-07T15:23:57.917

Reputation: 21

can't find moduser on Debian, but deluser is definitely there. – ychaouche – 2018-02-21T12:34:05.723

0

Within raspian (I would need to check for other OSs), 'adduser USER' starts a dialog (TUI) while 'useradd USER' does NOT.

Apparently, using adduser, once the dialog comes up, the full 'useradd' command is already executed. Even if you CTRL-C your user is there.

As in the new systems they create "personal" groups, to remove the newly created user you would need to:

  • vi /etc/passwd
  • vi /etc/group
  • rm -rf /home/USER

I assume that because adduser "uses" useradd, the rest is metadata about the user. So technically no changes in "skel", "file masks", or the like, i.e. your system defaults.

On the other side, because useradd does not bring up any TUI, it might be more useful in scripting.

To be honest I tested it only in rasbian, because that was the reason I stepped on the question.

I can imagine that other OSs might implement a different version of adduser.

mariotti

Posted 2013-02-07T15:23:57.917

Reputation: 1