使用txt文件删除linux debian10中未显示在列表中的用户

使用txt文件删除linux debian10中未显示在列表中的用户

我在一个名为 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不支持多个用户名。

当心!

相关内容