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

我使用deluser没有参数的deluser --remove-all-files

 $ deluser 'user' 

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

您将不得不手动查找文件,这可能是deluser会做的。

请注意--remove-all-filesrm -r /home/user 。 后者仅删除homedir(可能包括该用户不拥有的文件,尽管不常见),前者从系统中删除该用户拥有的所有文件。 至少如果要信任该联机帮助页 。

GNU find有一个-user测试,因此你可以find / -user xxx来查找用户xxx拥有的所有文件。 xxx将是用户名,并且可以(并且在这种情况下必须,因为用户不再存在)是用户的数字ID。 find也有一个-delete选项,所以

 find / -user xxx -delete 

应该这样做,虽然我没有同时测试所有选项的命令。

编辑:数字ID:我说你必须使用数字ID的原因是,因为你已经删除了用户,他/etc/passwd条目被删除(它与其他东西一起,用户ID,用他的用户名)。

所以,如果你没有删除他的homedir,最简单的方法之一就是查询该homedir的所有者的ID:

 stat -c %u /home/user/ 

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

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

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

(当然你可能更喜欢先运行它而不使用-delete以确保没有任何你想要保留的内容,并且在编写剩余的命令时捕获任何错误。在/上执行递归删除操作时出错为了胆小的人。)

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

例如,假设用户具有用户名alice和UID 1001

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

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

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