长期运行的 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/journal2. 清理 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 docker5. 清理临时与缓存目录 #
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-journal"
TIMESTAMP=$(date +%F.%H-%M-%S)
LOG_BACKUP="$BACKUP_DIR/journal-$TIMESTAMP.tar.gz"
# 检查是否以 root 权限运行
if [[ $EUID -ne 0 ]]; then
echo "请使用 root 权限或 sudo 运行此脚本"
exit 1
fi
echo "正在备份日志..."
mkdir -p "$BACKUP_DIR"
if ! tar --warning=no-file-changed -czf "$LOG_BACKUP" /var/log/journal; then
read -p "日志备份失败,是否继续执行清理操作?(y/n): " confirm
if [[ "$confirm" != "y" ]]; then
echo "操作已取消。"
exit 0
fi
fi
# 1. 清理 APT 缓存
echo "正在清理过期和冗余的软件包..."
apt-get autoremove -y # 删除不再需要的依赖包
apt-get autoclean -y # 删除旧版本的软件安装包
apt-get clean # 删除 /var/cache/apt/archives/ 下的所有包
# 2. 清理日志文件 (保留最近 3 天)
if command -v journalctl >/dev/null; then
echo "正在压缩并清理 systemd 日志..."
journalctl --vacuum-time=3d
fi
# 3. 清理旧的核心文件 (如果有的话)
echo "正在清理旧的内核文件..."
# 注意:这通常由 autoremove 处理,但手动触发更稳妥
dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V \
| sed -n '/'"$(uname -r | sed "s/-.*//")"'/q;p' \
| xargs apt-get -y purge
# 4. 清理临时目录
echo "正在清理 /tmp 目录..."
find /tmp -type f -atime +2 -delete
# 5. 清理用户缓存 (针对所有用户)
echo "正在清理用户级缓存..."
rm -rf /home/*/.cache/*
rm -rf /root/.cache/*
# 6. 清理 Docker (如果安装了 Docker)
if command -v docker >/dev/null; then
echo "检测到 Docker,正在清理未使用的镜像和容器..."
docker system prune -af --volumes
docker builder prune -af
fi
echo "--- 磁盘清理完成! ---"
df -h
使用方式: #
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 工具链执行。