debian

Debian如何定期回收系统

小樊
43
2025-12-04 13:54:40
栏目: 智能运维

Debian定期回收系统的实用方案

一 核心清理项与推荐频率

清理项 推荐命令 建议频率 说明
APT缓存与无用包 sudo apt-get clean && sudo apt-get autoclean && sudo apt-get autoremove --purge 每周 清理下载的包缓存与不再需要的依赖,–purge同时移除配置文件
systemd日志 sudo journalctl --vacuum-time=7d 或 --vacuum-size=100M 每周 限制系统日志体积,避免无限增长
临时文件 find /tmp -mindepth 1 -mtime +7 -delete 与 find /var/tmp -mindepth 1 -mtime +7 -delete 每日 删除超过7天未访问的临时文件,先确保无业务占用
旧内核 先 uname -r 确认当前内核;再用 apt-get purge linux-image-<旧版本> linux-headers-<旧版本> 每次内核升级后 建议保留当前与上一个版本,避免回滚失败
大文件巡检 du -sh /* 或 ncdu / 每月 发现异常大文件或目录,人工确认后清理
Snap旧修订 见下方脚本 每月 清理已禁用快照的旧修订,释放空间
SSD TRIM fstrim -v / 每周 通知SSD回收未使用块,提升寿命与写入性能

以上命令与频率来自Debian常见清理实践与自动化方案,适用于大多数服务器与桌面环境。

二 自动化方式一 Cron

# 每天 02:00 清理 APT
0 2 * * * /usr/bin/apt-get -qq clean && /usr/bin/apt-get -qq autoclean && /usr/bin/apt-get -qq autoremove --purge

# 每天 03:00 清理 systemd 日志(保留7天或100MB)
0 3 * * * /usr/bin/journalctl --vacuum-time=7d --quiet || /usr/bin/journalctl --vacuum-size=100M --quiet

# 每天 04:00 清理临时文件(/tmp 与 /var/tmp,7天未访问)
0 4 * * * /usr/bin/find /tmp -mindepth 1 -mtime +7 -delete
0 4 * * * /usr/bin/find /var/tmp -mindepth 1 -mtime +7 -delete

# 每周日 01:00 执行大文件巡检(生成报告,不自动删除)
0 1 * * 0 /usr/bin/ncdu -x / > /var/log/ncdu-$(date +\%F).txt 2>/dev/null

# 每周六 02:30 对根分区执行 TRIM
30 2 * * 6 /usr/sbin/fstrim -v / >> /var/log/fstrim.log 2>&1

三 自动化方式二 systemd 定时器

[Unit]
Description=Periodic system cleanup
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/apt-get -qq clean
ExecStart=/usr/bin/apt-get -qq autoclean
ExecStart=/usr/bin/apt-get -qq autoremove --purge
ExecStart=/usr/bin/journalctl --vacuum-time=7d --quiet
ExecStart=/usr/bin/find /tmp -mindepth 1 -mtime +7 -delete
ExecStart=/usr/bin/find /var/tmp -mindepth 1 -mtime +7 -delete
[Unit]
Description=Run cleanup daily at 02:00
Requires=cleanup.service

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now cleanup.timer
sudo systemctl list-timers cleanup.timer

四 关键注意事项

#!/usr/bin/env bash
LANG=C snap list --all | awk '/disabled/{print $1, $3}' | \
  while read snapname revision; do
    sudo snap remove "$snapname" --revision="$revision"
  done

0
看了该问题的人还看了