• L42.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- groupdel和passwd


    7.5 groupdel:删除用户组

    7.5.1 命令详解

    【命令星级】 ★★☆☆☆

    【功能说明】

    ​ groupdel命令用户删除指定的用户组,此命令的使用频率极低,了解一下即可。

    【语法格式】

    groupdel [group]
    groupdel [用户组]
    
    • 1
    • 2

    说明:

    ​ 1)在groupdel命令以及后面的选项和用户名里,每个元素直接都至少要有一个空格。

    ​ 2)groupdel不能删除还有用户归属的主用户组。

    7.5.2 使用范例

    ​ **范例7-10:**删除用户组的例子。

    [root@centos7 ~]# groupdel root	#删除root用户组失败,因为root用户还存在。
    groupdel: cannot remove the primary group of user 'root'
    [root@centos7 ~]# groupdel test1	#删除test1用户组成功。
    [root@centos7 ~]# grep -w test1 /etc/group
    
    • 1
    • 2
    • 3
    • 4

    7.6 passwd:修改用户密码

    7.6.1 命令详解

    【命令星级】 ★★★★★

    【功能说明】

    ​ passwd命令可以修改用户密码及密码过期时间等内容,是工作中很常用的命令。普通用户和超级用户都可以运行passwd命令,但普通用户只能更改自身的用户密码,超级用户root则可以设置或修改所有用户的密码。

    【语法格式】

    passwd [options] [username]
    passwd [选项] [用户名]
    
    • 1
    • 2

    ​ **说明:**在passwd命令以及后面的选项和用户名里,每个元素直接都至少要有一个空格。

    【选项说明】

    ​ 表7-7针对该命令的参数选项进行了说明。

    ​ 表7-7 passwd命令的参数选项及说明

    在这里插入图片描述
    ​ 除了上述说明,还要强调以下两点。

    • root用户可以修改任何用户的密码,普通用户只能修改自身的密码。
    • root用户修改密码时,如果不符合系统密码规则,则会给出警告信息,但密码设置仍然有效。而普通用户修改密码时,如果使用的时弱密码,则会给出告警信息,且修改无效。

    7.6.2 使用范例

    7.6.2.1 基础范例

    ​ **范例7-11:**修改用户密码的示例。

    ​ (1)修改自身用户密码

    ​ 当执行passwd不带任何参数和内容时,表示修改当前执行命令用户自身的密码。具体代码如下:

    [root@centos7 ~]# passwd	#修改当前用户,root自身的密码。
    Changing password for user root.
    New password: 	#输入密码123456,系统不会输出用户输入的密码。
    BAD PASSWORD: The password is shorter than 8 characters	#如果密码比较简单,则会给出警告信息,但不会阻止。
    Retype new password: 	#再次输入密码123456。
    passwd: all authentication tokens updated successfully.		#但还是设置成功了。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ​ (2)设置及修改普通用户的密码

    [root@centos7 ~]# useradd younggirl	#添加用户younggirl。
    [root@centos7 ~]# passwd younggirl	#为younggirl用户添加密码。
    Changing password for user younggirl.
    New password: 	#输入密码123456。
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 	#再次输入密码123456。
    passwd: all authentication tokens updated successfully.		#设置成功。
    [younggirl@centos7 ~]$ passwd	#修改用户自身密码。
    Changing password for user younggirl.
    Changing password for younggirl.
    (current) UNIX password: 	#先输入用户当前密码。
    New password: 	#输入新密码。
    BAD PASSWORD: The password is too similar to the old one	#如果密码太短则不允许设置(root用户修改密码只是警告)。
    New password: 	#必须设置足够复杂的密码。
    Retype new password: 	#重复设置。
    passwd: all authentication tokens updated successfully.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ​ **范例7-12:**显示账户密码信息的比例。

    [younggirl@centos7 ~]$ passwd -S younggirl
    Only root can do that.	#提示这个参数只能root执行。
    [younggirl@centos7 ~]$ logout
    [root@centos7 ~]# passwd -S younggirl
    younggirl PS 2020-10-18 0 99999 7 -1 (Password set, SHA512 crypt.)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ​ **范例7-13:**一条命令非人工交互设置密码(生产使用技巧)。

    [root@centos7 ~]# echo "123456" | passwd --stdin younggirl	#--stdin参数能从标准输入中获取密码。
    Changing password for user younggirl.
    passwd: all authentication tokens updated successfully.
    
    • 1
    • 2
    • 3

    ​ 提示:这个命令在工作中批量设置密码时很有用。

    ​ **范例7-14:**要求younggirl用户7天之内不能更改密码,60天以后必须修改密码。过期前10天通知用户,过期后30天禁止用户登录。

    ​ **解答:**这道题的目的是测试passwd多个参数的用法,读者了解一下即可。

    [root@centos7 ~]# passwd -n 7 -x 60 -w 10 -i 30 younggirl	#参数的含义详见前文表14-13。
    Adjusting aging data for user younggirl.
    passwd: Success
    [root@centos7 ~]# chage -l younggirl	#-i参数用于查看账户的信息。
    Last password change					: Oct 18, 2020	#最后一次密码变化时间为2020-10-18。
    Password expires					: Dec 17, 2020	#密码过期时间为60天,即从2020-10-18到2020-12-17.
    Password inactive					: Jan 16, 2021	#密码停权时间,即密码过期30天之后停权,-i选项可控制该行。
    Account expires						: never	#账号过期时间。
    Minimum number of days between password change		: 7	#-n选项可控制该行。
    Maximum number of days between password change		: 60	#-x选项可控制该行。
    Number of days of warning before password expires	: 10	#-w选项可控制该行。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    7.6.2.2 生产案例

    ​ **范例7-15:**批量创建10个用户stu01-stu10,并且设置8位随机密码,要求不能使用Shell的循环(例如:for、while等),只能用Linux命令及管道来实现。

    ​ 实现命令如下:

    echo stu{01..10} |tr " " "\n" |sed -r 's#(.*)#useradd \1;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin \1; echo -e "\1 `echo "$pass"`">>/tmp/neteagle.log#g'
    #注意是一行。
    
    • 1
    • 2

    ​ 命令解析

    ​ 第一步:生成符合题意的10个用户名。

    [root@centos7 ~]# echo stu{01..10}
    stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
    
    • 1
    • 2

    ​ 第二步:使用tr命令将上述10个用户名竖行显示。

    [root@centos7 ~]# echo stu{01..10} |tr " " "\n"		#tr将管道输出中的空格替换为换行符。
    stu01
    stu02
    stu03
    stu04
    stu05
    stu06
    stu07
    stu08
    stu09
    stu10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ​ 第三步:在每一行的前面加上useradd命令,即可拼出添加用户的所有命令。

    [root@centos7 ~]# echo stu{01..10} |tr " " "\n" |sed -r 's#(.*)#useradd \1#g'	#利用sed的后向引用知识,见第4章的sed命令。
    useradd stu01
    useradd stu02
    useradd stu03
    useradd stu04
    useradd stu05
    useradd stu06
    useradd stu07
    useradd stu08
    useradd stu09
    useradd stu10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ​ 上面三步是完整的命令,第四步开始实际上是不同的命令,因为此用分号分割。

    ​ 第四步:定义8位随机数变量。

    [root@centos7 ~]# pass=$((RANDOM+88888888))
    [root@centos7 ~]# echo $pass
    88891565
    
    • 1
    • 2
    • 3

    ​ 第五步:以第一二步作为结果使用sed -r ‘s #(.*)#最终命令#g’。

    [root@centos7 ~]# echo stu{01..10} |tr " " "\n" |sed -r 's#(.*)#useradd \1;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin \1; echo -e "\1 `echo "$pass"`">>/tmp/neteagle.log#g'		#拼凑出10条命令语句。
    useradd stu01;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu01; echo -e "stu01 `echo "$pass"`">>/tmp/neteagle.log
    useradd stu02;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu02; echo -e "stu02 `echo "$pass"`">>/tmp/neteagle.log
    useradd stu03;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu03; echo -e "stu03 `echo "$pass"`">>/tmp/neteagle.log
    useradd stu04;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu04; echo -e "stu04 `echo "$pass"`">>/tmp/neteagle.log
    useradd stu05;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu05; echo -e "stu05 `echo "$pass"`">>/tmp/neteagle.log
    useradd stu06;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu06; echo -e "stu06 `echo "$pass"`">>/tmp/neteagle.log
    useradd stu07;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu07; echo -e "stu07 `echo "$pass"`">>/tmp/neteagle.log
    useradd stu08;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu08; echo -e "stu08 `echo "$pass"`">>/tmp/neteagle.log
    useradd stu09;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu09; echo -e "stu09 `echo "$pass"`">>/tmp/neteagle.log
    useradd stu10;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu10; echo -e "stu10 `echo "$pass"`">>/tmp/neteagle.log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ​ 表7-8 拼接后的命令拆解解析

    在这里插入图片描述
    ​ **提示:**表7-8里的所有命令其实就是创建用户、设置密码,并记录密码。

    ​ 第六步:将得出10条语句通过管道交给bash命令来执行。

    [root@centos7 ~]# echo stu{01..10} |tr " " "\n" |sed -r 's#(.*)#useradd \1;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin \1; echo -e "\1 `echo "$pass"`">>/tmp/neteagle.log#g' |bash
    Changing password for user stu01.
    passwd: all authentication tokens updated successfully.
    Changing password for user stu02.
    passwd: all authentication tokens updated successfully.
    Changing password for user stu03.
    passwd: all authentication tokens updated successfully.
    Changing password for user stu04.
    passwd: all authentication tokens updated successfully.
    Changing password for user stu05.
    passwd: all authentication tokens updated successfully.
    Changing password for user stu06.
    passwd: all authentication tokens updated successfully.
    Changing password for user stu07.
    passwd: all authentication tokens updated successfully.
    Changing password for user stu08.
    passwd: all authentication tokens updated successfully.
    Changing password for user stu09.
    passwd: all authentication tokens updated successfully.
    Changing password for user stu10.
    passwd: all authentication tokens updated successfully.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    zookeeper重启,线上微服务全部掉线,怎么回事?
    防御安全第四次作业
    操作系统概念 系统调用与 API
    图--专升本
    securecrt设置字体颜色
    接口和接口测试
    【SpringBoot笔记25】SpringBoot框架集成PageHelper分页插件以及自定义分页工具类
    微信小程序全局水印组件
    shell脚本实现定时删除文件或文件夹
    Reflections一个强大的类扫描工具介绍
  • 原文地址:https://blog.csdn.net/qq_25599925/article/details/125686759