菜鸟科技网

Linux adduser命令与useradd有何区别?

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

Linux adduser命令与useradd有何区别?-图1
(图片来源网络,侵删)

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 [选项] 用户名

必须使用 sudoroot 权限来运行此命令,因为创建用户涉及到修改系统核心文件。

Linux adduser命令与useradd有何区别?-图2
(图片来源网络,侵删)

最简单的用法:交互式创建

这是 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 键完成创建。

完成后,系统会自动完成以下工作:

  1. 创建一个名为 newuser 的新用户组。
  2. 创建一个名为 newuser 的新用户,并将其加入到 newuser 组中。
  3. /home/ 目录下创建 /home/newuser 主目录。
  4. /etc/skel/ 目录复制所有文件(如 .bashrc, .profile 等)到新用户的主目录中。
  5. 设置用户密码。

adduser 的常用选项

虽然 adduser 以交互式著称,但它也支持一些命令行选项来简化操作。

Linux adduser命令与useradd有何区别?-图3
(图片来源网络,侵删)
  • --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

分享:
扫描分享到社交APP
上一篇
下一篇