61

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?
  • 1
    Note that useradd is available on all Unix-like platform; adduser is only for Debian and its derivatives. – Franklin Yu Apr 3 at 19:21
68

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.

  • 1
    adduser isn't available on all distros (eg. suse-based), and on some others it's just a symlink to useradd (redhat-based). – ychaouche Feb 21 '18 at 12:30
11

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.

  • 1
    adduser has a --no-create-home option. – ychaouche Feb 21 '18 at 12:31
1

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 :)

  • can't find moduser on Debian, but deluser is definitely there. – ychaouche Feb 21 '18 at 12:34
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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.