Linux edquota 命令 - 磁盘配额编辑工具

edquota 命令(Edit Quota)是Linux系统中用于编辑用户或组磁盘配额的命令行工具。它允许系统管理员设置和修改用户或组在文件系统上的磁盘空间和文件数量限制,是配额管理系统的重要组成部分。

什么是磁盘配额?

磁盘配额是一种限制用户或组在文件系统上可使用的磁盘空间和文件数量的机制。它包含三种类型的限制:

  • 软限制(Soft Limit):用户可以超过的临时限制,但必须在宽限期内减少使用量
  • 硬限制(Hard Limit):用户绝对不能超过的绝对限制
  • 时间宽限(Grace Period):允许用户超过软限制的时间期限

语法格式

edquota [选项] [用户名|组名]...

如果没有指定用户名或组名,edquota会尝试编辑当前用户的配额。

常用选项

选项 说明
-u 编辑用户配额(默认选项)
-g 编辑组配额
-p 原型用户 将指定用户的配额设置复制给其他用户
-t 编辑时间宽限设置
-F 格式 指定配额格式(vfsv0, vfsv1, rpc, xfs)
-f 文件系统 指定要编辑配额的文件系统

准备工作:启用磁盘配额

# 1. 检查文件系统是否支持配额
cat /proc/filesystems | grep quota

# 2. 安装配额工具(如果未安装)
sudo apt install quota        # Debian/Ubuntu
sudo yum install quota        # CentOS/RHEL

# 3. 修改/etc/fstab文件,在需要启用配额的文件系统添加挂载选项
# 例如,为/dev/sda1分区启用用户和组配额:
# /dev/sda1  /home  ext4  defaults,usrquota,grpquota  0  2

# 4. 重新挂载文件系统或重启
sudo mount -o remount /home

# 5. 创建配额数据库文件
sudo quotacheck -cugm /home

# 6. 启用配额
sudo quotaon -av

基本示例

示例1:编辑用户配额

# 编辑用户john的磁盘配额
sudo edquota -u john

执行命令后,系统会打开默认文本编辑器(通常是vi或nano),显示类似以下内容:

Disk quotas for user john (uid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/sda1                      1024       50000      100000         5        50       100

各列含义:

  • blocks:当前已使用的磁盘块数(1块通常为1KB)
  • soft:磁盘空间的软限制(单位:KB)
  • hard:磁盘空间的硬限制(单位:KB)
  • inodes:当前已使用的文件数量
  • soft:文件数量的软限制
  • hard:文件数量的硬限制

示例2:编辑组配额

# 编辑developers组的磁盘配额
sudo edquota -g developers

组配额与用户配额的格式相同,但限制应用于整个组的所有成员。

示例3:批量复制配额设置

# 将用户john的配额设置复制给其他用户
sudo edquota -p john user1 user2 user3

# 将用户john的配额设置复制给一组用户(使用用户列表文件)
sudo edquota -p john `cat /tmp/userlist.txt`

这是批量设置用户配额的便捷方法,特别适用于创建多个具有相同配额限制的用户。

示例4:编辑时间宽限设置

# 编辑时间宽限设置
sudo edquota -t

执行命令后,编辑器会显示类似以下内容:

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
  /dev/sda1                     7days                  7days

可以修改宽限时间,例如将7days改为14days。

高级用法

示例5:为特定文件系统设置配额

# 只为/home文件系统编辑用户配额
sudo edquota -f /home -u john

# 编辑多个文件系统的配额
sudo edquota -u john  # 如果用户在不同文件系统有配额,会显示所有文件系统

示例6:使用非交互式方式设置配额

# 使用setquota命令非交互式设置配额(无需编辑器)
# 语法:setquota -u 用户名 块软限制 块硬限制 inode软限制 inode硬限制 文件系统
sudo setquota -u john 50000 100000 1000 2000 /home

# 设置组配额
sudo setquota -g developers 1000000 2000000 10000 20000 /home

示例7:查看配额使用情况

# 查看用户配额使用情况
sudo quota -u john
# 或
sudo repquota -u john

# 查看组配额使用情况
sudo quota -g developers

# 查看所有用户的配额使用情况
sudo repquota -a

# 查看特定文件系统的配额使用情况
sudo repquota /home

实际应用场景

场景1:为Web服务器用户设置配额
# 为Web服务器上的虚拟主机用户设置配额
sudo edquota -u www-data
# 设置:blocks soft=1000000 hard=2000000, inodes soft=5000 hard=10000

# 批量设置多个虚拟主机用户
for user in site1 site2 site3 site4; do
    sudo edquota -p www-data $user
done
场景2:限制学生账户的磁盘使用
# 创建学生配额模板用户
sudo edquota -u student_template
# 设置:blocks soft=500000 hard=1000000, inodes soft=1000 hard=2000

# 将所有学生用户的配额设置为模板
sudo edquota -p student_template `getent passwd | grep "^student" | cut -d: -f1`

# 设置较短的宽限期(3天)
sudo edquota -t
# 修改为:3days 3days
场景3:为开发团队设置组配额
# 创建开发组
sudo groupadd developers
sudo usermod -a -G developers john
sudo usermod -a -G developers jane

# 设置组配额
sudo edquota -g developers
# 设置:blocks soft=5000000 hard=10000000, inodes soft=50000 hard=100000

# 查看组配额使用情况
sudo repquota -g /home

配额管理脚本示例

#!/bin/bash
# quota_manager.sh - 磁盘配额管理脚本

ACTION=$1
USER=$2

case $ACTION in
    set)
        # 设置用户配额
        if [ -z "$USER" ]; then
            echo "用法: $0 set 用户名"
            exit 1
        fi
        sudo edquota -u $USER
        ;;
    copy)
        # 复制配额设置
        SOURCE_USER=$2
        DEST_USER=$3
        if [ -z "$SOURCE_USER" ] || [ -z "$DEST_USER" ]; then
            echo "用法: $0 copy 源用户 目标用户"
            exit 1
        fi
        sudo edquota -p $SOURCE_USER $DEST_USER
        ;;
    check)
        # 检查配额使用情况
        if [ -z "$USER" ]; then
            sudo repquota -a
        else
            sudo quota -u $USER
        fi
        ;;
    report)
        # 生成配额报告
        REPORT_FILE="/tmp/quota_report_$(date +%Y%m%d).txt"
        sudo repquota -a > $REPORT_FILE
        echo "配额报告已生成: $REPORT_FILE"
        ;;
    *)
        echo "可用操作: set, copy, check, report"
        echo "示例:"
        echo "  $0 set john           # 设置用户john的配额"
        echo "  $0 copy john jane     # 复制john的配额设置给jane"
        echo "  $0 check              # 检查所有用户配额"
        echo "  $0 report             # 生成配额报告"
        ;;
esac

注意事项

  • 权限要求:edquota通常需要root权限运行,使用sudo命令
  • 文件系统支持:配额功能需要在文件系统级别启用,且需要内核支持
  • 编辑器设置:edquota使用$EDITOR环境变量指定的编辑器,如果没有设置,默认使用vi
  • 配额格式:不同的文件系统可能使用不同的配额格式(ext4使用vfsv0/vfsv1,XFS使用xfs)
  • 生效时间:配额设置修改后立即生效,但已打开的文件可能不受新限制影响直到关闭
  • 备份重要数据:修改配额前建议备份重要数据,错误的限制可能导致数据写入失败

相关命令

  • quota:显示用户的磁盘配额和使用情况
  • repquota:报告文件系统配额使用情况的摘要
  • quotacheck:检查文件系统配额并创建配额文件
  • quotaon:启用磁盘配额
  • quotaoff:禁用磁盘配额
  • setquota:非交互式设置磁盘配额
  • warnquota:发送配额警告邮件给超过软限制的用户

常见问题与故障排除

# 1. edquota命令找不到编辑器
# 设置EDITOR环境变量
export EDITOR=nano
sudo EDITOR=nano edquota -u john

# 2. 配额设置不生效
# 检查配额是否启用
sudo quotaon -p /home

# 重新扫描配额
sudo quotacheck -cugm /home
sudo quotaon -av

# 3. 用户无法写入文件(配额已满)
# 检查用户配额使用情况
sudo quota -u username

# 临时提高限制或清理空间
sudo edquota -u username  # 提高限制
sudo find /home/username -type f -size +100M  # 查找大文件

# 4. 编辑时看到"Permission denied"
# 确保以root权限运行
sudo edquota -u username

# 5. 组配额不生效
# 检查用户是否在正确的组中
groups username
# 检查组配额是否设置
sudo quota -g groupname