centos目录大小查看与清理

文章目录

  • [1. 快速定位大文件和目录](#1. 快速定位大文件和目录)
  • [2. 重点检查目标(基于您的环境)](#2. 重点检查目标(基于您的环境))
    • [A. Docker 相关](#A. Docker 相关)
    • [B. Maven 本地仓库](#B. Maven 本地仓库)
    • [C. Jenkins 工作空间和构建记录](#C. Jenkins 工作空间和构建记录)
    • [D. Node.js 和 Vue 相关](#D. Node.js 和 Vue 相关)
    • [E. 系统日志文件](#E. 系统日志文件)
  • [3. 清理方案](#3. 清理方案)

1. 快速定位大文件和目录

首先,使用以下命令找出占用空间最大的目录(从根目录开始,但可能需要一些时间):

bash 复制代码
sudo du -sh /* 2>/dev/null | sort -hr | head -n 20

这个命令会显示根目录下前20个最大的项目。然后您可以逐级深入排查,例如如果发现 /var 很大,就继续检查 /var:

bash 复制代码
sudo du -sh /var/* 2>/dev/null | sort -hr | head -n 20

更高效的工具

如果系统有 ncdu 工具(推荐安装),可以更直观地分析:

bash 复制代码
# 安装 ncdu
sudo yum install ncdu

# 扫描根目录
sudo ncdu / --exclude /proc --exclude /sys

2. 重点检查目标(基于您的环境)

根据您安装的软件,以下目录最可能是"罪魁祸首":

A. Docker 相关

Docker 是常见的磁盘空间杀手,尤其是镜像和容器存储。

bash 复制代码
# 查看 Docker 占用空间
sudo du -sh /var/lib/docker/

# 详细查看 Docker 各组成部分大小
sudo docker system df

B. Maven 本地仓库

Maven 的本地仓库会缓存所有下载的依赖包,很容易变得非常大。

bash 复制代码
# 通常位于用户主目录下,Jenkins 用户可能是 /var/lib/jenkins
sudo du -sh ~/.m2/repository/
# 或者
sudo du -sh /var/lib/jenkins/.m2/repository/

C. Jenkins 工作空间和构建记录

Jenkins 会保留每次构建的工作空间和构建记录。

bash 复制代码
# 检查 Jenkins 工作空间
sudo du -sh /var/lib/jenkins/workspace/

# 检查 Jenkins 构建记录
sudo du -sh /var/lib/jenkins/jobs/*/builds/

D. Node.js 和 Vue 相关

Vue 项目的 node_modules 目录非常庞大,构建过程中也可能产生大量缓存。

bash 复制代码
# 查找所有 node_modules 目录
sudo find / -name "node_modules" -type d -exec du -sh {} \; 2>/dev/null | sort -hr | head -n 10

# 检查 npm 缓存
sudo du -sh ~/.npm/

E. 系统日志文件

系统和服务日志可能会占用大量空间。

bash 复制代码
# 检查日志目录大小
sudo du -sh /var/log/

# 检查最大的日志文件
sudo find /var/log -type f -name "*.log" -exec du -h {} \; 2>/dev/null | sort -hr | head -n 10

3. 清理方案

清理 Docker

第 1 步:查询空间情况

bash 复制代码
# 这个命令非常有用,它会详细列出镜像、容器、卷、缓存等的大小
sudo docker system df

第 2 步:安全清理(推荐)

这些命令会安全地删除未被使用 的资源,不会影响正在运行的容器和其依赖的镜像。

1.删除所有已停止的容器、未被使用的网络和 dangling 镜像(悬空镜像,即未打标签的镜像) :

bash 复制代码
sudo docker system prune

这是一个最基本的清理命令,非常安全。
2.删除所有未被使用的镜像(而不仅仅是 dangling 镜像) :

bash 复制代码
sudo docker image prune -a

注意 :这会删除所有没有被任何容器引用的镜像(包括停止的容器)。如果你有多个项目,有些镜像虽然当前没运行,但以后可能会用,需要谨慎。系统会交互式地让你确认。

第 3 步:治本之策(预防措施)

清理之后,需要建立习惯和机制防止空间再次被快速占满。

  • 在 Docker Compose 中运行后自动清理 :

使用

docker-compose down --rmi all

docker-compose down -v

来在停止服务的同时删除相关镜像或卷。

  • 设置 Docker 日志轮转(非常有效) :

Docker 容器日志是另一个"空间杀手"。默认情况下,日志文件会无限增长。通过修改 /etc/docker/daemon.json 文件来限制日志大小和数量:

json 复制代码
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
  • 修改后需要重启 Docker 服务:
bash 复制代码
sudo systemctl restart docker

注意 :这只会影响新创建 的容器。对于已存在的容器,你需要重建它们。

  • 定期清理脚本 :

可以创建一个定时任务(Cron Job),例如每周凌晨执行一次安全清理:

bash 复制代码
# 编辑 cron 任务
sudo crontab -e
# 添加一行
0 3 * * 0 /usr/bin/docker system prune -f
  • 迁移 Docker 数据根目录 :

如果 / 根分区实在太小,可以考虑将 Docker 的默认存储目录 /var/lib/docker

迁移到一个更大的磁盘分区上。这是一个相对复杂的操作,需要停止 Docker 服务后移动整个目录并建立软链接。

3.清理所有内容(包括构建缓存) :

bash 复制代码
# 这个命令最彻底,会删除所有已停止的容器、所有未被任何容器引用的网络、所有 dangling 和未被引用的镜像、以及构建缓存。
sudo docker system prune -a --volumes

警告 :--volumes 会删除未被使用的命名卷 ,请确保你知道哪些卷是重要的(如数据库数据)。匿名卷通常会被自动清理。

清理 Maven 仓库

bash 复制代码
# 删除失败的下载和临时文件
find ~/.m2/repository -name "*.lastUpdated" -exec rm -f {} \;

# 清理旧的依赖包(谨慎操作,可能会破坏项目构建)
# 可以手动删除一些明确不再使用的依赖目录

清理 Jenkins

  1. 在 Jenkins 界面中配置"丢弃旧的构建"
  2. 对于不需要的 jobs,可以直接删除其 workspace
bash 复制代码
# 清理 Jenkins 工作空间(确保相关任务已停止)
sudo rm -rf /var/lib/jenkins/workspace/<job-name>/*

清理 npm 缓存

bash 复制代码
# 清理 npm 缓存
npm cache clean --force

# 或者直接删除缓存目录
rm -rf ~/.npm/_cacache

清理系统日志

bash 复制代码
# 清空日志文件(而不是删除,避免影响正在运行的服务)
sudo truncate -s 0 /var/log/some-large-log.log

# 使用 logrotate 管理日志
sudo logrotate -f /etc/logrotate.conf

# 删除旧的日志文件
sudo find /var/log -name "*.log.*" -type f -mtime +7 -delete
sudo find /var/log -name "*.gz" -type f -mtime +7 -delete

清理系统包缓存

bash 复制代码
# 清理 yum 缓存
sudo yum clean all
sudo rm -rf /var/cache/yum
相关推荐
希赛网12 小时前
华为HCIE证书多久续一次费?费用多少?
运维·网络工程师·华为认证·数通·hcie续证
KingRumn12 小时前
Linux ARP老化机制/探测机制/ip neigh使用
linux·网络·tcp/ip
学生董格13 小时前
[嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_用Qt编译linux-Opencv库 & 测试
linux·qt·opencv
我要打打代码13 小时前
wpf触发器
java·linux·wpf
m0_5713728213 小时前
关于嵌入式学习——嵌入式硬件2
linux·驱动开发·嵌入式硬件·学习
Cold_Rain0213 小时前
Linux 用户的 Windows 改造之旅
linux·运维·windows
☆璇14 小时前
【Linux】Linux下基本指令
linux·运维·服务器
望获linux14 小时前
【Linux基础知识系列:第一百一十六篇】使用mt进行磁带驱动管理
java·linux·运维·服务器·数据库·windows·嵌入式软件
老实巴交的麻匪14 小时前
(五)学习、实践、理解 CI/CD 与 DevOps:GitHub Actions 快速介绍
运维·云原生·自动化运维
focksorCr14 小时前
C 内存对齐踩坑记录
linux·c语言·gnu