生成部门存储使用报表需关联用户归属、配额设置与实际用量:先启用组配额并验证aquota.group,再用repquota -gv导出配额用量,结合du与id按组统计实际占用,最后合并输出对比报表。

要生成部门存储使用报表,核心不是“统计目录大小”,而是把用户归属、配额设置、实际用量三者关联起来——因为部门是按组(group)组织的,而Linux配额支持组级限制和用量查询。
确认部门对应用户组并启用组配额
部门在系统中通常体现为一个用户组(比如 dev-team、marketing)。必须确保该组已启用 grpquota,且配额数据库已包含组信息:
- 检查
/etc/fstab中对应分区(如/home)是否含grpquota选项 - 运行
sudo quotacheck -cugm /home(-g表示扫描组,-m强制重建) - 确认
/home/aquota.group文件存在且非空:sudo ls -lh /home/aquota.group
用 repquota 生成原始组用量报表
repquota 是唯一能批量导出所有组当前用量的命令。加 -g 和 -v 可输出带单位、含软硬限的清晰视图:
-
sudo repquota -gv /home→ 显示所有组的块用量、inode用量、软硬限制 - 导出为文本便于后续处理:
sudo repquota -gv /home > dept_usage_report_$(date +%Y%m%d).txt - 若只需特定部门(如
finance),可用grep筛选:sudo repquota -gv /home | grep '^finance'
补充:按部门汇总实际磁盘占用(非配额视角)
配额反映“被允许用多少”,但报表常需“实际占了多少”。这时要用 du 按组统计物理空间:
- 列出所有属于某组的用户主目录:
getent group finance | cut -d: -f4 | tr ',' '\n' - 对每个用户目录统计大小并求和:
for u in $(getent group finance | cut -d: -f4 | tr ',' '\n'); do du -sh /home/$u 2>/dev/null; done | awk '{sum += $1} END {print "finance total: " sum "K"}' - 更稳妥方式(兼容单位):
du -sh /home/* 2>/dev/null | awk -F'[[:space:]/]+' '{user=$NF; cmd="id -gn " user " 2>/dev/null"; cmd | getline group; if(group=="finance") print $1, user}' | awk '{sum+=$1} END {print "finance actual: " sum "KB"}
整合成可读报表(简易 Shell 脚本示例)
把配额用量和实际占用合并,就能看出“谁超限”“谁闲置”。下面是一个可直接运行的片段:
(保存为dept-report.sh,chmod +x 后执行)#!/bin/bash
echo "=== 部门存储使用报表 $(date) ==="
echo
echo "【配额视角】(来自 repquota)"
sudo repquota -gv /home | grep -E '^(dev|marketing|finance|hr)' | awk '{printf "%-12s %8s/%-8s %8s/%-8s\n", $1, $3, $4, $5, $6}' | column -t
echo
echo "【实际占用】(来自 du + id)"
for dept in dev marketing finance hr; do
users=$(getent group "$dept" | cut -d: -f4 | tr ',' '\n')
total=0
for u in $users; do
size_kb=$(du -sk "/home/$u" 2>/dev/null | awk '{print $1}')
total=$((total + size_kb))
done
printf "%-12s %8.1f MB\n" "$dept" $(echo "$total / 1024" | bc -l)
done | column -t











