adduser 是一个在 Linux 系统上用于创建新用户的命令行工具,它通常是一个用 Perl 编写的脚本,旨在提供一个比更底层的 useradd 命令更友好、更交互式的用户体验。

adduser vs useradd
这是理解 adduser 的第一步,也是最重要的一步。
| 特性 | adduser |
useradd |
|---|---|---|
| 本质 | 一个交互式的、用户友好的脚本 | 一个低级别的、命令行驱动的工具 |
| 位置 | 通常在 /usr/sbin/adduser |
通常在 /usr/sbin/useradd (或 /bin/useradd) |
| 交互性 | 默认是交互式的,会提示你输入用户名、密码、全名等信息。 | 默认是非交互式的,所有参数都必须在命令行中指定。 |
| 默认行为 | 会创建用户的主目录,并从 /etc/skel/ 目录复制文件(如 .bashrc, .profile)。 |
默认不创建主目录,也不会复制任何文件,需要手动指定参数。 |
| 适用场景 | 适合手动、交互式地创建少量用户,尤其是在桌面系统或管理服务器时。 | 适合脚本化、自动化地创建大量用户,因为它可以精确控制所有选项。 |
| 可配置性 | 行为由其脚本逻辑控制,可配置性较低。 | 高度可配置,通过命令行参数和 /etc/login.defs 文件可以控制几乎所有方面。 |
简单总结:
- 想快速、方便地创建一个新用户,用
adduser。 - 想在脚本里自动化创建用户,或者需要非常精细的控制,用
useradd。
adduser 的基本用法
adduser 的基本语法非常简单:
sudo adduser [选项] 用户名
必须使用 sudo 或 root 权限来运行此命令,因为创建用户涉及到修改系统核心文件。

最简单的用法:交互式创建
这是 adduser 最受欢迎的方式,你只需要提供用户名,然后按照提示操作即可。
sudo adduser newuser
执行后,你会看到类似下面的交互提示:
Adding user `newuser' ...
Adding new group `newuser' (1001) ...
Adding new user `newuser' (1001) with group `newuser' ...
Creating home directory `/home/newuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for newuser
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
- New password: 输入新用户的密码。
- Retype new password: 再次输入密码以确认。
- Full Name, Room Number, ...: 这些是可选信息,可以直接按
Enter键跳过。 - Is the information correct?: 确认信息无误后,输入
Y或直接按Enter键完成创建。
完成后,系统会自动完成以下工作:
- 创建一个名为
newuser的新用户组。 - 创建一个名为
newuser的新用户,并将其加入到newuser组中。 - 在
/home/目录下创建/home/newuser主目录。 - 从
/etc/skel/目录复制所有文件(如.bashrc,.profile等)到新用户的主目录中。 - 设置用户密码。
adduser 的常用选项
虽然 adduser 以交互式著称,但它也支持一些命令行选项来简化操作。

-
--home-dir <目录>或-d <目录>: 指定用户的主目录,而不是默认的/home/用户名。sudo adduser --home-dir /opt/data tom
-
--no-create-home: 明确指示不要创建用户的主目录。sudo adduser --no-create-home jane
-
--shell <shell>: 指定用户的登录 shell,而不是默认的/bin/bash。sudo adduser --shell /bin/zsh alice
-
--ingroup <组名>或-g <组名>: 将用户添加到一个已存在的组中,而不是创建一个同名的私有组。sudo adduser --ingroup developers bob
-
--gecos <描述>: 在命令行中直接设置用户的 GECOS 信息(全名、办公室等),避免交互式输入。sudo adduser --gecos "Charlie User,Room 101,555-1234,charlie@example.com" charlie
-
--disabled-password: 创建一个用户,但不设置密码(即密码为空),用户可能需要通过sudo或 SSH 密钥等方式登录。sudo adduser --disabled-password service_user
-
--shell /sbin/nologin: 创建一个用户,但禁止其登录,这对于运行服务或程序的非交互式账户非常有用。sudo adduser --shell /sbin/nologin www-data
创建用户后的常见操作
创建用户只是第一步,通常还需要进行一些后续配置。
将用户添加到 sudo 组
为了让新用户能够执行 sudo 命令(即以 root 权限运行命令),需要将其添加到 sudo 组。
# 将用户 newuser 添加到 sudo 组 sudo usermod -aG sudo newuser
usermod: 修改用户账户的命令。-aG:-a表示append(追加),-G表示指定附加组。这两个参数必须连用,否则会覆盖用户原有的附加组。
验证用户
-
检查用户是否创建成功:
cat /etc/passwd | grep newuser
输出应该包含
newuser的信息。 -
检查用户组是否创建成功:
cat /etc/group | grep newuser
-
检查主目录是否存在:
ls -ld /home/newuser
-
切换到新用户测试登录:
# 切换到新用户 su - newuser # 你会看到新用户的命令行提示符 # 退出当前用户 exit
| 命令 | 优点 | 缺点 | 最佳使用场景 |
|---|---|---|---|
adduser |
简单、交互式、自动化创建主目录 | 不适合脚本化,控制选项较少 | 手动创建单个或少量用户,尤其是桌面环境或管理服务器时。 |
useradd |
强大、灵活、适合脚本化 | 默认行为复杂(不创建家目录),参数多,不直观 | 自动化批量创建用户,或需要精确控制用户属性的脚本中。 |
对于大多数 Linux 新手和日常管理员来说,adduser 是创建用户最简单、最直接、最不容易出错的选择,当你需要更高级的自动化或控制时,再转向 useradd。
