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


12

我用了deluser没有参数--remove-all-files

$ deluser 'user'

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

Answers:


19

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

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

GNU find有一个-user测试,因此您可以find / -user xxx查找user拥有的所有文件xxxxxx将用户名,可(在这种情况下必须这样做,因为用户不再存在)是用户的数字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

(当然,您可能更喜欢先运行no -delete,以确保没有要保留的内容,并捕获在编写其余命令时犯的任何错误。进行递归删除操作时的错误/并不适合于晕倒。的心。)


-exec如果您想对删除进行更多控制,还可以使用find选项运行自定义rm命令,但是YMMV我从未尝试过这样做。
agc93

的确如此,或者将输出传递给rmusing xargs(但是如果结果太多,这可能会达到参数限制),但是请-depth参阅,并引用信息手册:“如果您的`find'命令删除了目录,您可能会发现当“ find”试图递归到已被删除的目录时,您会收到一条虚假的错误消息。使用“ -depth”选项通常可以解决此问题。” (稍后在同一部分中,“((`-delete'仍然意味着'-depth')”)”)
njsg 2012年

@njsg好吧,我得到:find: 'user' is not the name of a known use
pl1nk

1
@ pl1nk:正如我所说,您将必须使用用户的数字ID-因为您已经删除了该用户,所以其中没有/etc/passwd列出用户及其ID的映射。您将必须找到数字ID。这样做stat -c %u /home/user/,它应该为您提供数字用户ID,xxx如上使用。
njsg 2012年

@njsg是的,我还没有读完问题的最后一部分。
pl1nk 2012年

5

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

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

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

3

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

但是,您可能会发现更多文件-不仅是那些属于已删除文件的文件。


我相信您是最好的答案!...“ $ find / \(-nouser -o -nogroup \)-print0 | xargs -0 rm -rf”该命令查找没有用户或组的所有文件,自动删除它们。
DanglingPointer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.