我在一个名为 updatedlist.txt 的 txt 文件中有一个更新的用户列表,列表中是所有现有用户名,其中一些用户名因不再需要而被删除,我想编写一个脚本来帮助我更新 debian10 服务器中已删除的用户。为了更清楚起见,下面是我给出的粗略伪代码:
对于现有用户名中的名称,如果(名称不在 updatedlist.txt 中)删除用户
抱歉,我刚开始写脚本,谁能教我怎么做?谢谢!
答案1
所以您有用户列表并从当前系统中删除不存在于该列表中的用户?
获取当前系统用户列表
getent passwd | cut -d: -f1
但您不想删除一堆系统生成的用户。又名“系统用户”。通过useradd
命令或任何系统管理工具生成的普通用户的 UID 介于 1000 - 60000 之间man login.defs
。搜索“UID_MAX”和“UID_MIN”。
getent passwd {1000..60000} | cut -d: -f1
'{1000..60000}'<-这是 shell 特定的扩展。bash 和 zsh 应该可以工作。该命令需要一些时间。大约 30 秒?
现在我们可以将输出保存到文件
getent passwd {1000..60000} | cut -d: -f1 > current.txt
我们可以比较'shoulbe.txt'和'current.txt'
comm <(sort shouldbe.txt) <(sort current.txt)
第一列是文件 1(shoulbe.txt)所特有的第二列是文件 2(current.txt)所特有的第三列是两者都有的
因此,如果您想创建新用户,则第 1 列应为空白。第 2 列是我们应该删除的。第 3 列是我们应该保留的。
仔细检查输出。然后仔细阅读man userdel
。找到您想要的选项。例如--remove
删除用户的主目录。
最后,
comm <(sort shouldbe.txt) <(sort current.txt) -1 -3
# double check this ouput. listed users would be deleted.
# then delete,
comm <(sort shouldbe.txt) <(sort current.txt) -1 -3 | sudo xargs -n 1 userdel(add your options here)
-1
,-3,
抑制该列。xargs 部分是userdel
在列表上逐个运行的。userdel
不支持多个用户名。
当心!