edquota 命令(Edit Quota)是Linux系统中用于编辑用户或组磁盘配额的命令行工具。它允许系统管理员设置和修改用户或组在文件系统上的磁盘空间和文件数量限制,是配额管理系统的重要组成部分。
磁盘配额是一种限制用户或组在文件系统上可使用的磁盘空间和文件数量的机制。它包含三种类型的限制:
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
# 编辑用户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
各列含义:
# 编辑developers组的磁盘配额
sudo edquota -g developers
组配额与用户配额的格式相同,但限制应用于整个组的所有成员。
# 将用户john的配额设置复制给其他用户
sudo edquota -p john user1 user2 user3
# 将用户john的配额设置复制给一组用户(使用用户列表文件)
sudo edquota -p john `cat /tmp/userlist.txt`
这是批量设置用户配额的便捷方法,特别适用于创建多个具有相同配额限制的用户。
# 编辑时间宽限设置
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。
# 只为/home文件系统编辑用户配额
sudo edquota -f /home -u john
# 编辑多个文件系统的配额
sudo edquota -u john # 如果用户在不同文件系统有配额,会显示所有文件系统
# 使用setquota命令非交互式设置配额(无需编辑器)
# 语法:setquota -u 用户名 块软限制 块硬限制 inode软限制 inode硬限制 文件系统
sudo setquota -u john 50000 100000 1000 2000 /home
# 设置组配额
sudo setquota -g developers 1000000 2000000 10000 20000 /home
# 查看用户配额使用情况
sudo quota -u john
# 或
sudo repquota -u john
# 查看组配额使用情况
sudo quota -g developers
# 查看所有用户的配额使用情况
sudo repquota -a
# 查看特定文件系统的配额使用情况
sudo repquota /home
# 为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
# 创建学生配额模板用户
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
# 创建开发组
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
sudo命令$EDITOR环境变量指定的编辑器,如果没有设置,默认使用vi# 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