删除用户以及该用户拥有的所有文件

删除用户以及该用户拥有的所有文件

我使用时deluser不带参数--remove-all-files

$ deluser 'user'

rm -r /home/user除了现在删除用户拥有的所有文件之外,还有其他方法吗(因为我已经执行了 deluser)?

答案1

您必须手动查找文件,这可能就是deluser要做的事情。

--remove-all-files注意不是与 相同rm -r /home/user。后者仅删除主目录(可能包括不属于该用户的文件,但并不常见),前者删除全部系统中该用户所拥有的文件。至少如果手册页值得信赖

GNUfind有一个-user测试,因此您可以执行此操作find / -user xxx来查找用户拥有的所有文件xxxxxx将是用户名,并且可以(在这种情况下将要必须是用户的数字 ID,因为用户不再存在。find还有一个-delete选项,所以

find / -user xxx -delete

应该这样做,尽管我还没有同时测试使用所有选项的命令。

编辑:数字ID:我之所以说你必须使用数字 ID,是因为你已经删除了用户,所以他的条目也/etc/passwd被删除了(它包含其他内容、用户 ID 和用户名)。

因此,如果你没有删除他的主目录,最简单的方法之一就是查询该主目录所有者的 ID:

stat -c %u /home/user/

stat是一个读取文件系统数据的工具。-c %u告诉stat如何写入其输出,这里我要求它简单地输出用户 ID)

如果你喜欢单行命令,你甚至可以链接两个命令:

find / -user $(stat -c %u /home/user/) -delete

(当然,您可能希望先使用 no 运行它,以-delete确保没有任何要保留的内容,并捕获编写其余命令时所犯的任何错误。在执行递归删除操作时出错/并不适合胆小的人。)

答案2

另一个选项是使用 重新添加用户adduser,指定旧的 UID,然后deluser再次运行,这次使用--remove-all-files标志。

例如,假设用户的用户名是alice和 UID1001

sudo adduser --uid 1001 alice
sudo deluser --remove-all-files alice

答案3

gnu find 有选项 -nouser 和 -nogroup,在 中查找man find。使用这些选项,您可以找到文件系统中所有在 /etc/passwd 中没有对应用户的文件。如果您尚未使用已删除用户的旧 uid 创建新用户,则有可能找到这些孤立文件。

但是,您可能会找到更多文件 - 不仅仅是属于您已删除的文件。

相关内容