1. 需求描述
在工作中为了给一组培训对象准备Linux实验环境,需要服务器上
- 首先,批量删除旧的用户信息;
- 然后,批量创建新的用户账号;
2. 场景描述
现有服务器系统中已经存在60个老用户,用户名分别是s01, s02, s03 … s60,并且每个用户在 /home 里都有个人目录和旧文件,需要全部删除重新创建。
3. 批量删除旧用户
-
Linux 下删除用户信息的命令为 userdel <user_name>,默认无参数情况下,只会删除 /etc/passwd、/etc/shadow、/etc/group/、/etc/gshadow 这四个文件中的用户信息,并不能删除/home目录下的用户目录。需要增加 -r 参数才能完全清除用户所有数据。
-
因为要一次性批量删除大量用户,所以编写一个脚本 batch_del_user.sh 来完成批处理工作。
#!/bin/bash for n in {1..60} do # 判断序号,构造 s01, s02,s03 ... s60 这样的用户名 user=$([ $n -le 9 ] && echo "s0$n" || echo "s$n") # 增加 -r 参数,清除用户的所有信息 userdel -r $user done
-
使用管理员用户执行脚本,完成用户清除。
4. 批量添加新用户
使用newusers命令来批量生成用户。需要提供一个包含批量用户信息的文本文件供命令读取。该文件每行信息的基本结构为用冒号分割的多个字段,每个字段的含义如下:
Username:Password:User_ID:Group_ID:User_Info:Home_Directory:Default_Shell
-
- 先通过 addgroup student 添加了一个学生组。再通过 /etc/group 文件查看student组的ID号为 1003
$ sudo addgroup student $ cat /etc/group | grep student student:x:1003:
-
4.2 编写一个 shell 脚本 batch_create_user.sh 来批量生成注册用户信息文件(Password_Here 替换成默认密码), $((2000 + $n)) 用于生成用户ID的流水号,可根据自己本地 /etc/passwd 里用户ID的实际情况修改。
#!/bin/bash for n in {1..60} do user=$([ $n -le 9 ] && echo "s0$n" || echo "s$n") echo "$user:Password_Here:$((2000+$n)):1003:$user:/home/$user:/bin/bash" done
-
4.3 执行脚本生成用户信息文件。然后通过 newusers 命令批量生成用户。最后查看/home目录,确定用户已经创建完成。
$ sh ./batch_create_user.sh > users.txt $ sudo newusers users.txt $ ls /home/
-
4.4 新创建的用户目录里没有包含默认环境设置文件 .profile 和 .bashrc,从其它用户目录下复制了两个样例文件到 /tmp 目录下,然后拷贝到新用户的目录,并修改其所有者和权限。
for n in {1..60} do user=$([ $n -le 9 ] && echo "s0$n" || echo "s$n") cp /tmp/.bashrc /home/$user/ cp /tmp/.profile /home/$user/ chown $user:student /home/$user/.bashrc /home/$user/.profile chmod 700 /home/$user done
5. 测试结果
使用新用户账号成功登录,并且成功起用相关环境设置。