【命令星级】 ★★☆☆☆
【功能说明】
groupdel命令用户删除指定的用户组,此命令的使用频率极低,了解一下即可。
【语法格式】
groupdel [group]
groupdel [用户组]
说明:
1)在groupdel命令以及后面的选项和用户名里,每个元素直接都至少要有一个空格。
2)groupdel不能删除还有用户归属的主用户组。
**范例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
【命令星级】 ★★★★★
【功能说明】
passwd命令可以修改用户密码及密码过期时间等内容,是工作中很常用的命令。普通用户和超级用户都可以运行passwd命令,但普通用户只能更改自身的用户密码,超级用户root则可以设置或修改所有用户的密码。
【语法格式】
passwd [options] [username]
passwd [选项] [用户名]
**说明:**在passwd命令以及后面的选项和用户名里,每个元素直接都至少要有一个空格。
【选项说明】
表7-7针对该命令的参数选项进行了说明。
表7-7 passwd命令的参数选项及说明
除了上述说明,还要强调以下两点。
**范例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. #但还是设置成功了。
(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.
**范例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.)
**范例7-13:**一条命令非人工交互设置密码(生产使用技巧)。
[root@centos7 ~]# echo "123456" | passwd --stdin younggirl #--stdin参数能从标准输入中获取密码。
Changing password for user younggirl.
passwd: all authentication tokens updated successfully.
提示:这个命令在工作中批量设置密码时很有用。
**范例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选项可控制该行。
**范例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'
#注意是一行。
命令解析
第一步:生成符合题意的10个用户名。
[root@centos7 ~]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
第二步:使用tr命令将上述10个用户名竖行显示。
[root@centos7 ~]# echo stu{01..10} |tr " " "\n" #tr将管道输出中的空格替换为换行符。
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
第三步:在每一行的前面加上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
上面三步是完整的命令,第四步开始实际上是不同的命令,因为此用分号分割。
第四步:定义8位随机数变量。
[root@centos7 ~]# pass=$((RANDOM+88888888))
[root@centos7 ~]# echo $pass
88891565
第五步:以第一二步作为结果使用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
表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.