本文目录导读:

我来帮你写一个自动删除临时用户的脚本,这里提供几个不同场景的脚本方案:
方案1:基础版 - 删除特定前缀的临时用户
#!/bin/bash
# 自动删除临时用户脚本
# 功能:删除所有以 temp_ 开头的用户
# 定义临时用户前缀
TEMP_USER_PREFIX="temp_"
echo "开始清理临时用户..."
# 获取所有以 temp_ 开头的用户
temp_users=$(getent passwd | grep "^${TEMP_USER_PREFIX}" | cut -d: -f1)
if [ -z "$temp_users" ]; then
echo "没有找到临时用户"
exit 0
fi
# 删除每个临时用户
for user in $temp_users; do
echo "正在删除用户: $user"
# 终止用户的所有进程
pkill -u "$user" 2>/dev/null
# 删除用户及其家目录
userdel -rf "$user" 2>/dev/null
if [ $? -eq 0 ]; then
echo "✓ 已删除用户: $user"
else
echo "✗ 删除用户失败: $user"
fi
done
echo "清理完成"
方案2:高级版 - 根据创建时间清理
#!/bin/bash
# 自动删除创建超过指定时间的临时用户
# 配置项
TEMP_USER_PREFIX="temp_"
MAX_AGE_HOURS=24 # 用户最大存在时间(小时)
echo "开始清理过期临时用户(超过${MAX_AGE_HOURS}小时)..."
# 获取当前时间戳
current_time=$(date +%s)
max_age_seconds=$((MAX_AGE_HOURS * 3600))
# 遍历所有临时用户
for user in $(getent passwd | grep "^${TEMP_USER_PREFIX}" | cut -d: -f1); do
# 获取用户的创建时间
user_home=$(getent passwd "$user" | cut -d: -f6)
if [ -d "$user_home" ]; then
# 使用家目录的创建时间作为参考
create_time=$(stat -c %Y "$user_home" 2>/dev/null)
age=$((current_time - create_time))
if [ $age -gt $max_age_seconds ]; then
echo "删除过期用户: $user (存在时间: $((age / 3600))小时)"
# 终止进程并删除用户
pkill -u "$user" 2>/dev/null
userdel -rf "$user" 2>/dev/null
if [ $? -eq 0 ]; then
echo "✓ 已删除"
else
echo "✗ 删除失败"
fi
fi
fi
done
echo "清理完成"
方案3:定时任务版 - 配合 cron 使用
#!/bin/bash
# 配置
TEMP_USER_PREFIX="temp_"
MAX_AGE_HOURS=24
LOG_FILE="/var/log/cleanup_temp_users.log"
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
cleanup_temp_users() {
local current_time=$(date +%s)
local max_age_seconds=$((MAX_AGE_HOURS * 3600))
local deleted_count=0
local failed_count=0
log_message "开始清理临时用户..."
for user in $(getent passwd | grep "^${TEMP_USER_PREFIX}" | cut -d: -f1); do
local user_home=$(getent passwd "$user" | cut -d: -f6)
if [ -d "$user_home" ]; then
local create_time=$(stat -c %Y "$user_home" 2>/dev/null)
local age=$((current_time - create_time))
if [ $age -gt $max_age_seconds ]; then
# 尝试终止用户进程
pkill -u "$user" 2>/dev/null
# 删除用户
if userdel -rf "$user" 2>/dev/null; then
log_message "已删除用户: $user"
((deleted_count++))
else
log_message "删除失败: $user"
((failed_count++))
fi
fi
fi
done
log_message "清理完成: 删除 ${deleted_count} 个用户, 失败 ${failed_count} 个"
}
# 运行清理
cleanup_temp_users
方案4:带参数配置的灵活版本
#!/bin/bash
# 配置参数
PREFIX="${1:-temp_}" # 用户前缀,默认 temp_
AGE_LIMIT="${2:-24}" # 时间限制,默认24小时
DRY_RUN="${3:-false}" # 是否只预览不执行
usage() {
echo "用法: $0 [前缀] [小时数] [dry-run]"
echo "示例:"
echo " $0 # 删除所有以 temp_ 开头、超过24小时的用户"
echo " $0 guest_ 48 # 删除所有以 guest_ 开头、超过48小时的用户"
echo " $0 temp_ 24 true # 预览模式,不实际删除"
exit 1
}
# 检查参数
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
usage
fi
echo "=== 临时用户清理工具 ==="
echo "用户前缀: $PREFIX"
echo "最大小时数: $AGE_LIMIT"
echo "预览模式: $DRY_RUN"
echo ""
current_time=$(date +%s)
max_age_seconds=$((AGE_LIMIT * 3600))
# 查找并处理临时用户
for user in $(getent passwd | grep "^${PREFIX}" | cut -d: -f1); do
user_home=$(getent passwd "$user" | cut -d: -f6)
if [ -d "$user_home" ]; then
create_time=$(stat -c %Y "$user_home" 2>/dev/null)
age=$((current_time - create_time))
age_hours=$((age / 3600))
if [ $age -gt $max_age_seconds ]; then
echo "用户: $user"
echo " 家目录: $user_home"
echo " 活跃时间: ${age_hours}小时"
if [ "$DRY_RUN" = "true" ]; then
echo " [预览模式] 将删除此用户"
else
echo " 正在删除..."
pkill -u "$user" 2>/dev/null
if userdel -rf "$user" 2>/dev/null; then
echo " 删除成功"
else
echo " 删除失败"
fi
fi
echo ""
fi
fi
done
echo "操作完成"
配置定时任务 (cron)
将脚本添加到 crontab 定期执行:
# 编辑 crontab crontab -e # 添加以下内容(每天凌晨2点执行) 0 2 * * * /usr/local/bin/cleanup_temp_users.sh # 或每6小时执行一次 0 */6 * * * /usr/local/bin/cleanup_temp_users.sh
使用说明
-
保存脚本:
sudo vi /usr/local/bin/cleanup_temp_users.sh
-
添加执行权限:
sudo chmod +x /usr/local/bin/cleanup_temp_users.sh
-
测试运行:
# 预览模式 sudo ./cleanup_temp_users.sh temp_ 24 true # 实际运行 sudo ./cleanup_temp_users.sh
注意事项
- 备份重要数据:测试前建议先备份
- 使用预览模式:先用
dry-run模式检查会删除哪些用户 - 确保权限:需要使用 root 权限运行
- 日志记录:建议使用方案3的日志版本
- 定义明确规则:确保临时用户的命名规则一致
根据需要选择合适的版本使用,建议先用方案4的预览模式测试效果。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播