adduser和useradd之间有什么区别?

在Ubuntu上,adduseruseradd命令有什么区别?

20同一个问题在Super User(http://superuser.com/q/547966/)和Server Fault(http://serverfault.com/q/218993/)上都有提到。 - ændrük
8还有在Unix stackexchange上也有一个非常详细的回答。 - xealits
3而且它是一个很好、有效的问题,并且仍然如此。问题不在于人们在各自的背景中提出这个问题,而是这个问题本身需要被提出。 - foo
10个回答

useradd是与系统一起编译的本地二进制文件。但是,adduser是一个使用useradd二进制文件作为后端的Perl脚本。

adduser比其后端useradd更加用户友好和交互式。在提供的功能上没有区别。

此外,adduseruseradd的包装器。

来源:“adduser”和“useradd”之间有什么区别?


81使用-m选项的useradd命令将创建用户的主目录。 - richsinn
13实现并不那么有趣,语义才是关键。比如adduser(8)更加用户友好,它默认创建并设置一个用户,符合你的期望。而useradd(8)只会按照你的要求执行,所以如果你想创建一个家目录,你必须告诉它为你创建。 - Anders
3-1:没有说明命令之间的根本区别:它们担任不同的“角色”,其中一个是低级工具。其中一个是Perl脚本,另一个是二进制文件这个事实并不重要。此外,它们在功能上确实存在差异。 - MestreLion
40每次我都得去谷歌一下……我该如何帮助自己记住哪个是哪个呢? - Quentin Skousen
16对我来说,“adduser”听起来最直观,因为它是一个听起来像英语的命令,而另一个则不是从语义上来说。如果你把它记作两者中“最直观”的一个,你也可以试着将其记作首选/更容易的一个。 - pzkpfw
1显然有一些区别。我一直在确保各种不需要“系统”特权的服务都具有“用户”特权的用户名。比如MySQL或维基百科,这些服务并不需要特权来运行。但是,我尝试使用adduser命令,并且为我的“服务”账户创建了很多面向用户的额外设置。所以我把它们删除了,现在我只使用useradd命令——根据上述内容:“只做你要求的事情”(但指定了一个不存在的主目录...)。 - will
7在红帽系统下,/usr/sbin/adduser这个命令其实是相当于useradd命令的一个别名。唉... - Levon
完全同意。我想做什么?“添加用户”。去掉“一个”就是adduser - Stephen Shank
虽然我同意名称adduser听起来更好,但是如果你将useradd放在更广泛的背景中与其他相关工具一起看,你会发现它们都以一种相当明确地组织共享目的的方式命名:useradduserdelusermodgroupaddgroupdelgroupmod - BadHorsie

在命令行中创建新用户时,adduser 是必用的(删除用户时请使用 deluser)。如果您正在编写脚本,尤其是希望实现可移植性的脚本,您可能需要使用低级工具代替 - 在某些发行版中可能没有 adduser / deluser,例如 SuSE。

useradduserdelusermod 命令是由于历史原因而存在的低级工具,而 adduser/deluser 则会做正确的事情™。我记住要使用哪个命令是通过想到在字母表中 adduser/deluser 之后有 user*,所以它“更糟糕”。

根据各自的手册页(在 Ubuntu 12.04 Precise Pangolin 上,即 Debian 派生系统)。

adduser 的手册页说:

(已加重显示.)

adduseraddgroup根据命令行选项和/etc/adduser.conf中的配置信息将用户和组添加到系统中。它们是对低级工具(如useraddgroupaddusermod程序)的友好前端,默认选择符合Debian策略的UID和GID值,创建一个带有基本配置的主目录,运行自定义脚本以及其他功能。adduseraddgroup可以以五种模式之一运行:

useradd的手册页上说:

useradd是一个用于添加用户的低级实用程序。在Debian上,管理员通常应该使用adduser(8)

另请参阅:“adduser”和“useradd”之间有什么区别?(在SuperUser上)


10我总是记不住哪个是哪个,所以这是我的愚蠢的助记法,如果有人需要的话 :) "user" 和 "loser" 押韵,而 "loser" 在最后。因此:adduser(添加用户),deluser(删除用户)。 - Mads Skjern
43我实际上不同意关于“*总是使用adduser*”:对于自动化脚本,我更喜欢使用useradd,因为它**始终存在、非交互式,并且不特定于发行版**。 - Wernight
2我在openSUSE上尝试使用adduser,但找不到它。(13.2) - cst1992
3@cst1992 你说得对,我已经编辑了答案以反映这一点。有趣的是,当我在工作中尝试在SuSE 11系统上使用“locate adduser”时,我发现有一个“adduser”手册页,但没有二进制文件(也没有“deluser”手册页或命令)。 - zrajm
1如果你是一个真正的系统管理员,那么使用useradd会更好。在自动脚本中无法使用adduser真是令人沮丧。 - answerSeeker
5在Red Hat上,/usr/sbin/adduser -> useradd - Levon
我记不住,所以我使用 file $(which adduser) 或者 file $(which useradd) 来查看它是一个脚本还是一个二进制文件。 - phuclv

adduser: 添加具有完整个人资料和信息(密码、配额、权限等)的用户。

useradd: 仅使用用户名添加用户(如果您想添加一个只有名称的临时用户,其他信息不需要)。


5+1 和欢迎!我给那个无法解释他们之前的负评的人点了赞。继续努力!优秀的程序员总是能够脱颖而出 - (并且不会没有解释地进行负评)。 :) - Ricalsin

另外还有一些差异,导致了特定的情况下可能更适合使用useradd命令。
在一些更新的发行版中,包括Ubuntu 14.4,在使用adduser命令时会提示输入密码和"gecos"(用于finger命令的数据)。这意味着它可能不太适合从脚本中调用(感谢Wernight在评论中提到过)。
可以通过传递空参数来取消提示:
adduser --disabled-password --gecos "" USER useradd允许您通过-G选项传递多个附加组以将用户添加到其中。而adduser似乎要求您为每个要添加的组调用一次该命令。

在Ubuntu 16.04上无法运行。 - answerSeeker

adduser更友好,因为它设置了帐户的主文件夹和其他设置(例如,在登录时自动加载系统统计信息和通知),而useradd只是创建用户。


4错误。useradd 可以使用 -m 创建家目录,使用 -p 设置密码,使用 -k 创建模板文件,并使用 -G 将用户添加到组中。 - ychaouche
3@ychaouche "将会创建[...]"和"可以创建[...]"之间有着不同的含义。 - thoerni
使用默认选项的命令和使用所需选项的命令没有什么区别。 - ychaouche

基本区别是"adduser"将创建主目录并向该目录添加骨架文件,而"useradd"不会创建任何主目录和骨架文件!

尝试adduser:

Adding user `try' ...
Adding new group `try' (1001) ...
Adding new user `try' (1001) with group `try' ...
Creating home directory `/home/try' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for try
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

useradd try1 :

# ll /home/
total 20
drwxr-xr-x  5 root    root    4096 Oct 26 15:52 ./
drwxr-xr-x 22 root    root    4096 Oct 26 15:47 ../
drwx------  8 ashishk ashishk 4096 Oct 26 15:50 ashishk/
drwxr-xr-x  3 root    root    4096 Oct 14 13:02 .ecryptfs/
drwxr-xr-x  2 try     try     4096 Oct 26 15:52 try/
root@chef-workstation:/home/ashishk#

1错误。请参见先前的评论 - ychaouche

使用adduseruseradd的最大区别是:
  • 使用adduser命令时,默认会创建用户的主文件夹。
  • 使用useradd命令时,用户没有主文件夹。
所以我建议您使用adduser而不是useradd

我还要指出的是,adduser 命令并不总是有-M选项,并且也不会遵循--system标志。关于这一点,明确说明

请注意,无论/etc/login.defs中的默认设置(CREATE_HOME)如何,useradd命令都不会为此类用户创建主目录。如果你希望为系统账户创建主目录,则必须使用-m选项。

如果你想创建一个没有主目录的系统用户,请使用useradd --system -M命令。


具体来说,使用useradd命令时应更加明确,因为它不会创建用户的主目录,你应该使用-m选项或-p选项来设置密码。另一个主要区别是useradd和adduser有不同的设置,例如为用户设置不同的shell。在大多数发行版中,useradd将usr/bin/sh设置为默认shell,而adduser将usr/bin/bash设置为默认shell。

使用adduser命令可以以交互方式创建帐户和密码,只需一个命令即可完成。这个命令只能在Debian系列的发行版中找到。
无论是adduser还是useradd,它们都具有相同的功能,只是在一些方面略有不同,更偏向于使用adduser。
使用adduser创建用户时,它会自动加密用户的主目录(权限为755)。

根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助其他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - Community