本文目录导读:

在Linux系统中,通过Shell脚本设置用户磁盘配额主要涉及以下步骤:
基础环境准备
检查并安装配额工具
#!/bin/bash # 安装配额工具(CentOS/RHEL) yum install -y quota # 或Ubuntu/Debian apt-get install -y quota
检查内核支持
if [ -f /proc/config.gz ]; then
zcat /proc/config.gz | grep CONFIG_QUOTA
else
grep QUOTA /boot/config-$(uname -r)
fi
启用配额的文件系统
修改/etc/fstab
#!/bin/bash MOUNT_POINT="/home" # 在挂载选项中添加usrquota和grpquota sed -i "s|\($MOUNT_POINT.*defaults\)|\1,usrquota,grpquota|" /etc/fstab
重新挂载文件系统
mount -o remount $MOUNT_POINT
完整配额设置脚本
#!/bin/bash
# ===== 配置参数 =====
MOUNT_POINT="/home" # 配额应用的文件系统
USER_NAME="testuser" # 目标用户
SOFT_LIMIT="500M" # 软限制
HARD_LIMIT="600M" # 硬限制
INODE_SOFT="10000" # 文件数软限制
INODE_HARD="12000" # 文件数硬限制
GRACE_PERIOD="7" # 宽限期(天)
# ===== 颜色输出 =====
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# ===== 函数定义 =====
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查是否为root用户
check_root() {
if [ "$EUID" -ne 0 ]; then
log_error "请使用root用户运行此脚本"
exit 1
fi
}
# 检查配额是否已启用
check_quota_enabled() {
if mount | grep "$MOUNT_POINT" | grep -q "usrquota"; then
log_info "用户配额已启用"
return 0
else
log_warn "用户配额未启用,正在启用..."
return 1
fi
}
# 启用配额支持
enable_quota() {
# 备份fstab
cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d_%H%M%S)
# 添加配额选项
sed -i "s|\($MOUNT_POINT.*defaults\)|\1,usrquota,grpquota|" /etc/fstab
# 重新挂载
mount -o remount $MOUNT_POINT
# 创建配额数据库
quotacheck -cug $MOUNT_POINT
# 启用配额
quotaon -v $MOUNT_POINT
log_info "配额支持已启用"
}
# 设置用户配额
set_user_quota() {
local user=$1
local soft=$2
local hard=$3
local inode_soft=$4
local inode_hard=$5
# 检查用户是否存在
if ! id "$user" &>/dev/null; then
log_error "用户 $user 不存在"
return 1
fi
# 转换大小格式
convert_size() {
local size=$1
case $size in
*G|*g) echo $((${size%[Gg]} * 1024 * 1024)) ;;
*M|*m) echo $((${size%[Mm]} * 1024)) ;;
*K|*k) echo ${size%[Kk]} ;;
*) echo $size ;;
esac
}
soft_blocks=$(convert_size $soft)
hard_blocks=$(convert_size $hard)
# 设置磁盘配额
setquota -u $user $soft_blocks $hard_blocks $inode_soft $inode_hard $MOUNT_POINT
if [ $? -eq 0 ]; then
log_info "用户 $user 配额设置成功"
log_info " 磁盘限制: 软限制=$soft, 硬限制=$hard"
log_info " 文件限制: 软限制=$inode_soft, 硬限制=$inode_hard"
return 0
else
log_error "用户 $user 配额设置失败"
return 1
fi
}
# 设置宽限期
set_grace_period() {
local days=$1
# 设置宽限期(秒)
local seconds=$((days * 24 * 60 * 60))
setquota -t $seconds $seconds $MOUNT_POINT
if [ $? -eq 0 ]; then
log_info "宽限期设置为 $days 天"
return 0
else
log_error "宽限期设置失败"
return 1
fi
}
# 查看配额信息
show_quota_info() {
local user=$1
echo "=========================================="
echo "用户 $user 的磁盘配额信息"
echo "=========================================="
quota -u $user
echo ""
echo "详细报告:"
repquota -a | grep $user
}
# 批量设置用户配额
batch_set_quota() {
local user_file=$1
if [ ! -f "$user_file" ]; then
log_error "用户列表文件 $user_file 不存在"
return 1
fi
while IFS=',' read -r user soft hard inode_soft inode_hard; do
# 跳过注释和空行
[[ $user =~ ^#.*$ ]] && continue
[[ -z $user ]] && continue
set_user_quota "$user" "$soft" "$hard" "$inode_soft" "$inode_hard"
done < "$user_file"
}
# ===== 主函数 =====
main() {
check_root
echo "===== 磁盘配额设置脚本 ====="
# 检查并启用配额
if ! check_quota_enabled; then
enable_quota
fi
# 设置单个用户配额
echo ""
log_info "正在设置用户 $USER_NAME 的配额..."
set_user_quota "$USER_NAME" "$SOFT_LIMIT" "$HARD_LIMIT" "$INODE_SOFT" "$INODE_HARD"
# 设置宽限期
log_info "正在设置宽限期..."
set_grace_period "$GRACE_PERIOD"
# 显示配额信息
show_quota_info "$USER_NAME"
echo ""
log_info "配额设置完成"
}
# 执行主函数
main
其他实用脚本
检查配额使用情况
#!/bin/bash
# 配额监控脚本
THRESHOLD=80 # 使用率阈值百分比
echo "时间: $(date)"
echo "磁盘配额使用情况检查:"
repquota -a | while read line; do
# 检查用户配额使用率
if echo "$line" | grep -qE "^[a-z]"; then
user=$(echo "$line" | awk '{print $1}')
used=$(echo "$line" | awk '{print $3}')
soft=$(echo "$line" | awk '{print $4}')
if [ -n "$soft" ] && [ "$soft" != "0" ]; then
usage=$((used * 100 / soft))
if [ "$usage" -ge "$THRESHOLD" ]; then
echo "警告: 用户 $user 磁盘使用率已达 ${usage}%"
# 可以添加邮件通知
# echo "用户 $user 磁盘配额使用率: ${usage}%" | mail -s "磁盘配额警告" admin@example.com
fi
fi
fi
done
删除用户配额
#!/bin/bash
delete_user_quota() {
local user=$1
if [ -z "$user" ]; then
echo "请指定用户名"
return 1
fi
# 删除用户配额
setquota -u $user 0 0 0 0 /home
# 强制同步
sync
echo "用户 $user 的配额已删除"
}
使用说明
- 保存脚本:将脚本保存为
setup_quota.sh - 添加执行权限:
chmod +x setup_quota.sh - 运行脚本:
sudo ./setup_quota.sh
注意事项
- ⚠️ 需要 root 权限运行
- 确保文件系统支持配额功能
- 建议先在测试环境验证
- 定期检查配额使用情况
- 合理设置软限制和硬限制的差异
这个脚本提供了完整的磁盘配额管理功能,可以根据实际需求进行调整和扩展。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播