在Linux操作系统中,增加用户是一项基础且常用的管理任务,通常通过命令行工具完成,不同Linux发行版可能使用不同的用户管理工具,但核心命令和逻辑基本一致,以最常用的Ubuntu/Debian系统为例,adduser和useradd是两个主要的命令,它们在功能和使用场景上存在差异。

adduser是一个交互式的命令行工具,它会提示用户输入新用户的密码、全名、房间号等信息,并自动创建家目录和初始化配置文件,执行sudo adduser newuser后,系统会依次提示设置密码、确认密码,以及填写可选的用户信息(如姓名、电话等),整个过程较为友好,适合初学者或需要快速创建用户的情况。adduser实际上是一个Perl脚本,在多数系统中会调用useradd,但封装了更友好的交互逻辑。
相比之下,useradd是一个底层的二进制命令,功能更强大但参数复杂,适合脚本化批量操作。sudo useradd -m -s /bin/bash newuser命令中,-m表示自动创建家目录(若不指定,某些系统可能不会创建),-s /bin/bash指定用户的默认shell为bash。useradd的参数非常丰富,如-c添加用户备注,-d指定家目录路径,-e设置账户过期日期,-g指定主用户组,-G添加附加用户组等,创建一个名为devuser的用户,主组为developers,附加组为sudo和docker,可使用命令:sudo useradd -m -d /home/devuser -s /bin/bash -g developers -G sudo,devuser devuser。
在CentOS/RHEL等基于Red Hat的系统中,默认可能使用useradd,但同样提供了adduser作为useradd的符号链接,这些系统还提供了usermod(修改用户属性)和userdel(删除用户)命令,与useradd形成完整的用户管理工具集,删除用户及其家目录可使用sudo userdel -r newuser,其中-r会同时删除用户的主目录和邮件文件。
为了更直观地理解常用参数,以下列出useradd的主要参数及其说明:

| 参数 | 说明 | 示例 |
|---|---|---|
-m |
自动创建家目录 | sudo useradd -m newuser |
-s |
指定登录shell | sudo useradd -s /bin/zsh newuser |
-d |
指定家目录路径 | sudo useradd -d /opt/custom newuser |
-g |
指定主用户组 | sudo useradd -g developers newuser |
-G |
指定附加用户组 | sudo useradd -G sudo,docker newuser |
-c |
添加用户备注 | sudo useradd -c "Test User" newuser |
-e |
设置账户过期日期 | sudo useradd -e 2023-12-31 newuser |
-r |
创建系统用户(无家目录和登录权限) | sudo useradd -r systemuser |
创建用户后,通常需要为新用户设置初始密码,可通过sudo passwd newuser命令完成,系统会提示输入并确认密码,如果需要批量创建用户,可以结合echo和chpasswd命令实现,echo "newuser:password" | sudo chpasswd,这种方式在自动化脚本中非常实用。
需要注意的是,Linux用户信息存储在/etc/passwd文件中,密码存储在/etc/shadow文件中(加密格式),用户组信息存储在/etc/group文件中,直接编辑这些文件虽然可行,但容易出错,推荐使用useradd、usermod等工具进行管理。
相关问答FAQs:
-
问:
adduser和useradd有什么区别?哪个更适合日常使用?
答:adduser是交互式脚本,操作简单,适合手动创建单个用户,会自动提示输入密码和用户信息;useradd是底层命令,参数灵活,适合脚本化批量操作,但需要手动指定参数(如-m创建家目录),日常手动创建用户推荐使用adduser,自动化场景则优先选择useradd。
(图片来源网络,侵删) -
问:如何查看Linux系统中的所有用户列表?
答:可通过以下几种方式查看用户列表:- 执行
cat /etc/passwd | cut -d: -f1,直接显示所有用户名; - 使用
getent passwd | cut -d: -f1,包含系统配置(如LDAP)中的用户; - 执行
compgen -u,列出当前系统所有用户名。/etc/passwd文件中每行代表一个用户,第7字段为用户登录shell,若为/sbin/nologin则表示该用户无法登录系统。
- 执行
