老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

Linux面试题-批量添加用户并设置8位随机密码

老男孩IT教育

技术博客

2020年11月13日 14:46

运维工作中,如何批量添加用户?怎么设置8位随机密码?看老男孩教育Linux培训如何说

一.批量添加用户stu01 stu02 stu03 并设置123456

化简为 添加3个用户设置固定密码

1.最终目标:

useradd stu01 ;echo 123456|passwd --stdin stu01  
useradd stu02 ;echo 123456|passwd --stdin stu02  
useradd stu03 ;echo 123456|passwd --stdin stu03  

2.第1个里程碑-生成用户名

方法1

[root@oldboyedu59 ~]# echo stu{01..3}|xargs -n1
stu01
stu02
stu03

第2个里程碑-命令拼接

利用sed/awk 里面

sed 's###g' 后两个井号之间写什么 屏幕就显示什么
awk 利用 "" 双引号里面写什么 屏幕就显示什么

 

[root@oldboyedu59 ~]# echo stu{01..3}|xargs -n1|sed -r 's#(.*)#useradd \1#g'
useradd stu01
useradd stu02
useradd stu03

 

[root@oldboyedu59 ~]# echo stu{01..3}|xargs -n1|sed -r 's#(.*)#useradd \1;echo 123456|passwd --stdin \1#g'
useradd stu01;echo 123456|passwd --stdin stu01
useradd stu02;echo 123456|passwd --stdin stu02
useradd stu03;echo 123456|passwd --stdin stu03

补充:

& 符号在sed命令中s###g 表示前面正则匹配到的内容

[root@oldboyedu59 ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@oldboyedu59 ~]# echo {1..10}|sed -r 's#([0-9]+)#<\1>#g'
<1> <2> <3> <4> <5> <6> <7> <8> <9> <10>
[root@oldboyedu59 ~]# echo {1..10}|sed -r 's#[0-9]+#<&>#g'
<1> <2> <3> <4> <5> <6> <7> <8> <9> <10>

第3个里程碑-把内容运行

bash 命令解释器

[root@oldboyedu59 ~]# echo pwd
pwd
[root@oldboyedu59 ~]# echo pwd|bash
/root
[root@oldboyedu59 ~]# echo hostname 
hostname
[root@oldboyedu59 ~]# echo hostname |bash
oldboyedu59

找一个 进行测试 测试成功最终交给bash运行

[root@oldboyedu59 ~]# useradd stu02;echo 123456|passwd --stdin stu02
Changing password for user stu02.
passwd: all authentication tokens updated successfully.

交给bash运行

[root@oldboyedu59 ~]# echo stu{01..3}|xargs -n1|sed -r 's#(.*)#useradd \1;echo 123456|passwd --stdin \1#g' |bash
Changing password for user stu01.
passwd: all authentication tokens updated successfully.
useradd: user 'stu02' already exists
Changing password for user stu02.
passwd: all authentication tokens updated successfully.
Changing password for user stu03.
passwd: all authentication tokens updated successfully.

 

二.批量添加用户stu04 stu05 stu06 随机8位密码

化简为 添加3个用户设置随机密码

第1个里程碑-生成用户名

方法1

[root@oldboyedu59 ~]# echo stu{01..3}|xargs -n1
stu01
stu02
stu03

第2个里程碑-生成随机密码

方法1 tr + head

[root@oldboyedu59 ~]# tr -cd 'a-zA-Z0-9' </dev/urandom |head -c8
B0iV36fZ[root@oldboyedu59 ~]# 

方法2 date +md5sum/sha512sum + head

[root@oldboyedu59 ~]# date +%N
211379317

第3个里程碑-命令拼接

需要通过sed/awk拼接出下面的4个命令
useradd stu06;
pass=date +%N;
echo pass∣passwd−−stdinstu06;echopass stu06 >>/root/pass.txt

通过sed/awk拼接后,想要的结果为:

useradd stu04; pass=`date +%N`; echo $pass |passwd --stdin stu04 ; echo $pass  stu04 >>/root/pass.txt 
useradd stu05; pass=`date +%N`; echo $pass |passwd --stdin stu05 ; echo $pass  stu05 >>/root/pass.txt 
useradd stu06; pass=`date +%N`; echo $pass |passwd --stdin stu06 ; echo $pass  stu06 >>/root/pass.txt 

拼接的命令如下:

[root@oldboyedu59 ~]# echo stu{04..6}|xargs -n1 |sed 's#.*#useradd &;p=$(date +%N);echo $p|passwd --stdin &;echo $p & >>/p.txt#g'
useradd stu04;p=$(date +%N);echo $p|passwd --stdin stu04;echo $p stu04 >>/p.txt
useradd stu05;p=$(date +%N);echo $p|passwd --stdin stu05;echo $p stu05 >>/p.txt
useradd stu06;p=$(date +%N);echo $p|passwd --stdin stu06;echo $p stu06 >>/p.txt

上面命令分步拆开样子:

echo stu{04..6}|xargs -n1 |sed 's#.*#
useradd &;
p=$(date +%N);
echo $p|passwd --stdin &;
echo $p & >>/p.txt#

上面随便找1条 执行 测试是否ok 测试成功就可以交给bash执行

[root@oldboyedu59 ~]# useradd stu05;p=$(date +%N);echo $p|passwd --stdin stu05;echo $p stu05 >>/p.txt
Changing password for user stu05.
passwd: all authentication tokens updated successfully.
[root@oldboyedu59 ~]# id stu05 
uid=1008(stu05) gid=1009(stu05) groups=1009(stu05)
[root@oldboyedu59 ~]# su - oldboy 
Last login: Thu Apr 25 09:28:20 CST 2019 from 10.0.0.1 on pts/2
[oldboy@oldboyedu59 ~]$ logout
[root@oldboyedu59 ~]# cat /p.txt 
209574583 stu05
[root@oldboyedu59 ~]# su - oldboy 
Last login: Thu Apr 25 12:03:36 CST 2019 on pts/0
[oldboy@oldboyedu59 ~]$ su - stu05 
Password: 
[stu05@oldboyedu59 ~]$ 

第4个里程碑-交给bash执行并测试

交给bash执行

[root@oldboyedu59 ~]# echo stu{04..6}|xargs -n1 |sed 's#.*#useradd &;p=$(date +%N);echo $p|passwd --stdin &;echo $p & >>/p.txt#g'
useradd stu04;p=$(date +%N);echo $p|passwd --stdin stu04;echo $p stu04 >>/p.txt
useradd stu05;p=$(date +%N);echo $p|passwd --stdin stu05;echo $p stu05 >>/p.txt
useradd stu06;p=$(date +%N);echo $p|passwd --stdin stu06;echo $p stu06 >>/p.txt
[root@oldboyedu59 ~]# echo stu{04..6}|xargs -n1 |sed 's#.*#useradd &;p=$(date +%N);echo $p|passwd --stdin &;echo $p & >>/p.txt#g'|bash
Changing password for user stu04.
passwd: all authentication tokens updated successfully.
useradd: user 'stu05' already exists
Changing password for user stu05.
passwd: all authentication tokens updated successfully.
Changing password for user stu06.
passwd: all authentication tokens updated successfully.
[root@oldboyedu59 ~]# cat /p.txt 
209574583 stu05
570581626 stu04
600781084 stu05
660376548 stu06

执行后的测试

[root@oldboyedu59 ~]# cat /p.txt 
209574583 stu05
570581626 stu04
600781084 stu05
660376548 stu06
[root@oldboyedu59 ~]# 
[root@oldboyedu59 ~]# su - oldboy
Last login: Thu Apr 25 12:03:45 CST 2019 on pts/0
[oldboy@oldboyedu59 ~]$ su - stu06 
Password: 
[oldboy@oldboyedu59 ~]$ su - stu05
Password: 
Last login: Thu Apr 25 12:04:01 CST 2019 on pts/0
[stu05@oldboyedu59 ~]$ logout
[oldboy@oldboyedu59 ~]$ logout

 

总结:

1.理解命令拼接:sed/awk 形式命令 最后交给bash执行
2.sed &

 

更多Linux运维面试题,欢迎关注老男孩教育Linux运维培训课程。Linux运维课程紧跟时代前沿技术,针对不同基础不同情况的学习者,开设哟Linux运维面授班,Linux运维周末班和Linux在线网络班3种模式。

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。