在 Linux 中 useradd 是个很基本的命令,但是使用起来却很不直观。以至于在 Ubuntu 中居然添加了一个 adduser 命令来简化添加用户的操作。本文主要描述笔者在学习使用 useradd 命令时的一些测试结果。

说明:本文中的所有试验都是在 Ubuntu14.04 上完成。

功能

在Linux中 useradd 命令用来创建或更新用户信息。

useradd 命令属于比较难用的命令 (low level utility for adding users),所以 Debian 系的发行版中建议管理员使用 adduser 命令。其实 adduser 命令只是一个调用了 useradd 命令的脚本文件。

本文将详细分析群组和家目录相关的选项。并且以实例的方式介绍常用的 useradd 命令写法。

语法和基本选项

注意:本文并不是一个完整的文档,所以仅列出部分常用的选项进行说明。

useradd [option] username

[option]:

-d<登入目录> 指定用户登入时的目录。

-g<群组> 初始群组。

-G<群组> 非初始群组。

-m 自动创建用户的家目录。

-M 不要创建用户的家目录。

-N 不要创建以用户名称为名的群组。

-s 指定用户登入后所使用的shell。

细说用户组

首先我们要搞清楚,什么是初始群组?简单来说在 /etc/passwd 文件中,每行的第四个字段指定的就是用户的初始群组。用户登录后立即就拥有了初始群组中的权限。

下面我们通过不同的命令来查看群组选项的用法:

$ sudo useradd tester1

没有使用任何群组相关的参数,默认在创建用户 tester1 的同时会创建一个同名的群组。用户 tester1 的初始群组就是这个新建的群组。

$ sudo useradd tester2 -N

这次我们使用了 -N 选项,即不要生成与用户同名的群组。查看下 /etc/passwd 文件,发现 tester2 用户的初始群组ID是100。这个100是哪来的?有ID为100的群组吗?其实100作为 -N 的默认值是写在配置文件中的。不管有没有ID为100的群组,都是这个值。当然我们也可以通过修改配置文件来改变这个默认值!

$ sudo useradd tester3 -g sudo

sudo 是一个非常有权势的群组,我决定把 tester3 加入到这个群组。好,现在去查看一下 /etc/passwd 和 /etc/group 文件,看看有没有新的群组被创建? tester3 的初始群组又是谁?这次没有创建与 tester3 同名的群组。用户 tester3 的初始群组变成了 sudo。

$ sudo useradd tester4 -G sudo

和上一条命令相比我们只是把小写的g替换成了大写的G。但结果可相差太多了,请您一定要好好的检查 /etc/passwd 和 /etc/group 文件。因为这次不仅创建了群组 tester4,它还是用户 tester4 的初始群组。和tester1 的唯一不同是 tester4 被加入了 sudo 群组。

在实际的使用中,tester3 和 tester4 的场景都是比较常见的,需要根据实际情况进行区分。

细说家目录

Useradd 命令对用户家目录的处理让人困惑,下面我们将通过实验来了解家目录相关的不同选项的使用方法:

$ sudo useradd tester1

让我们重新看看创建用户 tester1 这条命令。它不会为用户 tester1 创建名为 tester1 的目录作为家目录,但是我们打开 /etc/passwd 文件,发现 tester1 的记录中居然包含了家目录 /home/tester1。

tester1:x::::/home/tester1:

这让人不可思议,但这条命令确实是这么实现的。

$ sudo useradd -m tester5

若要在创建用户的同时创建用户的家目录,必须指定 -m 选项。

$ sudo useradd -d /home/abc tester6

我们希望自己指定家目录,此时不生成目录 abc

$ sudo useradd -d /home/abcd -m tester7

此时生成目录 abcd,并且目录下默认存在文件

常见用例

Case 1: 创建一个带有家目录并且可以登录 bash 的用户

$ sudo useradd -m -s /bin/bash tester1

Case 2: 指定创建用户家目录的路径

$ sudo useradd -m -d /home/xxx tester2

/home/xxx目录会被创建。

Case 3: 创建一个没有家目录且不能登录的用户

$ sudo useradd -s /sbin/nologin tester3

Case 4: 创建时把用户加入不同的用户组

$ sudo useradd -m -G xxx,sudo tester4

注意过个组名使用逗号分隔,不能有空格。

linux useradd 命令基本用法的更多相关文章

  1. linux 详解useradd 命令基本用法

    linux 详解useradd 命令基本用法 时间:2019-03-24 本文章向大家介绍linux 详解useradd 命令基本用法,主要包括linux 详解useradd 命令基本用法使用实例.应 ...

  2. Linux useradd 命令介绍

    Linux useradd 命令介绍 作者: Alan Formy-duval 译者: LCTT Brooke Lau | 2020-01-06 22:58 使用 useradd 命令来添加用户(并且 ...

  3. Linux tar命令高级用法——备份数据

    Linux tar命令高级用法——备份数据 2015-12-31 Linux学习 Linux上有功能强大的tar命令,tar最初是为了制作磁带备份(tape archive)而设计的,它的作用是把文件 ...

  4. [转帖]Linux date命令的用法(转)

    Linux date命令的用法(转) https://www.cnblogs.com/asxe/p/9317811.html 1.命令:date 2.命令功能:date 可以用来显示或设定系统的日期与 ...

  5. Linux find命令的用法实践

    一.find命令简介 Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大 ...

  6. Linux crontab命令 定时任务 用法详解以及no crontab for root解决办法

    最近系统服务器进行搬迁,又恰好需要使用定时任务运行程序,而我的程序主要使用PHP写的,然后总结了下定时任务的用法,但是在这里主要写的是关于crontab命令的用法,使用过程中遇到不少问题,例如no c ...

  7. Linux date命令的用法(转)

    1.命令:date 2.命令功能:date 可以用来显示或设定系统的日期与时间. 3.命令参数 -d<字符串>:显示字符串所指的日期与时间.字符串前后必须加上双引号: -s<字符串& ...

  8. Linux date命令的用法

    在linux shell编程中,经常用到日期的加减运算以前都是自己通过expr函数计算,很麻烦.其实date命令本身提供了日期的加减运算非常方便. 例如:得到昨天的时间date  --date=&qu ...

  9. 11.Linux date命令的用法

    date命令常的日常应用   修改时间 date -s “2008/05/23 19:20″ 打包文件 tar zcvf log-$(date +$F).gz /home/admin/logs 同步阿 ...

随机推荐

  1. linux 2.6 驱动笔记(三)

    驱动的并发与应用的并发实现一样,以信号量为例,修改基本字符驱动代码如下: 1. 增加sem定义 struct globalmem_dev{ struct cdev cdev; /*linux 2.6 ...

  2. 人人都是 DBA(VIII)SQL Server 页存储结构

    当在 SQL Server 数据库中创建一张表时,会在多张系统基础表中插入所创建表的信息,用于管理该表.通过目录视图 sys.tables, sys.columns, sys.indexes 可以查看 ...

  3. kali 在线教学群 第一次 公开课 小结(1)

    kali 在线教学群 第一次 公开课 小结(1) 文/玄魂 1.1 需要准备的基础环境 vmware 虚拟机,kali 2.0 镜像,科学上网工具包.这三项内容,可以在本人的微信订阅号“xuanhun ...

  4. 在GitHub注册账户的过程

    (1)第一步:首先起一个属于自己用户的名字(username),用户名字只能包含字母数字的字符或者单个连字符,不能只用单个连字符开始或者结束(only contain alphanumeric cha ...

  5. npm穿墙

    GWF 很给力,很多东西都能墙掉,但是把 npm 也纳入黑名单,不知道 GWFer 是怎么想的.FQ翻了好多年了,原理其实也挺简单的,proxy 嘛! » 方法一 A) 国内源,http://cnpm ...

  6. Nim编码风格

    介绍 Nim语言不限制开发人员使用哪种具体的编码风格, 但为了社区的发展,在编写一些标准库的时候还是应该遵从统一的编码风格 这篇文章会列出一系列的编码风格准则,供大家参考. 但值得注意的是,有很多例外 ...

  7. [stm32] NRF24L01+USART搞定有线和无线通信

    前言 一般进行远程监控时,2.4G无线通信是充当远程数据传输的一种方法.这时就需要在现场部分具备无线数据发送装置,而在上位机部分由于一般只有串口,所以将采集到的数据送到电脑里又要在上位机端设计一个数据 ...

  8. Azure China (8) 使用Azure PowerShell创建虚拟机,并设置固定Virtual IP Address和Private IP

    <Windows Azure Platform 系列文章目录> 本文介绍的是由世纪互联运维的Windows Azure China. 相比于Global Azure (http://www ...

  9. 翻译:AKKA笔记 - Actor消息 -1(一)

    从第一篇Akka笔记的介绍中,我们是从很高的高度去观察Akka工具箱中的Actors.在这篇笔记的第二篇,我们会看一下Actors中的消息部分.而且延续上一次的例子,我们还会使用同样的学生与老师的例子 ...

  10. 【管理心得之三十】"这事与我无关"

    场景再现 ========================事因 ⇔ {一个农庄主在他的粮仓里放了一只老鼠夹.} 过程 ⇔ {老鼠发现了,跑去告诉母鸡} 母鸡:这和我有什么关系,我很同情你.      ...