Ubuntu deluser 优化配置与性能提升
一 核心原则与前提
rsync -a /home/<用户名> /path/to/backup/。id <用户名>、who | grep <用户名>、w | grep <用户名>。二 常用选项与推荐用法
sudo deluser <用户名>。sudo deluser --remove-home <用户名>(等价于 -r)。sudo deluser --remove-home --remove-mail-spool <用户名>。sudo deluser --remove-all-files <用户名>。sudo deluser --disabled-login <用户名>,确认无依赖后再执行删除。sudo deluser --backup <用户名>(备份便于回滚)。sudo deluser --force <用户名>(即便主目录缺失或异常也尝试删除)。三 性能优化要点
sudo tail -f /var/log/syslog | grep deluser、top/htop 观察资源占用。四 安全与清理清单(推荐流程)
who | grep <用户名>、w | grep <用户名>,必要时 sudo pkill -u <用户名>。sudo crontab -r -u <用户名>(删除前可先 crontab -l -u <用户名> 核对)。sudo visudo 删除类似 username ALL=(ALL:ALL) ALL 的行。sudo rm -rf /home/<用户名>/.ssh(或按需保留/迁移)。sudo rm /var/mail/<用户名>(若使用本地 MTA)。sudo deluser [--remove-home] [--remove-mail-spool] [--remove-all-files] <用户名>。id <用户名> 应返回无此用户;必要时检查 /home/<用户名> 与日志。五 批量删除脚本模板
#!/usr/bin/env bash
set -Eeuo pipefail
backup_dir="/root/user-del-backup-$(date +%F-%H%M%S)"
log_file="$backup_dir/cleanup.log"
mkdir -p "$backup_dir"
exec >"$log_file" 2>&1
for u in "$@"; do
echo "=== Processing $u ==="
if ! id "$u" &>/dev/null; then
echo "User $u does not exist, skip."
continue
fi
# 下线
pkill -u "$u" || true
# 备份主目录
if getent passwd "$u" | cut -d: -f6 | grep -q '^/home/'; then
rsync -a "$(getent passwd "$u" | cut -d: -f6)" "$backup_dir/$u-home/"
fi
# 清理 cron/ssh
crontab -r -u "$u" 2>/dev/null || true
rm -rf "/home/$u/.ssh" 2>/dev/null || true
# 删除用户(按需增减选项)
deluser --remove-home --remove-mail-spool "$u" || true
echo "Done $u"
done
echo "All done. Backup in $backup_dir"
#!/usr/bin/env bash
set -Eeuo pipefail
max_jobs=4
(
for u in "$@"; do
{
echo "=== $u ==="
id "$u" &>/dev/null || { echo "skip $u"; exit 0; }
pkill -u "$u" || true
getent passwd "$u" | cut -d: -f6 | grep -q '^/home/' &&
rsync -a "$(getent passwd "$u" | cut -d: -f6)" "/root/backup/$u-home/"
crontab -r -u "$u" 2>/dev/null || true
rm -rf "/home/$u/.ssh" 2>/dev/null || true
deluser --remove-home --remove-mail-spool "$u" || true
echo "Done $u"
} &
# 并发控制
while (( $(jobs -rp | wc -l) >= max_jobs )); do sleep 0.2; done
done
wait
)
echo "Batch done."
提示:并发删除会放大 I/O 抖动,务必在维护窗口、低峰期执行,并先小范围演练。