×
¥
查看详情
🔥 会员专享 文生文 其它

Linux磁盘使用分析专家

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

🎯 可自定义参数(4个)

目标目录
需要分析磁盘使用情况的目标目录路径
分析深度
分析深度级别
输出格式
输出结果的格式类型
排序方式
结果排序的方式

🎨 效果示例

以下报告基于“目标目录=/、分析深度=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 文件返回。我将据此出具定制化结论与步骤。

示例详情

📖 如何使用

30秒出活:复制 → 粘贴 → 搞定
与其花几十分钟和AI聊天、试错,不如直接复制这些经过千人验证的模板,修改几个 {{变量}} 就能立刻获得专业级输出。省下来的时间,足够你轻松享受两杯咖啡!
加载中...
💬 不会填参数?让 AI 反过来问你
不确定变量该填什么?一键转为对话模式,AI 会像资深顾问一样逐步引导你,问几个问题就能自动生成完美匹配你需求的定制结果。零门槛,开口就行。
转为对话模式
🚀 告别复制粘贴,Chat 里直接调用
无需切换,输入 / 唤醒 8000+ 专家级提示词。 插件将全站提示词库深度集成于 Chat 输入框。基于当前对话语境,系统智能推荐最契合的 Prompt 并自动完成参数化,让海量资源触手可及,从此彻底告别"手动搬运"。
即将推出
🔌 接口一调,提示词自己会进化
手动跑一次还行,跑一百次呢?通过 API 接口动态注入变量,接入批量评价引擎,让程序自动迭代出更高质量的提示词方案。Prompt 会自己进化,你只管收结果。
发布 API
🤖 一键变成你的专属 Agent 应用
不想每次都配参数?把这条提示词直接发布成独立 Agent,内嵌图片生成、参数优化等工具,分享链接就能用。给团队或客户一个"开箱即用"的完整方案。
创建 Agent

✅ 特性总结

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

🎯 解决的问题

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

🕒 版本历史

当前版本
v2.1 2024-01-15
优化输出结构,增强情节连贯性
  • ✨ 新增章节节奏控制参数
  • 🔧 优化人物关系描述逻辑
  • 📝 改进主题深化引导语
  • 🎯 增强情节转折点设计
v2.0 2023-12-20
重构提示词架构,提升生成质量
  • 🚀 全新的提示词结构设计
  • 📊 增加输出格式化选项
  • 💡 优化角色塑造引导
v1.5 2023-11-10
修复已知问题,提升稳定性
  • 🐛 修复长文本处理bug
  • ⚡ 提升响应速度
v1.0 2023-10-01
首次发布
  • 🎉 初始版本上线
COMING SOON
版本历史追踪,即将启航
记录每一次提示词的进化与升级,敬请期待。

💬 用户评价

4.8
⭐⭐⭐⭐⭐
基于 28 条评价
5星
85%
4星
12%
3星
3%
👤
电商运营 - 张先生
⭐⭐⭐⭐⭐ 2025-01-15
双十一用这个提示词生成了20多张海报,效果非常好!点击率提升了35%,节省了大量设计时间。参数调整很灵活,能快速适配不同节日。
效果好 节省时间
👤
品牌设计师 - 李女士
⭐⭐⭐⭐⭐ 2025-01-10
作为设计师,这个提示词帮我快速生成创意方向,大大提升了工作效率。生成的海报氛围感很强,稍作调整就能直接使用。
创意好 专业
COMING SOON
用户评价与反馈系统,即将上线
倾听真实反馈,在这里留下您的使用心得,敬请期待。
加载中...
📋
提示词复制
在当前页面填写参数后直接复制: