Linux 系统磁盘空间不足是导致服务宕机、性能下降或任务失败的常见原因,高效清理空间的核心在于精准定位占用源、清理冗余软件包与缓存、管理日志文件以及容器镜像回收,而非盲目删除文件,通过系统化的清理策略,可以在保障系统稳定性的前提下,迅速释放数百兆甚至数吉字节的存储空间。

精准诊断磁盘占用
在执行清理操作前,首要任务是明确“谁占用了空间”,盲目删除文件可能导致系统服务异常,因此必须依赖数据进行分析。
使用 df 命令查看整体使用情况:首先使用 df -hT 查看文件系统的挂载点和使用率,该命令能清晰显示根分区(/)、/home、/var 等关键分区的剩余空间,重点关注使用率超过 80% 的分区,这通常是性能瓶颈的所在。
使用 du 命令定位大目录:df 告诉我们哪个分区满了,du 则告诉我们具体是哪个目录占用了空间,推荐使用 du -h --max-depth=1 /(或指定具体目录)来递归查看当前目录下各子文件夹的大小,为了提高效率,可以结合 sort 命令,如 du -sh * | sort -hr,这将直接按大小从高到低排序,让占用空间最大的“罪魁祸首”一目了然。
引入可视化工具 ncdu:对于不习惯纯命令行的用户,ncdu 是一个极其高效的工具,它提供了交互式的界面,支持通过键盘上下键浏览目录,并实时显示各目录的占用比例,能极大缩短定位大文件的时间。
清理包管理器缓存与冗余软件
无论是基于 Debian/Ubuntu 的系统,还是基于 CentOS/RHEL 的系统,软件包管理器都会在本地缓存大量的安装包,这些文件在软件安装后通常不再需要,但长期占用大量空间。
Debian/Ubuntu 系统清理:使用 apt-get 命令系列。apt-get autoclean 会删除那些已经无法下载的旧版本软件包;apt-get clean 会彻底删除 /var/cache/apt/archives/ 目录下所有已下载的 deb 包,最重要的是 apt-get autoremove,该命令会自动删除为了满足依赖而安装但现在不再需要的软件包(即“孤立的依赖包”),定期执行这三条命令,通常能释放几百兆空间。
CentOS/RHEL/Fedora 系统清理:使用 yum 或 dnf,执行 yum clean all 可以清除缓存目录(/var/cache/yum)下的 RPM 包和头文件,对于旧版本的内核,系统通常会保留多个版本以备回退,可以使用 package-cleanup --oldkernels --count=2(需安装 yum-utils)来仅保留最新的两个内核版本,删除旧内核往往能释放显著的空间,因为内核文件体积较大。

系统日志与老旧内核清理
系统日志、临时文件和老旧内核是长期运行的服务器上常见的“隐形杀手”。
Systemd 日志轮转:现代 Linux 发行版普遍使用 systemd,其日志由 journald 管理,默认存储在 /var/log/journal,随着时间推移,这些日志可能膨胀到数 GB,可以使用 journalctl --disk-usage 查看当前日志占用大小,执行 journalctl --vacuum-time=3d 可以删除 3 天前的日志,或者使用 journalctl --vacuum-size=500M 将日志总大小限制在 500MB 以内,这是控制日志增长最安全、最推荐的方法。
清理临时文件:/tmp 目录用于存放临时文件,大多数系统会在重启时自动清理,但对于长期不重启的服务器,手动清理是必要的,可以使用 rm -rf /tmp/* 清理临时目录,但在操作前需确认没有关键服务正在使用其中的临时文件,以免造成服务中断。
容器环境专项清理
在运行 Docker 或 Kubernetes 的环境中,未使用的镜像、停止的容器和未使用的数据卷是空间占用的主要来源。
Docker 系统级清理:Docker 提供了便捷的清理命令 docker system prune,该命令会删除所有停止的容器、所有未被任何容器使用的网络、所有悬空镜像,若要释放更多空间,可以使用 docker system prune -a,这会进一步删除所有未被使用的镜像(不仅仅是悬空镜像),对于数据卷,可以使用 docker volume prune 来清理未使用的卷。注意:在生产环境中执行清理命令前,务必确认哪些镜像和卷是真正不再需要的,避免误删导致业务数据丢失。
预防与自动化维护
清理空间不仅是亡羊补牢,更应建立长效机制。
配置 Logrotate:确保 /etc/logrotate.conf 及 /etc/logrotate.d/ 下的配置正确,Logrotate 可以自动压缩、轮转和删除旧日志文件,防止单个日志文件无限增长,建议配置日志保留周期(如 weekly 或 daily)和保留个数(如 rotate 4)。

设置定时任务:将上述清理命令编写成 Shell 脚本,并设置 Cron 定时任务(如每周凌晨执行),可以编写一个脚本自动清理 apt 缓存和 journal 日志,通过 crontab -e 添加 0 3 * * 0 /path/to/clean_script.sh,实现自动化运维,减少人工干预。
相关问答模块
Q1:删除了文件后,使用 df 命令查看磁盘空间没有减少,这是什么原因?
A: 这种情况通常是因为该文件仍被某个进程占用(文件句柄未被释放),在 Linux 中,当文件被删除但进程仍在写入或读取时,磁盘空间并不会立即释放,直到该进程结束或关闭文件句柄,可以使用 lsof +L1 命令查找已删除但仍被占用的文件,找到对应的 PID 后,通过 kill -9 PID 重启该服务来释放空间。
Q2:清理 /var/lib/docker 目录下的文件有哪些风险?
A: /var/lib/docker 目录包含了 Docker 的所有镜像、容器、网络和数据卷,手动直接 rm 删除该目录下的文件极其危险,极易导致 Docker 管理混乱,甚至丢失容器数据。严禁手动删除该目录下的文件,应始终使用 docker system prune、docker image rm 或 docker container rm 等标准 Docker 命令进行清理,以确保元数据的一致性和数据的安全性。
如果您在清理过程中遇到任何疑问,或者有更高效的清理脚本分享,欢迎在评论区留言交流,让我们一起构建更高效的 Linux 运维环境。















