同事离职,服务器上还留着他的账号,运维小伙直接敲了 userdel tom,过两天发现 /home/tom 还占着 8 个 G,crontab 里还有他的定时任务在跑。删用户不是一条命令的事。

linux 删除用户的标准命令是 userdel,加 -r 参数会连同家目录和邮件一起删。不加 -r 只删 /etc/passwd、/etc/shadow、/etc/group 里的记录,家目录留着。所以动手前先想清楚,目录里的资料要不要备份。

动手前先做三件事

第一,确认账号没在用:who 看当前登录,ps -u tom 看有没有进程,有就先 pkill -u tom,或者用 usermod -L tom 锁定账号观察几天。第二,导出 crontab:crontab -u tom -l 看一眼,别留个定时任务半夜报错。第三,查 sudo 权限,/etc/sudoers 和 /etc/sudoers.d/ 下面有没有他的条目,有就删掉。

执行和收尾

确认无误后执行 userdel -r tom。如果提示 user is currently used by process,说明还有进程,回到上一步处理。删完用 id tom 确认返回 no such user,再检查 /home 下有没有残留目录,属主是旧 UID 的文件可以用 find / -uid 1001 -ls 找出来,酌情转移或删除。

删掉的 UID 可能被新用户复用,旧文件属主会显示成新用户,所以要用 find 按 UID 查一遍,别只看用户名。如果这个用户是某个组的唯一成员,groupdel 把组也删掉。系统自带的账号,比如 daemon、bin,别动,删了会影响服务。

几个容易踩的坑

直接 userdel -f 强制删正在登录的用户,可能让终端处于奇怪状态。共享目录里别人也在用的文件,删之前确认属主。还有,删用户不会自动清理他提交的代码仓库和数据库账号,这些要单独处理。

要一次清理多个离职工号,别写循环直接 userdel,先把名单里的家目录大小统计出来,确认没有共用目录再批量执行。稳妥的做法是先锁定、观察一周,再删。linux 删除用户这个操作本身不复杂,复杂的是删之前那些确认工作。