Linux命令-quota(显示用户磁盘配额)

Linux命令-quota(显示用户磁盘配额)

快速参考

quota 命令用于查看用户或组的磁盘配额使用情况。磁盘配额是 Linux 文件系统的一项功能,允许系统管理员限制每个用户或组在特定文件系统上可以使用的磁盘空间(块配额)和文件数量(inode 配额)。quota 让你一眼就能看到谁快用完了自己的配额。

磁盘配额是"共享资源的边界守卫"------在多用户服务器(学校机房、开发服务器、HPC 集群)上,配额系统确保了"一个人的大文件不会撑爆所有人的工作空间"。

命令语法

复制代码
quota [选项] [用户|组]

常用选项

选项 功能
-u 显示用户配额(默认)
-g 显示组配额
-v 详细输出(包括没有配额的挂载点)
-s 人类可读格式(KB/MB/GB)
-q 简洁模式(只显示超配额的信息)
-w 同时显示用户和组配额
-f 指定文件系统
--no-wrap 不折行显示

配额概念

复制代码
配额分为两类:

1. 块配额(Block Quota):限制磁盘空间使用量
   - 软限制(soft limit):可临时超过(有宽限期)
   - 硬限制(hard limit):绝对不可超过

2. Inode 配额(Inode Quota):限制文件/目录数量
   - 软限制和硬限制同上

宽限期(grace period):超过软限制后的宽限时间(默认 7 天)

实战示例

1. 基础查询

bash 复制代码
# 查看当前用户的配额
$ quota -s
Disk quotas for user alice (uid 1000):
     Filesystem  space   quota   limit   grace   files   quota   limit   grace
      /dev/sda1   512M    800M   1000M            1250    1500    2000

# 解读:
# space 512M: 当前使用了 512MB 磁盘空间
# quota 800M: 软限制 = 800MB(超过后开始宽限期倒计时)
# limit 1000M: 硬限制 = 1GB(绝对不能超过)
# files 1250: 当前 1250 个文件
# quota 1500: 软限制 1500 个文件
# limit 2000: 硬限制 2000 个文件
# grace: 空白 = 未超过软限制,无宽限期计时

# 查看指定用户的配额(需要 root 或配额管理员权限)
$ sudo quota -s alice
$ sudo quota -s bob

# 查看所有用户配额
$ sudo repquota -s /
*** Report for user quotas on device /dev/sda1
Block grace time: 7days; Inode grace time: 7days
                        Space limits                File limits
User            used    soft    hard  grace    used  soft  hard  grace
----------------------------------------------------------------------
root      --   5.2G      0K      0K          125k     0     0
alice     --   512M    800M   1000M           1250  1500  2000
bob       +-   950M    800M   1000M  2days    2100  1500  2000   none
carol     --   120M    500M    600M            300  1000  1500

# +- 表示 bob 超过了软限制(+),宽限期还有 2 天

2. 详细查询

bash 复制代码
# 详细模式(包括没有配额的文件系统)
$ quota -v -s
Disk quotas for user alice (uid 1000):
     Filesystem  space   quota   limit   grace   files   quota   limit   grace
      /dev/sda1   512M    800M   1000M            1250    1500    2000
      /dev/sdb1      0K      0K      0K               0       0       0
# sdb1 没有配额限制(0 表示无限制)

# 组配额查询
$ quota -g -s
$ quota -g -s developers

# 查看特定文件系统上的配额
$ quota -s -f /dev/sda1

# 简洁模式(只在超配额时显示)
$ quota -q
# 没有配额问题时无输出

# 同时查用户和组
$ quota -w -s

3. repquota:查看所有配额

bash 复制代码
# 查看所有用户配额(管理员工具)
$ sudo repquota -s /
$ sudo repquota -a            # 所有文件系统
$ sudo repquota -s -u /
$ sudo repquota -s -g /

# 查看专门配额项目(project quota)
$ sudo repquota -s -P /data

# 筛选:只显示超过软限制的用户
$ sudo repquota -s / | awk '$5 == "+-" {print $1, $3, $4, $5}'

# 生成配额报告
$ sudo repquota -s / | column -t > /tmp/quota_report.txt

4. 配额配置流程

bash 复制代码
# 步骤1:启用文件系统的配额支持
# 编辑 /etc/fstab
$ cat /etc/fstab | grep sda1
UUID=abc123 / ext4 defaults,usrquota,grpquota 0 1
#                           ^^^^^^^^^^^^^^^^^ 添加此选项

# 步骤2:重新挂载
$ sudo mount -o remount /

# 步骤3:创建配额数据库文件
$ sudo quotacheck -cug /
$ ls -l /aquota.user /aquota.group

# 步骤4:开启配额
$ sudo quotaon /

# 步骤5:设置用户配额
$ sudo setquota -u alice 800000 1000000 1500 2000 /dev/sda1
#                      ^^^^^ ^^^^^^^ ^^^^ ^^^^
#                      软限制 硬限制   文件软限制 文件硬限制
#                      单位: KB(1M=1000K 在 setquota 中)

# 步骤6:验证
$ sudo quota -s alice

# 步骤7:设置宽限期
$ sudo setquota -t 864000 604800 /dev/sda1
#                  块宽限期  inode宽限期(秒)
#                  10天     7天

5. 监控与告警

bash 复制代码
# 检查所有超过 80% 软限制的用户
$ sudo repquota -s / | awk 'NR>5 && $3 ~ /[0-9]/ && $4 ~ /[0-9]/ && $4+0>0 && ($3+0)/($4+0) > 0.8 {print $1, $3, $4}'

# 配额检查脚本
$ cat > /usr/local/bin/quota_check.sh << 'SCRIPT'
#!/bin/bash
THRESHOLD_PERCENT=85
MOUNT="/"

echo "=== Quota Check $(date) ==="
sudo repquota -s "$MOUNT" | awk 'NR>5 && $3 ~ /[0-9]/ && $4 ~ /[0-9]/ && $4+0>0 {
    usage = $3
    limit = $4
    gsub(/[A-Za-z]/, "", usage)  # 移除 M/G/K 后缀
    gsub(/[A-Za-z]/, "", limit)
    pct = (usage+0) * 100 / (limit+0)

    if (pct > '"$THRESHOLD_PERCENT"') {
        printf "WARNING: %s using %d%% of quota (%s/%s)\n", $1, pct, $3, $4
    }
}'
SCRIPT

# Cron 每日检查
# 0 8 * * * /usr/local/bin/quota_check.sh | mail -s "Quota Report" admin@example.com

# 配额快满时自动通知用户
$ sudo repquota -s / | awk 'NR>5 && $3 ~ /[0-9]/ && $4 ~ /[0-9]/ {
    # 简化逻辑...
}'

6. edquota 交互式设置

bash 复制代码
# 对单个用户使用 edquota(交互式编辑)
$ sudo edquota -u alice
# 会打开编辑器,显示类似内容:
Disk quotas for user alice (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda1                    524288     800000    1000000       1250     1500     2000

# 复制配额模板
$ sudo edquota -p alice bob carol
# 将 alice 的配额设置复制给 bob 和 carol

# 设置宽限期
$ sudo edquota -t
# 编辑全局宽限期

# 编辑组配额
$ sudo edquota -g developers

发行版差异

发行版 quota 包名 默认安装 命令路径
Debian/Ubuntu quota /usr/bin/quota
RHEL/CentOS/Fedora quota /usr/bin/quota
Arch Linux quota-tools /usr/bin/quota
Alpine Linux quota-tools /usr/bin/quota
bash 复制代码
# 安装
$ sudo apt install quota          # Debian/Ubuntu
$ sudo dnf install quota          # RHEL/Fedora
$ sudo pacman -S quota-tools      # Arch
$ sudo apk add quota-tools        # Alpine

配额相关命令全家桶

命令 功能
quota 查看配额使用情况
repquota 报告所有用户/组的配额
setquota 命令行设置配额
edquota 交互式编辑配额
quotacheck 检查并创建配额数据库
quotaon 启用配额
quotaoff 禁用配额
quotastats 显示配额统计
warnquota 配额警告通知

总结

磁盘配额是多用户系统的公平使用保障。核心流程:

  1. /etc/fstab 中添加 usrquota,grpquota 选项
  2. quotacheck -cug / 创建配额数据库
  3. quotaon / 启用配额
  4. setquotaedquota 设置限制
  5. quota -srepquota 定期检查

记住关键概念:

  • 软限制(soft):可超过但有宽限期
  • 硬限制(hard):无法超过的绝对上限
  • 宽限期(grace):超过软限制后的缓冲时间
  • 块配额限制空间,inode 配额限制文件数量