删除一个用户和该用户拥有的所有文件

pl1*_*1nk 13 command-line users

我在deluser没有参数的情况下使用过--remove-all-files

$ deluser 'user'
Run Code Online (Sandbox Code Playgroud)

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

njs*_*jsg 21

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

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

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

find / -user xxx -delete
Run Code Online (Sandbox Code Playgroud)

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

编辑:数字 ID:我说你必须使用数字 ID 的原因是,因为你已经删除了用户,他的条目/etc/passwd也被删除了(它有用户 ID 和他的用户名) .

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

stat -c %u /home/user/
Run Code Online (Sandbox Code Playgroud)

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

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

find / -user $(stat -c %u /home/user/) -delete
Run Code Online (Sandbox Code Playgroud)

(当然,您可能更喜欢先运行它而不使用 no-delete以确保没有您想要保留的内容,并捕获您在编写命令的其余部分时犯的任何错误。执行递归删除操作时的错误/不适合微弱的心。)


Eli*_*gan 5

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

例如,假设用户有 usernamealice和 UID 1001

sudo adduser --uid 1001 alice
sudo deluser --remove-all-files alice
Run Code Online (Sandbox Code Playgroud)