免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2840 | 回复: 9
打印 上一主题 下一主题

如何用SHELL脚本来设置用户的Quota? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-06 19:00 |只看该作者 |倒序浏览
  1. # edquota
  2. edquota: Usage:
  3.         edquota [-u] [-F formatname] [-p username] [-f filesystem] username ...
  4.         edquota -g [-F formatname] [-p groupname] [-f filesystem] groupname ...
  5.         edquota [-u|g] [-F formatname] [-f filesystem] -t
  6.         edquota [-u|g] [-F formatname] [-f filesystem] -T username|groupname ...
  7. Bugs to: [email]mvw@planets.elm.net[/email], [email]jack@suse.cz[/email]
复制代码


edquota可以设置一个用户的Quota限额,但是,它是调用了一个编辑器来处理。

在脚本中我不知道怎么往它启动的这个编辑器里写东西。有没有更好一点的方法?

非常感谢!

论坛徽章:
0
2 [报告]
发表于 2009-03-06 19:04 |只看该作者
这个edquota有点像crontab -e的形式,调用编辑器,用户修改,保存时安装cron。
有没有不需要用户交互的方法?

论坛徽章:
0
3 [报告]
发表于 2009-03-07 09:44 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2009-03-07 10:02 |只看该作者
http://bbs.chinaunix.net/viewthread.php?tid=1126458
使用QUOTA(磁盘配额)来限制用户空间
虚拟主机中经常要限制用户空间的大小和文件的数量。这些限制在linux和FreeBSD中都是用QUOTA来实现的。这里我说下在FreeBSD下实现的方法;
开启QUOTA支持
首先需要修改内核加入对quota的支持
machine i386
cpu I686_CPU
#ident GENERIC
ident CNOSvhost
maxusers 0
options QUOTA #就是这行了。
修改好后重新编译内核。
然后在/etc/rc.conf里加入:
enable_quotas="YES"
check_quotas="YES"
这样你的系统就起用QUOTA了,你应当通过编辑/etc/fstab的某个文件系统的属性,加入QUOTA的支持。
下面的fstab文件就设置了在/pub文件系统上起用用户配额和组配额
# See the fstab(5) manual page for important information on automatic mounts
# of network filesystems before modifying this file.
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad0s1b             none            swap    sw              0       0
/dev/ad0s1a             /               ufs     rw              1       1
/dev/ad0s1h             /pub            ufs     rw,userquota,groupquota        2  2
/dev/ad0s1e             /tmp            ufs     rw              2       2
/dev/ad0s1g             /usr            ufs     rw              2       2
/dev/ad0s1f             /var            ufs     rw              2       2
/dev/acd0c              /cdrom          cd9660  ro,noauto       0       0
proc                    /proc           procfs  rw              0       0
设置完fstab文件后,执行下面的命令打开quota
# quotacheck -av
# repquota -a
基本上前期的工作都已经做完了,剩下的就是编辑用户的配额了。
编辑用户配额
# edquota c4st将编辑用户c4st的配额设定,出现的是一个文本编辑器界面:
Quotas for user c4st:
/pub: kbytes in use: 3438, limits (soft = 100000, hard = 100020)
inodes in use: 25, limits (soft = 25, hard = 26)
我们看到设定共分为两行。
kbyters in use:3438表示已经使用了3438kb limits限制(soft=100000软限制100M,hard=100020硬限制)
soft表示达到此值时警告,hard表示的用户实际可以使用的大小。
inodes in use: 25, limits (soft = 25, hard = 26)这行为可以拥有的“文件数量”限定,当然例子给出的数值不太实际,上面的设定,
用户只能创建26个文件。实际应用中,可以根据需要调整inodes的值,比如,你要装一个基于文本库的程序,如lb5000(一种webbbs),
一些cgi文章管理等系统,你就要适当的调大inode的hard设定 ?
常见的quota命令
# edquota -t对quota用户使用软限制之前的时间设定,days,hours,minutes或seconds都可以是此设定的单位,值只要是合理就可以。
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/pub: block grace period: 1 day, file grace period: 1 day
# repquota -a报告文件系统关于quota的信息。
                                Block  limits                    File  limits
User                   used     soft     hard  grace     used    soft    hard  grace
wheel           --        2        0        0      -        1       0       0      -
operator        --      128        0        0      -        2       0       0      -
mysql           --       18        0        0      -        9       0       0      -
vhostuser       --    36164   100000   100050      -      342    1000    1005      -
                                Block  limits                    File  limits
User                   used     soft     hard  grace     used    soft    hard  grace
root            --     9136        0        0      -       12       0       0      -
mysql           --       18        0        0      -        9       0       0      -
testmin         --       18     1000     1050      -        9    1000    1005      -
web             --    22152        0        0      -      122       0       0      -
coms_cn         --     1550        0        0      -      177       0       0      -
c4st            -+     3438   100000   100020      -       25      25      26  22:56
# Quota :显示用户的磁盘使用情况和上限。
-g 显示用户所在组的组配额
-l 不显示NFS系统上的配额
-u 显示用户配额
-q 显示使用情况超过配额的简要信息
-v 检查用户的quota设置
# edquota -p test c4st c4st1 c4st2.....
将把用户test的配额设定复制给用户c4st c4st1 c4st2.....
# quotacheck -a这个命令可以定期执行,用来检查全部设定是否正常(可以放到crontab里执行)。

论坛徽章:
0
5 [报告]
发表于 2009-03-07 10:20 |只看该作者
笨办法,给那个用户建一个文件夹,定期的去检查空间的大小,如果超过就报警!!!

论坛徽章:
0
6 [报告]
发表于 2009-03-07 23:11 |只看该作者

回复 #4 oldoger 的帖子

这些我知道,好像只有复制权限这一种了,手动建好样例再复制。感觉这个方法比较笨。

我现在是想通过cgi界面设置用户的配额,这样非常灵活了。

论坛徽章:
0
7 [报告]
发表于 2009-03-08 08:23 |只看该作者

回复 #6 SeaPrince 的帖子

通过cgi调系统命令或者脚本啊

论坛徽章:
0
8 [报告]
发表于 2009-03-30 21:04 |只看该作者
我最终做出来了,不知道有没有人有同样的需求,在这里发布一下,有需要的朋友可以交流一下。

http://search.cpan.org/dist/Quota/

先安装这个,然后控制就很方便了。

use blib "/usr/lib/perl5/site_perl/5.8.8/blib";
use Quota;

$dev = Quota::getqcarg(".");

$task = @ARGV[0];
if($task eq 'get') {
        $uid = @ARGV[1];
        &print_usage() unless $uid =~ /\d+/ && @ARGV==2;
        @limits = &getquota($uid);
        print "@limits\n";
} elsif ($task eq 'set') {
        &print_usage() unless @ARGV==3;
        $uid = @ARGV[1];
        $limits = @ARGV[2];
        $result = &setquota($uid, $limits);
} else {
        &print_usage();
}


sub getquota {
        $uid = @_[0];
        ($bc,$bs,$bh,$bt,$fc,$fs,$fh,$ft) = Quota::query($dev, $uid);
        ($bc,$bs,$bh,$bt,$fc,$fs,$fh,$ft);
}

##

##  set quota block & file limits for user

##


## bs,bh,fs,fh

sub setquota {
        $uid = @_[0];
        $in = @_[1];
        $success = Quota::setqlim($dev, $uid, split(/\s*,\s*/, $in), 1);
        Quota::sync($dev) && ($! != 1) && die "Quota::sync: ".Quota::strerr."\n";
        $success;
}

sub print_usage {
        print "ZH Panel Quota Tools Set\n";
        print "Usage: \n";
        print "Get Quota Limits: $0 get uid\n";
        print "Set Quota Limits: $0 set uid bs,bh,fs,fh\n\n";
        print "Example: \n$0 get 9494\n$0 set 9494 1000000,1000000,10000,10000\n";
        exit 1;
}

论坛徽章:
0
9 [报告]
发表于 2009-03-30 21:13 |只看该作者
学习!

另问,代码里的有色字符是怎么搞的?

论坛徽章:
0
10 [报告]
发表于 2009-03-31 10:44 |只看该作者

回复 #9 haimming 的帖子

点击下边的回复帖子,进入高级回复模式,就会看到一个C++的图标了,点它,就可以选择语言然后贴代码了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP