useradd 命令和 adduser 命令都可以用来添加用户,那二者的区别是什么?

系统 Linux
在 Linux 中创建新用户时,我们可以选择使用 adduser 或 useradd 命令。那么,useradd 和 adduser 的区别是什么呢?实际使用的时候应该用哪一个比较好呢?下面我们来详细看一下。

adduser 和useradd 命令的区别

useradd 命令是内置的 Linux 命令,在任何 Linux 系统中都可用。然而,使用这种低级别的工具创建用户是比较繁琐的,因为默认情况下,它不会创建主目录和用户密码。

adduser 不是标准的 Linux 命令,它本质上是一个 perl 脚本,在后台调用 useradd 命令。这个高级实用程序在 Linux 中创建用户的时候效率更高,它提供了创建主目录、设置密码以及其他一些参数的选项。

下面我们来详细看一下。

useradd 命令

我们在《使用 useradd 命令在 Linux 中添加新用户》中介绍过useradd的用法,大家感兴趣的可以看一下。现在我们再来看下其 useradd 的默认用法,你使用过如下命令吗?

useradd new_user

这个命令默认不是创建一个完整的用户,即使为其设置了密码,但还需要使用其他选项。它会在 /etc/passwd 文件中添加以下内容:

我们在《Linux 中查看所有用户的三种方法》提到过 /etc/passwd 文件(如果不清楚的话大家可以再看一下)。这样看起来,用户似乎是创建成功了,但实际用的话,会发现某些地方不对劲。

首先,在 /etc/passwd 文件中,该新建用户的第二个字段中包含 "x",这意味着在 /etc/shadow 中,密码是一个占位符,由于还没有设置密码,所以这个用户将无法登录。

第二个问题,该用户没有主目录,即 /home/test 不存在。即使设置了密码,如果用户登录的话,也会发生错误。因为 Linux 可能会阻止没有主目录的用户登录。最有可能的情况是,用户即使可以登录系统,也只是在文本模式下,但是不允许其创建他的主目录。

第三个问题,其登录的默认 shell 是 sh,而不是bash,bash 是大多数 Linux 发行版上的默认 shell。

以上问题,可以在 /etc/login.defs 中修改。

adduser 命令

adduser 命令在某些 Linux 发行版上不可用,在某些 Linux 中,它是 useradd 的一个软连接,在另外一些 Linux 系统中,它是一个 perl 脚本。

adduser 命令是一个交互式高级实用程序,它以 useradd 为后台,且自动配置 /etc/login.defs。在基于 Debian 的系统中,man 手册中都会建议使用它而不是 useradd 命令。 使用 adduser 命令创建用户,它会引导你输入一系列的参数,如下图:

输入参数,回车,之后系统会创建一个完整的用户账户,包含主目录。如此,新用户就可以正常登录了。 要使用 useradd 实现相同的功能,其命令类似于:

sudo useradd -d /home/test -m -s/bin/bash \ -c FullName,Phone,OtherInfo test && passwd test

上述命令中的 -c 选项可以删掉,其后面用逗号分割的内容是要添加到 /etc/passwd 中的内容。即便如此,useradd 命令还是比 adduser 额外多了两个选项需要输入。 adduser 命令有一个可用的选项列表,如下是我们列出的一些最常用的(有关更多的信息,大家可参考帮助信息或者 man 手册)。

  • system:添加系统用户。默认情况下,系统用户位于 nogroup 组中。要将系统用户添加到一个现有组中,需要使用  –gid 或 –ingroup 选项;
  • home DIR:使用 DIR 作为主目录而不是默认的目录。如果需要,可以创建目录,并复制系统框架文件;
  • shell SHELL:使用 SHELL 来代替默认的;
  • ingroup GROUP:将用户的所属组设置为 GROUP;
  • add_extra_groups:将新用户添加到配置文件中定义的额外组。

adduser 的配置文件可以允许我们设置一些创建用户时所要使用的默认值,比如:

  • 默认 shell
  • 主目录
  • 所属组
  • 添加额外组

以上就是本次分享全部内容,欢迎讨论。

责任编辑:庞桂玉 来源: TIAP
相关推荐

2011-04-20 09:07:44

Ubuntuuseraddadduser

2022-09-03 08:03:14

UbuntuDebian

2011-06-17 14:36:50

Linux

2022-11-03 11:19:22

2022-11-15 10:03:34

2023-10-23 11:07:37

HTTPRPC

2023-02-07 07:32:12

Istio微服务治理

2009-11-12 09:51:11

Visual C++项

2014-09-24 13:04:13

微信企业号

2023-02-09 23:03:22

前端后端json

2016-03-21 10:40:53

RDDSpark SQL数据集

2022-02-09 10:56:09

ReactJS组件前端

2015-02-26 10:29:41

Google百度

2022-03-07 10:27:03

Linux开源社区

2018-05-21 21:26:59

Apache HiveHbaseSQL

2021-10-27 08:54:11

Pythonencodeencoding

2021-12-19 07:22:16

Create前端工具

2017-11-21 22:49:10

2013-07-04 09:46:06

X Phone

2020-09-18 15:10:51

Web前端技术
点赞
收藏

51CTO技术栈公众号