Gemini 3 Pro 实现的安全小鸡储存空间清理脚本
#!/bin/bash# 定义颜色输出RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'NC='\033[0m' # No Colorecho -e "${YELLOW}======================================================${NC}"echo -e "${YELLOW} Linux 服务器安全磁盘清理脚本 (Safe Mode)${NC}"echo -e "${YELLOW}======================================================${NC}"# 1. 检查 Root 权限if [ "$EUID" -ne 0 ]; then echo -e "${RED}[Error] 请使用 root 权限运行此脚本 (sudo bash clean_disk.sh)${NC}" exit 1fi# 显示当前磁盘使用情况echo -e "${GREEN}[INFO] 当前磁盘使用情况:${NC}"df -h / | grep /# 2. 清理包管理器缓存 (apt/yum/dnf)echo -e "\n${YELLOW}[Step 1] 清理软件包缓存...${NC}"if command -v apt-get &> /dev/null; then echo "检测到 Debian/Ubuntu 系统..." apt-get clean -y apt-get autoclean -y # 删除不再需要的依赖包 apt-get autoremove -yelif command -v yum &> /dev/null; then echo "检测到 CentOS/RHEL 系统..." yum clean all rm -rf /var/cache/yumelif command -v dnf &> /dev/null; then echo "检测到 Fedora/CentOS 8+ 系统..." dnf clean all rm -rf /var/cache/dnffiecho -e "${GREEN}软件包缓存清理完成。${NC}"# 3. 清理系统日志 (Systemd Journal)echo -e "\n${YELLOW}[Step 2] 清理 systemd 日志 (保留最近 100M)...${NC}"if command -v journalctl &> /dev/null; then # 只保留 100MB 的日志,或者保留最近 1 天的日志 journalctl --vacuum-size=100M journalctl --vacuum-time=1delse echo "未检测到 systemd journal,跳过。"fi# 4. 安全截断旧的大型日志文件 (/var/log)# 注意:这里使用 truncate -s 0 而不是 rm,避免进程占用文件句柄导致空间不释放echo -e "\n${YELLOW}[Step 3] 归档/截断 /var/log 下的旧日志...${NC}"find /var/log -type f -name "*.gz" -delete # 删除已经压缩归档的旧日志find /var/log -type f -name "*.1" -delete # 删除旧的轮转日志# 查找 /var/log 下大于 50M 的 .log 文件并清空内容find /var/log -type f -name "*.log" -size +50M -exec truncate -s 0 {} \;echo -e "${GREEN}日志清理完成。${NC}"# 5. 清理 Docker 垃圾 (如果存在)if command -v docker &> /dev/null; then echo -e "\n${YELLOW}[Step 4] 检测到 Docker,清理未使用的镜像和缓存...${NC}" # 清理悬空镜像 (Dangling images) 和构建缓存,不删除正在运行的容器 docker system prune -felse echo -e "\n${YELLOW}[Step 4] 未检测到 Docker,跳过。${NC}"fi# 6. 清理临时文件夹 /tmpecho -e "\n${YELLOW}[Step 5] 清理 /tmp 下超过 7 天的文件...${NC}"find /tmp -type f -atime +7 -deleteecho -e "${GREEN}临时文件清理完成。${NC}"# 7. 关键步骤:查找全盘大文件echo -e "\n${YELLOW}[Step 6] 正在扫描全盘最大的 15 个文件 (请人工确认是否可删除)...${NC}"echo -e "${RED}注意:以下文件请手动确认后再删除!${NC}"# 排除 /proc, /sys, /run 等虚拟目录find / -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/run/*" -not -path "/boot/*" -printf "%s %p\n" 2>/dev/null | sort -nr | head -n 15 | awk '{print int($1/1048576) "MB\t" $2}'echo -e "\n${YELLOW}======================================================${NC}"echo -e "${GREEN}清理脚本执行结束。当前磁盘使用情况:${NC}"df -h / | grep /echo -e "${YELLOW}如果空间依然不足,请根据 [Step 6] 的列表手动删除大文件。${NC}"
评论 (0)