温馨提示×

如何自动化Linux清理

小樊
52
2026-09-05 12:43:07
栏目: 智能运维

在 Linux 上做“自动化清理”通常分三步:明确清理对象 → 选择清理方式 → 定时自动化。下面按实战角度给你一套可落地方案。


一、常见可清理对象

  • 系统缓存与日志
    • /var/log/*
    • /var/cache/*
  • 临时文件
    • /tmp
    • /var/tmp
  • 旧内核
  • 包管理器缓存
    • apt(Debian/Ubuntu)
    • yum/dnf(RHEL/CentOS)
  • 用户级垃圾
    • ~/.cache
    • 浏览器缓存、下载临时文件
  • Docker(如适用)
    • 悬空镜像、停止容器、未用卷

二、手动清理命令(先验证再自动化)

1. 系统日志与缓存

# 清理 systemd 日志(保留最近 7 天)
journalctl --vacuum-time=7d

# 清理 apt 缓存
apt-get clean
apt-get autoclean

# 清理 yum/dnf
dnf clean all

2. 临时文件

rm -rf /tmp/*
rm -rf /var/tmp/*

3. 旧内核(Ubuntu 示例)

apt-get autoremove --purge

4. Docker

docker system prune -af

三、写成清理脚本(推荐)

/usr/local/bin/auto-clean.sh

#!/bin/bash
# 自动清理脚本

# 日志
journalctl --vacuum-time=7d

# 包缓存
apt-get clean
apt-get autoclean

# 临时文件
find /tmp -type f -mtime +7 -delete
find /var/tmp -type f -mtime +7 -delete

# Docker
docker system prune -af

echo "$(date) clean done" >> /var/log/auto-clean.log

赋予权限:

chmod +x /usr/local/bin/auto-clean.sh

四、定时自动化(cron / systemd)

方式一:cron(最常用)

crontab -e

每周日凌晨 3 点执行:

0 3 * * 0 /usr/local/bin/auto-clean.sh

方式二:systemd timer(更现代)

/etc/systemd/system/auto-clean.service

[Unit]
Description=Auto Clean

[Service]
Type=oneshot
ExecStart=/usr/local/bin/auto-clean.sh

/etc/systemd/system/auto-clean.timer

[Unit]
Description=Weekly Auto Clean

[Timer]
OnCalendar=weekly
Persistent=true

[Install]
WantedBy=timers.target

启用:

systemctl enable --now auto-clean.timer

五、安全建议(很重要)

  • 不要直接 rm -rf / 或模糊路径
  • find -mtime 控制时间,避免误删
  • 生产环境先测试,再上 cron
  • 可加邮件/日志告警

六、进阶方案(可选)

  • bleachbit(图形/命令行清理)
  • ncdu 查大文件
  • Ansible / SaltStack 批量清理
  • 云环境用 lifecycle 策略(如对象存储)

如果你能告诉我:

  • 用的 发行版(Ubuntu / CentOS / Alpine?)
  • 服务器还是桌面
  • 是否用 Docker / K8s

我可以直接给你一份可直接用的定制脚本

0