核心命令:useradd vs adduser
useradd - 命令行工具(推荐)
useradd 是一个底层的、功能强大的命令行工具,在所有 Linux 发行版上都能找到,它不会进行交互式提示,所有参数都需要在命令中明确指定。

基本语法:
sudo useradd [选项] 用户名
常用选项:
| 选项 | 全称 | 描述 |
|---|---|---|
-m |
--create-home |
非常重要! 创建用户的主目录,通常是 /home/用户名,如果不加此选项,系统可能不会创建主目录。 |
-s |
--shell |
指定用户的默认登录 Shell。/bin/bash 或 /bin/zsh,默认通常是 /bin/sh。 |
-d |
--home |
指定用户的主目录路径,默认为 /home/用户名,使用 -d 时,通常也建议加上 -m。 |
-G |
--groups |
将用户添加到一个或多个附加组(Secondary Groups),组名之间用逗号分隔。 |
-c |
--comment |
添加用户的注释信息,通常是用户的真实姓名。 |
-p |
--password |
直接设置用户的密码。注意: 这不安全,因为密码会以明文形式出现在命令历史和进程列表中,推荐使用 passwd 命令来设置密码。 |
-r |
--system |
创建一个系统用户,系统用户通常没有主目录,UID/GID 较低,并且不用于登录。 |
示例:
-
创建一个普通用户
testuser,并创建其主目录:
(图片来源网络,侵删)sudo useradd -m testuser
-
创建一个用户
devuser,指定 Shell 为/bin/bash,并添加注释:sudo useradd -m -s /bin/bash -c "Developer User" devuser
-
创建一个用户
opsuser,并将其加入到sudo和docker组:sudo useradd -m -G sudo,docker opsuser
-
创建一个系统用户
nobody(通常已存在):sudo useradd -r -s /sbin/nologin nobody
adduser - 交互式脚本(Debian/Ubuntu 等系统)
adduser 是一个更友好的、交互式的脚本,主要用于 Debian、Ubuntu 及其衍生版(如 Mint),在 CentOS/RHEL 等发行版中,adduser 通常只是 useradd 的一个软链接。

当你在 Debian/Ubuntu 系统上运行 adduser 时,它会:
- 提示你输入用户密码。
- 提示你输入用户信息(全名、房间号、电话等),可以留空直接按回车。
- 询问是否确认创建信息。
基本语法:
sudo adduser 用户名
示例:
创建一个名为 newuser 的用户:
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
优点:
- 简单易用,适合初学者。
- 自动处理主目录创建和密码设置。
缺点:
- 不是所有 Linux 发行版都默认安装或行为一致。
- 功能不如
useradd灵活。
完整的用户管理流程
创建用户后,通常还需要执行以下步骤:
设置或修改用户密码
新创建的用户默认无法登录,因为没有设置密码,必须使用 passwd 命令来设置。
# 设置或修改 testuser 的密码 sudo passwd testuser
系统会提示你输入并确认新密码。
将用户添加到 sudo 组(如果需要该用户有管理员权限)
在 Ubuntu/Debian 系统中,将用户加入 sudo 组即可获得 sudo 权限。
# 将 testuser 添加到 sudo 组 sudo usermod -aG sudo testuser
usermod: 用于修改用户账户的属性。-aG:-a表示append(追加),-G表示指定组。-a选项非常重要,否则用户会被从其他组中移除,只保留在sudo组。
在 CentOS/RHEL 系统中,组名通常是 wheel:
sudo usermod -aG wheel testuser
切换用户身份验证
创建并设置好权限后,你可以切换到新用户账户进行测试。
# 切换到 testuser 用户 su - testuser
su(substitute user) 用于切换用户。- (短横线) 选项会模拟一个完整的登录 shell,加载用户的环境变量(如
.bashrc),推荐使用。
其他相关重要命令
| 命令 | 全称 | 描述 |
|---|---|---|
usermod |
modify user | 修改已存在用户的属性,如用户名、主目录、所属组等。 |
userdel |
delete user | 删除用户账户。 |
passwd |
password | 修改用户密码,或锁定/解锁账户。 |
id |
identity | 显示用户的 UID、GID 及所属的组。 |
groups |
groups | 显示用户所属的所有组。 |
su |
substitute user | 切换用户身份。 |
sudo |
superuser do | 以其他用户(通常是 root)的身份执行命令。 |
总结与最佳实践
| 特性 | useradd |
adduser |
|---|---|---|
| 类型 | 底层命令 | 交互式脚本 (Debian/Ubuntu) |
| 交互性 | 无,所有参数在命令行指定 | 有,会提示输入密码和用户信息 |
| 主目录 | 需要手动使用 -m 选项 |
自动创建主目录 |
| 适用性 | 所有 Linux 发行版 | 主要 Debian/Ubuntu 及其衍生版 |
| 灵活性 | 高,可精确控制所有选项 | 低,按预设流程执行 |
最佳实践建议:
- 首选
useradd:为了脚本的可移植性和精确控制,useradd是更可靠的选择。 - 使用
-m选项:创建普通用户时,务必加上-m来创建主目录。 - 单独设置密码:不要在
useradd中使用-p选项,而是用passwd命令。 - 赋予
sudo权限:如果新用户需要管理员权限,使用usermod -aG sudo username将其加入sudo组。 - 使用
adduser进行快速创建:如果你在 Debian/Ubuntu 系统上,只是想快速创建一个可以登录的用户,adduser是一个非常方便的选择。
