清理 Ubuntu 系统垃圾:释放磁盘空间的常用方法
在长期使用 Ubuntu 服务器的过程中,系统日志、apt 缓存、旧内核、用户目录缓存等都会逐渐占用大量磁盘空间。尤其是云服务器系统盘较小的情况下,很容易出现根分区 / 空间不足的问题。
本文整理一套常用、安全的 Ubuntu 系统清理方法,适合用于服务器日常维护。
1. 先查看根目录占用情况
在清理之前,建议先确认到底是哪个目录占用了空间。
sudo du -xh / --max-depth=1 2>/dev/null | sort -h
示例输出:
510M /var
786M /opt
6.7G /usr
12G /
这个命令用于查看根目录 / 下各一级目录的磁盘占用情况。
参数说明:
sudo 使用管理员权限查看,否则部分目录可能没有权限
du disk usage,用于查看磁盘占用
-x 只统计当前文件系统,不跨到其他挂载盘
-h human readable,以 K/M/G 等易读单位显示
/ 从根目录开始统计
--max-depth=1 只查看一级目录,不继续展开子目录
2>/dev/null 忽略权限不足等错误提示
sort -h 按容量大小排序
这个命令适合用来判断是 /var、/usr、/home、/tmp 还是其他目录占用了空间。
2. 查看用户目录占用情况
如果发现 /home 占用较大,可以继续查看具体用户目录。
例如查看 /home/opc:
du -xh /home/opc --max-depth=1 2>/dev/null | sort -h
这个命令用于查看 /home/opc 用户目录下各一级目录的占用情况。
重点关注这些目录:
~/.local 用户级程序、容器数据、pipx、Podman rootless 数据等
~/.cache 用户缓存
~/.ollama Ollama 模型文件
~/Downloads 下载目录
如果使用过 Podman、Open WebUI、Ollama、Whisper、Python 环境等,用户目录下可能会有较大的隐藏目录。
3. 清理 systemd 日志
systemd 的日志通常保存在:
/var/log/journal
如果服务器运行时间较长,日志可能占用几个 GB。例如:
/var/log/journal 占用 3.8G
可以用下面命令查看日志占用:
sudo journalctl --disk-usage
推荐将日志限制到 200MB:
sudo journalctl --vacuum-size=200M
执行后,systemd 会自动删除旧日志,只保留最近的部分日志。
如果想长期限制日志大小,可以编辑配置文件:
sudo nano /etc/systemd/journald.conf
加入或修改:
SystemMaxUse=200M
然后重启日志服务:
sudo systemctl restart systemd-journald
4. 清理 apt 缓存和软件包列表
Ubuntu 使用 apt 安装软件时,会缓存下载过的软件包和软件源列表。时间久了可能占用几百 MB 甚至更多空间。
例如:
apt 缓存和列表大约占用 435M
可以执行:
sudo apt clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt update
说明:
sudo apt clean
清理 apt 下载的软件包缓存。
sudo rm -rf /var/lib/apt/lists/*
删除本地软件源列表缓存。
sudo apt update
重新拉取最新的软件源列表。
这个操作通常比较安全,但执行 rm -rf /var/lib/apt/lists/* 后,一定要重新执行 sudo apt update,否则后续安装软件可能会提示找不到软件包信息。
5. 清理旧内核
Ubuntu 更新内核后,旧内核通常不会自动完全删除。旧内核会占用 /boot 和 /usr 空间。
先查看当前正在运行的内核:
uname -r
例如当前运行:
6.8.0-1057-oracle
再查看已安装的内核包:
dpkg -l | grep -E 'linux-image|linux-headers|linux-modules'
如果确认当前运行的是 6.8.0-1057-oracle,可以保留一个较新的旧版本作为回退,例如保留:
6.8.0-1054-oracle
然后清理更老的内核,例如 5.15.0-1045-oracle:
sudo apt purge linux-headers-5.15.0-1045-oracle linux-image-5.15.0-1045-oracle linux-modules-5.15.0-1045-oracle linux-modules-extra-5.15.0-1045-oracle linux-oracle-headers-5.15.0-1045
sudo update-grub
注意:
不要删除当前正在运行的内核。一定要先用下面命令确认:
uname -r
建议至少保留当前内核和一个较新的旧内核,方便系统异常时回退。
6. 清理临时目录
临时目录也可能占用大量空间,尤其是编译、下载、解压、安装软件后。
可以查看:
sudo du -sh /tmp /var/tmp 2>/dev/null
确认没有重要临时文件后,可以清理:
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
对于服务器来说,清理 /tmp 通常比较安全,但如果当前有正在运行的软件依赖临时文件,建议先确认服务状态,或者在重启后清理。
7. 清理用户缓存
用户目录下的缓存常见于:
~/.cache
查看占用:
du -sh ~/.cache 2>/dev/null
如果很大,可以清理:
rm -rf ~/.cache/*
如果使用过 Python,也可以清理 pip 缓存:
pip cache purge 2>/dev/null
如果使用过 npm,可以清理 npm 缓存:
npm cache clean --force 2>/dev/null
8. 查找大文件
如果还是不知道空间被什么占用,可以查找根分区中的大文件。
查找超过 500MB 的文件:
sudo find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null
如果想查找超过 100MB 的文件:
sudo find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null
参数说明:
find / 从根目录开始查找
-xdev 不跨文件系统,避免扫描挂载盘
-type f 只查找普通文件
-size +500M 查找大于 500MB 的文件
-exec ls -lh 以易读格式显示文件大小和路径
这个命令适合定位异常大的日志、镜像、模型、压缩包、数据库文件等。
9. 如果使用 Docker 或 Podman
如果系统中使用过 Docker,可以查看占用:
docker system df
清理不用的容器、镜像和构建缓存:
docker system prune -a
如果确认不用的 volume 也可以删除:
docker volume prune
注意:docker volume prune 可能删除数据库、应用数据等持久化数据,执行前需要确认。
如果使用的是 rootless Podman,数据通常在:
~/.local/share/containers
查看占用:
du -sh ~/.local/share/containers 2>/dev/null
如果确认所有 Podman 容器都不要了,可以执行:
podman system reset
或者手动删除:
rm -rf ~/.local/share/containers
手动删除前需要确认不再需要其中的容器、镜像和 volume 数据。
10. 推荐清理顺序
日常维护时,可以按照下面顺序执行。
第一步:查看根目录占用
sudo du -xh / --max-depth=1 2>/dev/null | sort -h
第二步:查看用户目录占用
du -xh /home/opc --max-depth=1 2>/dev/null | sort -h
如果不是 opc 用户,把路径替换为自己的用户目录,例如:
du -xh /home/ubuntu --max-depth=1 2>/dev/null | sort -h
第三步:清理 systemd 日志
sudo journalctl --disk-usage
sudo journalctl --vacuum-size=200M
第四步:清理 apt 缓存
sudo apt clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt update
第五步:清理旧内核
先确认当前内核:
uname -r
再查看已安装内核:
dpkg -l | grep -E 'linux-image|linux-headers|linux-modules'
确认不需要后,再用 sudo apt purge 删除旧内核,并更新 grub:
sudo update-grub
第六步:查找大文件
sudo find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null
11. 一组常用清理命令汇总
下面是一组相对常用的清理命令:
# 查看根目录占用
sudo du -xh / --max-depth=1 2>/dev/null | sort -h
# 查看用户目录占用
du -xh /home/opc --max-depth=1 2>/dev/null | sort -h
# 查看 systemd 日志占用
sudo journalctl --disk-usage
# 清理 systemd 日志到 200MB
sudo journalctl --vacuum-size=200M
# 清理 apt 缓存
sudo apt clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt update
# 清理临时目录
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 清理用户缓存
rm -rf ~/.cache/*
# 查找大于 500MB 的文件
sudo find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null
12. 注意事项
清理系统空间时,建议注意以下几点:
- 不要直接删除
/usr、/lib、/bin、/etc等系统目录。 - 不要删除当前正在运行的内核。
- 删除旧内核前,先执行
uname -r确认当前内核版本。 - 清理 Docker 或 Podman volume 前,确认里面没有数据库、配置文件、应用数据。
- 清理 apt lists 后,需要重新执行
sudo apt update。 - 对不确定的目录,先用
du -sh查看,再决定是否删除。
结论
Ubuntu 系统空间不足时,最常见的大头通常是:
systemd 日志
apt 缓存
旧内核
/tmp 临时文件
用户目录缓存
Docker / Podman 容器数据
AI 模型和镜像文件
推荐先使用:
sudo du -xh / --max-depth=1 2>/dev/null | sort -h
找到大目录,再逐级往下分析。不要盲目删除系统目录。
一般情况下,清理 systemd 日志、apt 缓存、旧内核和无用容器后,可以释放数 GB 到十几 GB 空间,让系统恢复到比较健康的状态。