长期运行的 Debian 系统中,系统日志、包管理器缓存、内核遗留文件和容器数据会逐渐积累,占据大量磁盘空间。Debian 清理指南汇总了关键的空间清理策略,附带自动化脚本,适用于日常维护与周期性执行。
1. 清理系统日志 #
查看日志占用空间: #
Bash
journalctl --disk-usage
清理旧日志: #
保留最近 7 天的日志:
Bash
sudo journalctl --vacuum-time=7d
限制总占用为 100MB:
Bash
sudo journalctl --vacuum-size=100M
配置日志占用限制(可选): #
编辑 /etc/systemd/journald.conf
:
Plaintext
[Journal]
SystemMaxUse=100M
SystemKeepFree=500M
MaxFileSec=1month
应用配置:
Bash
sudo systemctl restart systemd-journald
⚠️ 注意:不要直接删除 /var/log/journal/
目录,可通过压缩方式备份旧日志:
Bash
sudo tar --warning=no-file-changed -czf ~/journal-backup-$(date +%F-%H:%M:%S).tar.gz /var/log/journal
2. 清理 APT 包管理器缓存 #
Bash
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove -y
适用于清理缓存安装包、过期软件与不再使用的依赖项。
3. 清理旧内核与源码 #
删除旧内核(保留当前版本): #
Bash
uname -r # 查看当前内核
dpkg --list | grep linux-image
确认无用版本后:
Bash
sudo apt-get remove linux-image-<旧版本>
清理旧的内核源码(/usr/src
): #
Bash
CURRENT_KERNEL=$(uname -r)
for dir in /usr/src/*; do
if [[ "$dir" != "/usr/src/linux-$CURRENT_KERNEL" ]]; then
sudo rm -rf "$dir"
fi
done
⚠️ 注意:请勿删除当前内核或 /usr/lib
、/usr/bin
等核心路径。
4. Docker 清理 #
查看空间使用: #
Bash
docker system df
清理无用资源: #
Bash
docker system prune -a --volumes
docker builder prune -a
⚠️ 注意:docker system prune -a --volumes
会删除所有未使用资源,确认无重要数据。
日志限制(可选): #
编辑 /etc/docker/daemon.json
:
Bash
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
重启服务:
Bash
sudo systemctl restart docker
5. 清理临时与缓存目录 #
Bash
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
sudo rm -rf /root/.cache/*
sudo rm -rf /root/.npm/_cacache
sudo rm -rf /root/.cargo/registry
建议定期执行,防止构建工具和脚本生成的缓存持续积累。
6. 查找大文件(仅展示) #
Bash
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k 5 -rh | head -n 10
适合辅助检查空间占用异常位置,避免误删。
7. 自动清理脚本 #
建议使用以下脚本完成一键清理操作。保存为 debian-clean-all.sh
:
Bash
#!/bin/bash
# 全面清理 Debian 系统空间占用
set -e
BACKUP_DIR="/backup"
TIMESTAMP=$(date +%F-%H:%M:%S)
LOG_BACKUP="$BACKUP_DIR/journal-backup-$TIMESTAMP.tar.gz"
sudo mkdir -p "$BACKUP_DIR"
if ! sudo tar --warning=no-file-changed -czf "$LOG_BACKUP" /var/log/journal; then
echo "日志备份失败,终止。"
exit 1
fi
read -p "是否继续执行清理操作?(y/n): " confirm
if [[ "$confirm" != "y" ]]; then
echo "操作已取消。"
exit 0
fi
sudo journalctl --vacuum-time=7d
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove -y
CURRENT_KERNEL=$(uname -r)
for dir in /usr/src/*; do
if [[ "$dir" != "/usr/src/linux-$CURRENT_KERNEL" ]]; then
sudo rm -rf "$dir"
fi
done
sudo docker system prune -a --volumes -f
sudo docker builder prune -a -f
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
sudo rm -rf /root/.cache/*
sudo rm -rf /root/.npm/_cacache
sudo rm -rf /root/.cargo/registry
echo
echo "清理完成。磁盘使用情况如下:"
df -h /
journalctl --disk-usage
docker system df
使用方式: #
Bash
sudo chmod +x debian-clean-all.sh
sudo ./debian-clean-all.sh
设置定期执行(可选): #
使用 crontab -e
添加:
Bash
0 4 1 * * /path/to/debian-clean-all.sh
表示每月 1 日凌晨 4 点自动运行。
8. 注意事项 #
- 清理前请备份系统关键日志与数据;
- 不要删除当前内核或核心路径下文件;
docker system prune -a --volumes
会删除所有未使用镜像与卷,请慎用;- 脚本默认使用
sudo
,请以具备权限的用户运行; - 清理后可通过
df -h
、journalctl --disk-usage
等命令验证效果。
Debian 清理指南适用于稳定运行的 Debian 服务器或开发环境,旨在通过周期性维护确保磁盘空间健康。如需更复杂的自动化机制,可集成 systemd timer 或 DevOps 工具链执行。