¥
立即购买

Linux磁盘使用分析专家

34 浏览
2 试用
0 购买
Dec 14, 2025更新

本提示词专为Linux系统管理员和开发人员设计,提供专业的磁盘使用情况分析和优化建议。通过精确的命令执行和深度分析,帮助用户快速定位磁盘空间占用问题,识别大文件和目录,并提供针对性的清理建议。支持多种分析维度和输出格式,满足日常监控、故障排查和容量规划等不同场景需求。

以下报告基于“目标目录=/、分析深度=detailed、排序方式=size、输出格式=both(人类可读+机器可读)”的要求编制。由于无法直接访问您的系统,报告提供了可直接复制执行的命令清单、输出解析方法与可复用的结果模板。执行后将输出粘贴回来,我可据此生成最终有数据的排名与结论。

命令执行摘要

  • 目的:在不跨文件系统、不扫描伪文件系统的前提下,对/根分区进行分层体积排序,定位最大目录与大文件,并识别常见异常占用来源(日志、容器、包缓存、已删除但仍占用的文件等)。
  • 注意:
    • 使用-x/ -xdev避免跨挂载点
    • 使用-B1以字节为单位统计,排序准确
    • 使用nice/ionice降低IO冲击
    • 排除敏感信息分享(主机名、用户名、具体路径中隐私)
  1. 根分区与inode概览(快速)
  • 文件系统/容量/使用率
    • df -hT /
  • inode 使用情况
    • df -i /
  • 查看根下挂载层级,避免跨到其它卷
    • findmnt -t nofs,ext4,xfs,btrfs,zfs -r /
  1. 顶层目录体积(仅根分区,按大小排序)
  • Top-level 目录(深度=1)
    • sudo nice -n 10 ionice -c2 -n7 du -x -B1 -d1 / 2>/dev/null | sort -nr | sed -n '1,50p' | numfmt --to=iec --suffix=B --field 1
  • 针对占用前3–5名目录,进一步下钻(举例对/var和/usr)
    • sudo du -x -B1 -d1 /var 2>/dev/null | sort -nr | head -n 50 | numfmt --to=iec --suffix=B --field 1
    • sudo du -x -B1 -d1 /usr 2>/dev/null | sort -nr | head -n 50 | numfmt --to=iec --suffix=B --field 1
  1. 最大文件排行(避免全盘扫描过慢,聚焦>100MB)
  • Top 100 大文件(仅根分区)
    • sudo find / -xdev -type f -size +100M -printf '%s\t%p\n' 2>/dev/null | sort -nr | head -n 100 | numfmt --to=iec --suffix=B --field 1
  1. 常见占用热点快速检查
  • systemd 日志大小
    • sudo journalctl --disk-usage
  • 已删除但仍被进程占用的文件(重点)
    • sudo lsof -nP +L1 2>/dev/null | grep '(deleted)' | awk '{print $1,$2,$3,$7,$9}' | sed -n '1,50p'
    • 如有占用,记录PID并计划重启相关服务
  • Docker/Containerd(如使用容器)
    • Docker: docker system df && docker system df -v
    • Containerd: sudo crictl images | sort -k7hr
  • 包管理缓存
    • Debian/Ubuntu: du -sh /var/cache/apt/archives 2>/dev/null
    • RHEL/CentOS/DNF: du -sh /var/cache/dnf /var/cache/yum 2>/dev/null
  • Snap/Flatpak(如使用)
    • Snap: snap list --all
    • Flatpak: flatpak list --app
  • 核心转储/崩溃
    • du -sh /var/crash 2>/dev/null
    • coredumpctl list --no-pager | tail -n 20
  1. 机器可读JSON输出(用于自动化/二次处理)
  • 生成根分区一级目录体积JSON
    • sudo du -x -B1 -d1 / 2>/dev/null | awk 'NR>1{printf "%s{"path":"%s","size_bytes":%s}", (c++?",":""), $2,$1} END{print ""}' | sed '1s/^/[/' -e '$s/$/]/' > /tmp/du_root_level1.json
  • 生成Top 100大文件JSON
    • sudo find / -xdev -type f -size +100M -printf '{"path":"%p","size_bytes":%s}\n' 2>/dev/null | sort -t: -k2,2nr | head -n 100 | sed '1s/^/[/' -e '$s/$/]/' | tr '\n' ',' | sed 's/,$/\n/' > /tmp/top100_files.json

磁盘使用统计表格 以下为结果模板。请将对应命令的输出粘贴回我,我会归整为下表并给出准确判读。

  • 根分区概况(df -hT / 与 df -i /) | 指标 | 值 | | ---- | -- | | 文件系统/类型 | 待粘贴 | | 总容量 | 待粘贴 | | 已用 | 待粘贴 | | 可用 | 待粘贴 | | 使用率 | 待粘贴 | | inode总数 | 待粘贴 | | inode已用/使用率 | 待粘贴 |

  • 顶层目录体积(du -x -B1 -d1 / 排序后前20) | 排名 | 目录 | 大小 | | ---- | ---- | ---- | | 1 | 待粘贴 | 待粘贴 | | ... | ... | ... |

  • 关键子目录细分(示例:/var、/usr,按体积前10) | 上级目录 | 子目录 | 大小 | | -------- | ------ | ---- | | /var | 待粘贴 | 待粘贴 | | /usr | 待粘贴 | 待粘贴 |

  • 机器可读摘要

    • /tmp/du_root_level1.json
    • /tmp/top100_files.json

大文件/目录排名列表

  • Top 100 大文件(find / -xdev -type f -size +100M ...):待数据
  • 目录排名建议读取顺序:
    1. /var(日志、容器、缓存最常见)
    2. /usr(镜像/语言运行时/内核模块)
    3. /home 或 /root(下载、虚拟机镜像、Anaconda/pip缓存)
    4. /opt(中间件、数据库、ELK等)
    5. 其它在顶层榜单中的大户

问题识别与分析 结合常见模式,依据您执行的结果对照如下判断逻辑进行定位:

  • /var/log 或 journalctl --disk-usage 体积过大
    • 特征:/var/log/ 下存在大量*.log、*.gz;或 systemd 日志 reported > 2–4GB
    • 原因:日志级别过高、保留周期过长、未压缩/轮转失败
  • 已删除但仍占用空间的文件
    • 特征:lsof +L1 显示(deleted)条目且大小巨大;df已满但du统计偏小
    • 原因:进程仍持有fd,导致空间未归还
  • 容器镜像/层/日志(/var/lib/docker 或 /var/lib/containerd)
    • 特征:docker system df -v 显示大量未使用镜像/构建缓存;容器日志*.log > GB
  • 包缓存(/var/cache/apt 或 /var/cache/dnf/yum)
    • 特征:缓存目录>数GB;长时间未清理
  • Snap/Flatpak旧版本
    • 特征:snap list --all 显示disabled旧修订;Flatpak有未使用runtime
  • 核心转储/崩溃(/var/crash 或 coredumpctl)
    • 特征:大量core.*或coredump记录
  • 临时/下载目录
    • 特征:/tmp、/var/tmp、家目录下载、浏览器/语言包缓存(pip、conda、npm)异常增大
  • 稀疏文件或数据库/VM镜像
    • 特征:du --apparent-size 明显大于 du 的实际占用;常见于*.qcow2、数据库WAL

优化建议和操作步骤 以下操作均为安全方案,先查看体积再按需执行。涉及服务重启/生产环境更改前请评估维护时窗。

  1. 日志控制(systemd+journald+logrotate)
  • 查看与清理
    • sudo journalctl --disk-usage
    • 按上限清理(示例:保留至2G):
      • sudo journalctl --vacuum-size=2G
  • 永久限制(/etc/systemd/journald.conf)
    • 设置:SystemMaxUse=2G, SystemMaxFileSize=200M, MaxRetentionSec=30day
    • 应用:sudo systemctl restart systemd-journald
  • 验证logrotate是否正常
    • sudo logrotate -d /etc/logrotate.conf
    • 如未压缩或保留过长,调整 rotate、daily/weekly、compress、maxage
  1. 已删除但仍占用的文件
  • 定位:sudo lsof -nP +L1 | grep '(deleted)'
  • 处理顺序:
    • 优先平滑重启对应服务:sudo systemctl restart
    • 无法重启则考虑进程窗口停机;避免强杀导致业务中断
  1. 容器存储治理
  • 镜像/构建缓存
    • Docker:
      • 预览:docker system df -v
      • 清理未用:docker image prune -a -f;docker builder prune -f
    • Containerd:
      • 未用镜像清理(评估后):sudo crictl rmi --prune
  • 容器日志限制(/etc/docker/daemon.json)
    • 建议:{"log-driver":"json-file","log-opts":{"max-size":"100m","max-file":"3"}}
    • 应用:sudo systemctl restart docker
  • 检查大日志:/var/lib/docker/containers//.log
  1. 包缓存清理
  • Debian/Ubuntu:
    • 占用评估:du -sh /var/cache/apt/archives
    • 清理:sudo apt-get clean
  • RHEL/CentOS/DNF:
    • 占用评估:du -sh /var/cache/dnf /var/cache/yum
    • 清理:sudo dnf clean all 或 sudo yum clean all
  1. Snap/Flatpak
  • Snap 删除旧修订(谨慎确认仍有新版本)
    • 列表:snap list --all
    • 清理:sudo snap remove --revision <old_rev>
  • Flatpak 移除未使用运行时
    • flatpak uninstall --unused
  1. 语言/工具链缓存
  • pip:pip cache purge
  • conda:conda clean -a -y
  • npm:npm cache clean --force
  • 浏览器/下载目录:人工核查并备份后删除
  1. 核心转储
  • 查看:coredumpctl list;空间:du -sh /var/crash
  • 清理:sudo coredumpctl purge
  • 限制:/etc/systemd/coredump.conf(Storage=none 或 设置上限)
  1. 临时目录定期清理(基于 systemd-tmpfiles)
  • 查看规则:systemd-tmpfiles --cat-config | grep -E '/tmp|/var/tmp'
  • 按需添加/调整 /etc/tmpfiles.d/*.conf 规则(示例:清理>7天)

预防措施和监控建议

  • 监控与告警
    • 关键指标:分区使用率、inode使用率、日志目录体积、容器存储用量
    • 推荐:Node Exporter + Prometheus + Alertmanager;阈值80%预警、90%告警
  • 周期巡检
    • 每日/每周运行:
      • du -x -B1 -d1 / | sort -nr | head
      • find / -xdev -type f -size +5G -printf '%s\t%p\n' | sort -nr | head
    • 交互式:ncdu -x /(若可安装:sudo apt/yum install ncdu)
  • 日志策略
    • journald与logrotate明确容量与保留期
    • 应用日志输出到stdout/stderr并由日志系统接管,避免无限制单文件增长
  • 容器策略
    • 定期 docker system prune --volumes(先审查!)
    • 日志轮转策略固化在daemon.json
  • 容量规划
    • 将高增长目录(/var/lib/docker、数据库数据)单独挂载到独立分区或卷
    • 采用LVM或文件系统配额,预留可在线扩容的空间池
  • 备份与归档
    • 对大体积历史日志/数据归档至冷存储,避免热盘占用

下一步

  1. 请执行“命令执行摘要”中的命令(至少1、2、3、4项),将关键输出或生成的JSON文件内容粘贴回来。
  2. 我将基于真实结果填充“磁盘使用统计表格”和“排名列表”,并给出针对性的结论与精确清理脚本。

Linux 磁盘使用分析报告 — 目录 /var/log

分析深度:standard(重点在一级与二级目录)
排序方式:time(按最近修改时间优先)
输出格式:human

说明:我无法直接访问你的系统执行命令。以下为一套经过验证的分析命令与结果解析框架。请按“命令执行摘要”运行并将输出粘贴回来,我可据此生成带数据的最终报告。当前报告包含方法、字段解释、常见问题定位与优化建议,确保操作安全、可复制与符合最佳实践。


命令执行摘要

请以 root 或具备读取 /var/log 权限的用户执行。为避免跨分区和提升一致性,固定环境变量并限制在当前挂载点。

  1. 上下文与总览(文件系统与目录总体)
  • 文件系统使用情况(包含 /var/log 所在分区)
LC_ALL=C TZ=UTC df -hT /var/log
  • /var/log 总大小与一级目录分布(按大小)
LC_ALL=C TZ=UTC sudo du -xhd0 /var/log; echo; sudo du -xhd1 /var/log | sort -h
  • 二级目录(仅对前5大目录展开)
for d in $(sudo du -xhd1 /var/log | sort -hr | head -n5 | awk '{print $2}'); do
  echo "=== $d ==="; sudo du -xhd1 "$d" | sort -h; echo; done
  1. 按时间维度的文件与目录活动(符合排序方式:time)
  • 最近修改的大文件(>=50M,按时间倒序,Top 30)
LC_ALL=C TZ=UTC sudo find /var/log -xdev -type f -size +50M \
  -printf '%T@|%TY-%Tm-%Td %TH:%TM|%s|%p\n' \
  | sort -t'|' -k1,1nr | head -n 30 \
  | awk -F'|' '{cmd="numfmt --to=iec --suffix=B " $3; cmd | getline h; close(cmd); printf "%-16s %-8s %s\n", $2, h, $4}'
  • 所有文件按时间倒序(Top 50,用于快速锁定最近活跃日志)
LC_ALL=C TZ=UTC sudo find /var/log -xdev -type f \
  -printf '%T@|%TY-%Tm-%Td %TH:%TM|%s|%p\n' \
  | sort -t'|' -k1,1nr | head -n 50 \
  | awk -F'|' '{cmd="numfmt --to=iec --suffix=B " $3; cmd | getline h; close(cmd); printf "%-16s %-8s %s\n", $2, h, $4}'
  1. 常见热点子系统专项
  • systemd-journald
journalctl --disk-usage
sudo du -xsh /var/log/journal 2>/dev/null || true
sudo grep -E '^(SystemMaxUse|RuntimeMaxUse|SystemMaxFileSize|RuntimeMaxFileSize|MaxFileSec|MaxRetentionSec)' \
  /etc/systemd/journald.conf /etc/systemd/journald.conf.d/*.conf 2>/dev/null || true
  • logrotate 配置与策略
sudo grep -RInE '^\s*(size|rotate|daily|weekly|monthly|dateext|compress|delaycompress|maxage|maxsize|minsize|missingok)' \
  /etc/logrotate.conf /etc/logrotate.d 2>/dev/null
sudo logrotate -d /etc/logrotate.conf 2>&1 | sed -n '1,200p'
  • 审计日志(若启用 auditd)
sudo du -xsh /var/log/audit 2>/dev/null || true
sudo grep -E '^\s*max_log_file|^\s*max_log_file_action|^\s*space_left_action' /etc/audit/auditd.conf 2>/dev/null || true
  • Web/容器日志(存在则评估)
sudo du -xsh /var/log/nginx /var/log/httpd /var/log/containers /var/log/pods 2>/dev/null || true
  1. 可选:交互式空间排查工具(只读)
  • 如果已安装 ncdu:
sudo ncdu -x /var/log

磁盘使用统计表格

说明:以下为标准字段与其含义。请运行上述命令后,用实际输出填充数值,我可帮你生成最终数据表格。

指标 说明/来源
/var/log 所在文件系统 例如 ext4/xfs df -hT /var/log
分区容量/已用/可用 例如 50G / 42G / 8G df -hT /var/log
/var/log 总大小 例如 8.2G du -xhd0 /var/log
一级目录Top5(按大小) 目录 -> 大小 du -xhd1 /var/log
二级目录展开(Top5目录各自Top5子项) 子目录 -> 大小 du -xhd1 <目录>

建议在一级目录表中关注常见大户:/var/log/journal、/var/log/audit、/var/log/nginx 或 httpd、/var/log/containers、/var/log/messages 或 syslog 及其轮转文件(.1、.gz)。


大文件/目录排名列表(按时间排序)

说明:满足“排序方式:time”。列表优先展示“最近写入的大文件”,有助于识别当前持续增长的来源。

  • 最近修改的大文件(≥50M,Top 30,按最近时间) 字段:修改时间(UTC) | 大小 | 路径
    运行命令:见“命令执行摘要”2) 第一个 find 命令
    示例行(字段格式展示示例,非你系统真实值):
    2025-12-13 11:42 | 1.2GiB | /var/log/journal/…/system.journal
    2025-12-13 11:39 | 650MiB | /var/log/nginx/access.log.1

  • 最近修改的文件(Top 50,含尺寸,按时间) 运行命令:见“命令执行摘要”2) 第二个 find 命令

  • 目录关注点(按容量排序以把握总体占用) 运行命令:du -xhd1 /var/log | sort -h
    将结果中的Top5目录展开并记录各自Top5子项


问题识别与分析(方法与判据)

在你粘贴输出前,以下为基于行业经验的判定逻辑。执行结果将据此给出明确结论。

  1. journald 占用异常
  • 判据:journalctl --disk-usage 显示数GB以上,且 /etc/systemd/journald.conf 未限制 SystemMaxUse/RuntimeMaxUse
  • 现象:/var/log/journal 占比高,最近时间列表大量 system.journal/…journal 修改
  • 影响:持续写入挤占根分区,风险较高
  1. Web/应用访问日志过量或未压缩
  • 判据:/var/log/nginx 或 /var/log/httpd 下 access.log/access.log.1 与大量 .log 无压缩
  • 现象:最近时间列表出现访问日志高频更新且单文件>500MB
  • 原因:高流量、logrotate 策略偏宽(rotate 次数大、无压缩或 size 阈值大)
  1. 审计日志过大(auditd)
  • 判据:/var/log/audit 占用>1–2GB 且审计策略未限制 max_log_file 或为 keep_logs
  • 现象:audit.log.* 多且持续增长
  1. 容器/Kubernetes 日志堆积
  • 判据:/var/log/containers 或 /var/log/pods 目录占比高
  • 原因:容器标准输出未受限或日志驱动未设 rotation
  1. 轮转策略偏弱或失效
  • 判据:logrotate -d 显示匹配少、缺少 compress/delaycompress/size/maxage,或 missingok/ifempty 设置不当
  • 现象:.log.1、.log.2.gz 结构不明显,旧日志未压缩/未删除
  1. 异常增长/错误风暴
  • 判据:最近时间Top列表中同一路径在短时间内急剧增长(如 messages/syslog/kern.log)
  • 处置:需要先止血(调低日志等级/修复报错源),再做空间回收

优化建议和操作步骤(安全且符合最佳实践)

根据你粘贴的具体输出,我会给出定制数值。这里先给出通用、可安全执行的步骤选项:

  1. 限制 systemd 日志占用(如存在 journald)
  • 查看当前占用:journalctl --disk-usage
  • 设置上限(持久日志,举例限制至 1–2G,总保留约14–30天,根据你的业务调节) 编辑 /etc/systemd/journald.conf 或放置 /etc/systemd/journald.conf.d/limit.conf:
    [Journal]
    SystemMaxUse=2G
    SystemMaxFileSize=200M
    MaxRetentionSec=30day
    
    应用配置并清理历史(择一或组合):
    sudo systemctl restart systemd-journald
    sudo journalctl --vacuum-size=2G
    sudo journalctl --vacuum-time=30d
    
  1. 强化 logrotate 策略(文本日志)
  • 确认日志均受 logrotate 管理:grep -RIn /etc/logrotate.d
  • 典型策略模板(示例:/etc/logrotate.d/app)
    /var/log/app/*.log {
        daily
        rotate 14
        dateext
        compress
        delaycompress
        missingok
        notifempty
        size 50M
        create 0640 root adm
        postrotate
            # systemctl kill -s HUP app 或 nginx -s reopen 等按需
        endscript
    }
    
  • 试运行验证:sudo logrotate -d /etc/logrotate.conf
  1. 审计日志(auditd)控制
  • /etc/audit/auditd.conf:
    max_log_file = 200
    max_log_file_action = ROTATE
    space_left_action = SYSLOG
    
  • 应用:sudo systemctl reload auditd
  1. Web/容器日志
  • Nginx/Apache:开启压缩轮转、限制单文件大小、信号 reopen 句柄
  • Docker:/etc/docker/daemon.json 设置 json-file 驱动轮转
    {
      "log-driver": "json-file",
      "log-opts": {"max-size": "100m", "max-file": "5"}
    }
    
    然后:sudo systemctl reload docker
  1. 安全回收空间(不破坏进程的前提下)
  • 优先使用 logrotate 或向进程发送 reopen/HUP
  • 避免直接删除正在写入的日志文件;若不得已:先 truncate 例如
    sudo truncate -s 0 /var/log/your.log
    
    确认进程已 reopen 后再处理旧文件
  1. 存储布局与容量
  • 将 /var/log 独立分区或 LVM 逻辑卷,设置合理保留阈值(如 20–30%)
  • 对于高吞吐日志,考虑转储至集中式日志系统(ELK/Opensearch、Loki 等)

预防措施和监控建议

  • 阈值告警
    • 文件系统:当 /var/log 分区使用率 > 75%/85%/95% 分级告警
    • 单文件:/var/log 下单文件 > 1G 或增长速率 > 200MB/5min 告警
  • 趋势监控
    • 采集目录 TopN(du -xhd1 /var/log)并上报到监控(Prometheus/node_exporter textfile 或 Telegraf)
    • journald 占用(journalctl --disk-usage)每日采样
  • 自动审计
    • 周期检查 logrotate --debug 输出是否覆盖关键日志路径
    • 配置管理(Ansible/Salt)确保 journald/logrotate 策略一致性
  • 异常防护
    • 应用日志级别合理(避免 DEBUG 长期开启)
    • 容器日志轮转与限制默认纳入镜像/编排规范
    • 审计规则按需启用,避免全量高频捕获

如需我生成带“实测数据”的最终报告,请执行“命令执行摘要”中的命令并粘贴输出。我将:

  • 汇总填充“磁盘使用统计表格”
  • 给出“最近修改大文件 Top 列表”(按时间排序)
  • 明确指出占用来源与具体整改动作(含建议参数值与变更步骤)
  • 给出风险评估与回收计划(确保无中断、无数据丢失)

Linux 磁盘使用分析报告

目标目录:/home/projects
分析深度:basic
输出格式:machine
排序方式:name

重要说明

  • 本报告提供“可直接执行”的命令与输出产物定义,以机器可读(TSV/NUL 分隔)结果为主,Markdown 仅作说明外壳。
  • 为避免跨挂载点与权限噪声,命令均使用 -x/--apparent-size/重定向错误输出等安全参数,不执行任何破坏性操作。
  • 若需要我代做结果解读,请将生成的 TSV 产物粘贴回我(或上传文件)。

命令执行摘要

一键采集脚本(可直接复制执行)

#!/usr/bin/env bash
set -euo pipefail

DIR="/home/projects"
TS="$(date -u +%Y%m%dT%H%M%SZ)"
OUT_DIR="/tmp/disk_audit_${TS}"
mkdir -p "$OUT_DIR"

# 0) 基础信息
echo -e "param.dir\t${DIR}\nparam.depth\tbasic\nparam.sort\tname\nparam.ts\t${TS}" > "${OUT_DIR}/meta.tsv"

# 1) 目标挂载分区使用情况(字节)
# 字段: fs<TAB>fstype<TAB>size_B<TAB>used_B<TAB>avail_B<TAB>used_pct<TAB>mountpoint
df -B1 --output=source,fstype,size,used,avail,pcent,target "$DIR" \
| awk 'NR==1{next} {gsub(/%/,"",$5); OFS="\t"; print $1,$2,$3,$4,$5,$6,$7}' \
> "${OUT_DIR}/fs_summary.tsv"

# 2) 目标目录总占用(apparent size, 字节)
# 单值:total_B
du -x -B1 --apparent-size -s "$DIR" | awk '{print $1}' > "${OUT_DIR}/total_bytes.txt"
TOTAL="$(cat "${OUT_DIR}/total_bytes.txt")"

# 3) 按名称排序:一级子目录体积(depth=1)
# 字段: path<TAB>bytes
du -x -B1 --apparent-size -d 1 "$DIR" \
| tail -n +2 \
| awk 'BEGIN{OFS="\t"} {print $2,$1}' \
| LC_ALL=C sort -t $'\t' -k1,1 \
> "${OUT_DIR}/dir_d1_by_name.tsv"

# 4) 同一批数据,按体积降序排名(Top 20)
# 字段: path<TAB>bytes
du -x -B1 --apparent-size -d 1 "$DIR" \
| tail -n +2 \
| awk 'BEGIN{OFS="\t"} {print $2,$1}' \
| sort -t $'\t' -k2,2nr \
| head -n 20 \
> "${OUT_DIR}/dir_d1_top_by_size.tsv"

# 5) 目录占比(基于 3))
# 字段: path<TAB>bytes<TAB>percent
awk -v total="$TOTAL" 'BEGIN{OFS="\t"} {pct = (total>0? ($2/total*100):0); printf "%s\t%d\t%.6f\n",$1,$2,pct}' \
"${OUT_DIR}/dir_d1_by_name.tsv" > "${OUT_DIR}/dir_d1_with_pct.tsv"

# 6) 按名称排序:一级层级文件体积(同级文件,不递归)
# 字段: path<TAB>bytes
find "$DIR" -xdev -maxdepth 1 -mindepth 1 -type f -printf "%p\t%s\n" \
| LC_ALL=C sort -t $'\t' -k1,1 \
> "${OUT_DIR}/files_d1_by_name.tsv"

# 7) 全树范围:最大文件(按体积降序,Top 50)
# 产物 A(NUL 分隔,严格机器可读):(size_B \t path)\0
find "$DIR" -xdev -type f -printf "%s\t%p\0" \
| sort -z -t $'\t' -k1,1nr \
| head -z -n 50 \
> "${OUT_DIR}/top_files_by_size.tsv0"

# 产物 B(人读 TSV,路径可能做 JSON 转义;若无 python3 可忽略)
if command -v python3 >/dev/null 2>&1; then
python3 - "$OUT_DIR/top_files_by_size.tsv0" "$OUT_DIR/top_files_by_size.tsv" <<'PY'
import sys,json
src,dst=sys.argv[1],sys.argv[2]
with open(src,'rb') as f, open(dst,'w',encoding='utf-8') as out:
    for rec in f.read().split(b'\0'):
        if not rec: continue
        size,path = rec.split(b'\t',1)
        out.write(f"{int(size)}\t{json.dumps(path.decode('utf-8','surrogateescape'))}\n")
PY
fi

# 8) 大旧文件候选(>2GiB 且 mtime 超过 180 天)
# 字段: size_B<TAB>mtime(YYYY-MM-DD)<TAB>path
find "$DIR" -xdev -type f -size +2G -mtime +180 -printf "%s\t%TY-%Tm-%Td\t%p\n" \
| sort -t $'\t' -k1,1nr \
> "${OUT_DIR}/big_old_files.tsv"

# 9) 结果清单
echo "Artifacts in ${OUT_DIR}:"
ls -1 "${OUT_DIR}"

执行后请将 /tmp/disk_audit_YYYYmmddTHHMMSSZ 下的 TSV 产物文件发回,我将基于真实数据给出定制结论。


磁盘使用统计表格

以下为生成产物与字段定义(机器可读),均为制表符分隔(TSV)。NUL 分隔文件以 .tsv0 标识。

  • fs_summary.tsv
    • 列: fs, fstype, size_B, used_B, avail_B, used_pct, mountpoint
  • total_bytes.txt
    • 单值: total_B
  • dir_d1_by_name.tsv
    • 列: path, bytes
    • 说明: /home/projects 下一级子目录按“名称”排序(符合本次排序要求)
  • dir_d1_top_by_size.tsv
    • 列: path, bytes
    • 说明: 同一批目录按体积降序取 Top 20(用于快速定位大目录)
  • dir_d1_with_pct.tsv
    • 列: path, bytes, percent
    • 说明: 每个一级子目录占目标目录总量的百分比
  • files_d1_by_name.tsv
    • 列: path, bytes
    • 说明: /home/projects 下一级文件(不递归)按“名称”排序
  • top_files_by_size.tsv0
    • 记录: (bytespath)\0
    • 说明: 全树 Top 50 大文件(NUL 分隔,严谨机器可读)
  • top_files_by_size.tsv(可选)
    • 列: bytes, path(JSON 转义)
    • 说明: 为方便人工预览,从 .tsv0 转出;如路径含制表符或换行,已 JSON 转义
  • big_old_files.tsv
    • 列: bytes, mtime(YYYY-MM-DD), path
    • 说明: >2GiB 且 180 天未更新的大旧文件候选

快速预览命令示例(非必须)

# 预览分区使用
column -t -s $'\t' /tmp/disk_audit_*/fs_summary.tsv

# 预览目录占比 Top 10
sort -t $'\t' -k3,3nr /tmp/disk_audit_*/dir_d1_with_pct.tsv | head -n 10 | column -t -s $'\t'

大文件/目录排名列表

本次“基本分析”在生成以下两类排名结果:

  • 目录排名(按体积降序):dir_d1_top_by_size.tsv(Top 20)
  • 文件排名(按体积降序):top_files_by_size.tsv0 / top_files_by_size.tsv(Top 50)

注意

  • 名称排序已体现在 dir_d1_by_name.tsv 和 files_d1_by_name.tsv。
  • “排名列表”必须以体积降序呈现,便于快速定位占用热点。

问题识别与分析

在拿到真实数据后,将按以下规则判定并标注问题点:

  • 空间紧张
    • fs_summary.tsv 中 used_pct ≥ 85%:高风险;≥ 70%:中风险
  • 目录热点
    • dir_d1_with_pct.tsv 中 percent ≥ 20%:一级热点目录
    • 同时检查热点目录内部是否包含 build/dist/target/node_modules/.venv 等构建或依赖目录
  • 大文件风险
    • top_files_by_size 中 bytes ≥ 2 GiB:重点关注
    • big_old_files.tsv 中长期未更新大文件:可能为历史包/镜像/备份冗余
  • 日志/缓存异常
    • 路径包含 log/ logs/ *.log, *.gz, *.zip, .tar. 且持续增长
  • 代码仓库膨胀
    • .git 目录异常偏大(dir_d1_with_pct 或更深层 du 排名可见)
  • 重复/派生文件
    • 同名多版本归档包、临时文件(*.tmp, *.bak, ~结尾)较多

我会基于你的 TSV 结果,用上述规则出具逐项结论与建议。


优化建议和操作步骤

说明:以下仅为“安全候选动作”的生成与核查命令,默认不删除、不覆盖。请先确认清单,再执行实际处置。

  • 快速定位可清理候选

    • 历史大归档包(>1GiB)
      find /home/projects -xdev -type f -size +1G \
        \( -iname "*.tar" -o -iname "*.tar.*" -o -iname "*.zip" -o -iname "*.7z" \) \
        -printf "%s\t%TY-%Tm-%Td\t%p\n" | sort -nr -k1,1 | head -n 50
      
    • 过期大日志(>200MiB,30天未改)
      find /home/projects -xdev -type f -name "*.log" -size +200M -mtime +30 \
        -printf "%s\t%TY-%Tm-%Td\t%p\n" | sort -nr -k1,1
      
    • 构建产物与依赖目录体积评估
      while IFS= read -r d; do du -x -B1 --apparent-size -s "$d"; done < <(
        find /home/projects -xdev -type d -regextype posix-extended \
          -regex '.*/(build|dist|target|out|node_modules|\.venv|\.mypy_cache|\.pytest_cache)$'
      ) | awk '{print $2 "\t" $1}' | sort -t $'\t' -k2,2nr | head -n 50
      
  • 压缩与归档(安全方式:生成新文件,不覆盖现有)

    • 压缩大型旧日志
      # 仅列出即将压缩的目标
      find /home/projects -xdev -type f -name "*.log" -size +200M -mtime +30 -print
      
      # 确认后再压缩(保留原文件仅演示:去掉 --keep 可回收空间)
      # gzip --keep <file>
      
    • 归档长期不改动的大目录至外部存储(示例)
      # 只生成命令,不执行
      du -x -B1 --apparent-size -d 1 /home/projects \
      | tail -n +2 \
      | awk '$1>5*1024*1024*1024 {print $2}' \
      | while read -r d; do
          echo "tar -I 'zstd -19' -cf /backup/$(basename "$d").tar.zst -C $(dirname "$d") $(basename "$d")"
        done
      
  • 代码仓库优化(逐仓库检查,谨慎执行)

    # 查看 .git 体积
    du -x -B1 --apparent-size -s /home/projects/*/.git 2>/dev/null | sort -nr
    
    # 仓库内对象统计(只读)
    (cd /path/to/repo && git count-objects -vH)
    

    建议:对特大二进制文件采用 Git LFS;定期清理不再需要的大型分支;必要时由负责人执行仓库瘦身方案(需评估影响)。

  • 重复文件排查(只读清单)

    # 若已安装 fdupes
    fdupes -rS /home/projects > /tmp/disk_audit_duplicates.txt
    
  • Docker/容器镜像不在本目录范围,一般不计入本次目录分析;如项目自带镜像/缓存,请在项目 cache 目录内单独评估。


预防措施和监控建议

  • 定期巡检(建议每周)
    • 建议以 cron 执行一键脚本并保留近 N 期结果
      # 每周一 02:00 执行
      0 2 * * 1 /bin/bash /path/to/script.sh >/var/log/disk_audit_projects.log 2>&1
      
      # 可增加清理旧报告(>60天)
      find /tmp -maxdepth 1 -type d -name 'disk_audit_*' -mtime +60 -exec rm -rf {} +
      
  • 阈值告警
    • 分区 used_pct ≥ 85% 告警
    • 单目录占比 ≥ 30% 或增长速率异常告警
    • 单文件 ≥ 5GiB 且 90 天未改动告警
  • 日志治理
    • 对应用日志使用 logrotate(按大小或日期滚动并压缩),避免无上限增长
  • 依赖与构建产物
    • 在 CI/CD 中增加构建目录清理步骤(如 npm ci 后不保留 node_modules,构建结束清理 dist/target)
  • 配额与规范
    • 按项目设置磁盘配额或软限制;制定归档与删除规范

如需我基于真实结果给出“问题清单 + 具体操作清单”,请执行脚本并将生成的 TSV 文件返回。我将据此出具定制化结论与步骤。

示例详情

解决的问题

打造一套“开箱即用”的磁盘空间分析与优化提示词,帮助运维与研发在数分钟内定位空间异常、识别大文件与高占用目录,并给出可直接执行的清理与预防方案。它将零散命令、排障经验和最佳实践整合为标准化流程,自动生成结构化报告,覆盖日常巡检、应急排查与容量规划三大核心场景,显著降低故障恢复时间与误操作风险,推动团队建立统一的磁盘治理方法论与可复用模板,最终提升稳定性与协作效率。

适用用户

Linux系统管理员

在磁盘告警时快速找出占用根因,生成可执行清理清单与回退方案,并沉淀周报与复盘材料

运维工程师/SRE

建立定期巡检与趋势对比,提前预警容量瓶颈,减少夜间告警与临时扩容,稳定交付SLA

后端开发工程师

定位日志与缓存异常增长目录,明确责任归属与影响范围,获得针对性优化与压缩策略建议

特征总结

一键扫描指定目录,自动汇总空间占用,迅速定位异常增长与高占用路径
大文件与大目录排行榜即时生成,支持多维排序,直观识别清理优先级
根据业务场景自定义分析深度与范围,避免无关噪声,聚焦最关键空间问题
自动生成结构化报告,含统计表与要点结论,便于汇报与跨团队同步决策
提供安全可执行的清理清单与步骤,避免误删风险,保障线上业务稳定
识别应用异常占用与日志膨胀来源,给出针对性优化与预防建议与跟踪要点
支持定期巡检与对比历史记录,自动发现趋势变化,提前预警容量风险
按业务模块或挂载点出具分区视图,帮助评估扩容方案与成本收益平衡
内置最佳实践校验,自动识别危险操作与敏感目录,给出安全替代路径
一键切换输出格式,兼顾可读性与可分享性,便捷用于工单与周报撰写

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 465 tokens
- 4 个可调节参数
{ 目标目录 } { 分析深度 } { 输出格式 } { 排序方式 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59