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 |
配额警告通知 |
总结
磁盘配额是多用户系统的公平使用保障。核心流程:
- 在
/etc/fstab中添加usrquota,grpquota选项 quotacheck -cug /创建配额数据库quotaon /启用配额setquota或edquota设置限制quota -s或repquota定期检查
记住关键概念:
- 软限制(soft):可超过但有宽限期
- 硬限制(hard):无法超过的绝对上限
- 宽限期(grace):超过软限制后的缓冲时间
- 块配额限制空间,inode 配额限制文件数量