‘壹’ linux磁盘配额可以通过哪两种方法对用户进行限制
Linux磁盘配额
1. 磁盘配额的使用限制
仅针对整个分区:磁盘配额实际运行时,是针对“整个分区”进行限制的,例如,如果/dev/hda5载入在/home下,那么,在/home下面的所有目录都会受到限制。
核心必须支持磁盘配额:Linux系统核心必须支持磁盘配额模块。
磁盘配额的记录文件:使用的Kernel 2.6.XX的核心版本,这个核心版本支持新的磁盘配额模块,使用的默认文件(aquota.user、aquota.group)将不同于旧版本的quota.user和quota.group。旧版本的磁盘配额可以通过convertquota程序来转换
只对一般身份用户有效:并不是所有在Linux上的账号都可以设置磁盘配额,例如root就不能设置磁盘配额,因为他拥有整个系统所有的数据。
2. 磁盘配额程序对硬盘配额的限制
最低限制( soft ):这是最低限制容量。用户在宽限期间之内,它的容量可以超过最低限制,但必须在宽限时间之内将磁盘容量降低到最低限制的容量限制范围之内。
最高限制( hard ):这是“绝对不能超过”的容量。通常最高限制会比最低限制高。
宽限时间:宽限之间是指当用户使用的空间超过了最低限制,却还没有到最高限制时,在这个“宽限时间”内,就必须请用户将使用的磁盘空间降低到最低限制之下,否则则不允许在写入。反之,则宽限时间取消
3. 基本的磁盘配额命令
在开始进行磁盘配额的实际练习之前,先了解一下磁盘配额使用的命令,这些命令分为两种,一种是查询功能(quota、quotacheck、quotastats、warnquota、requota),另一种则是编辑磁盘配额的内容(edquota、setquota)。下面我们来讨论这些基本命令。
3.1. /etc/mtab
为什么要提这个文件系统实际载入的记录文件呢?要注意,当我们使用磁盘配额的时候,系统会去搜素:“系统上具有磁盘配额参数的分区”,所以,当我们要使用磁盘配额的功能时,系统文件必须要支持磁盘配额的标志。一般来说,我们是通过编辑/etc/fstab后,在重新载入文件系统的方法,来让系统的文件系统支持磁盘配额。这个概念很重要。
3.2. quota
这个命令仅仅用来“显示”当前某个用户或者组的磁盘配额值。
# quota -uvs //这个是显示当前用户的配额值
-u:表示显示用户的配额
-g:表示显示组的配额
-v:显示每个文件系统的磁盘配额
-s:可以选择用Inode或者磁盘容量的限制值来显示
# quota -gvs //显示root用户所在组的配额值
# quota -uvs test1 //显示test1用户的配额值
3. 3.quotacheck
这个命令的主要目的是扫描某个磁盘的配额空间,它会针对分区进行扫描,并且,由于该磁盘持续欲行,可能扫描过程中文件会增加,造成磁盘配额扫描错误,因此,当使用quotacheck时,该磁盘将“自动被设置为只读扇区”;扫描完毕后,扫描所得的磁盘空间结果会写入该区最顶端(aquota.user与aquota.group)
# quotacheck -cug //扫描分区,并生成配额信息文件
-a:扫描所有在/etc/mtab内含有磁盘配额支持的文件系统,加上此参数,可以不写/mount_point
-v:显示扫描过程
-u:针对用户扫描文件与目录的使用情况,会建立quota.user
-g:针对组扫描文件及与目录的使用情况,会建立quota.group
-c :代表创建
Ps:如果提示不能quotacheck,权限不足,此时的原因是因为SElinux ,关闭它就能创建了。
3. 4: edquota
这个文件时编辑每一个“用户”或者“用户组”的磁盘配额数值。通常我们以edquota -u username或者是edquota -g groupname来编辑个人与用户组的磁盘配额值,不过这样一个一个分配很慢。也可以直接复制一个人的设置给另外一个人。用edquota -p user1 -u user2,下面介绍编辑时,里面的几个值
。filesystem:代表这个磁盘是针对哪个分区
。blocks:这个是当前用户在文件系统上所消耗的磁盘数量,也就是当前用户使用的空间,单位是KB
-u:配置用户的磁盘配额
-g:配置组的磁盘配额
-p:复制磁盘配额设定,从一个用户到另一个用户
-t:修改宽限时间,可以针对分区
# edquota -u test1 //配置test1的磁盘配额
# edquota -p test1 -u test2 //将test1的配置服务之test2
#edquota -t //修改宽限时间 可以针对每个分区
3.5. quotaon
这个命令是启动磁盘配额,不过,由于这个命令是启动aquota.group与aquota.user的,所以必须要先完成quotacheck的工作,然后执行quota -a即可启动
-u:针对用户启动磁盘配额
-g:针对用户组启动磁盘配额
-v:显示启动过程的相关信息
-a:根据/etc/mtab内的文件系统设置启动相关的磁盘配额,若不加-a的话,则后面就需要加上特定的文件系统
#quota -avug //启动所有的磁盘配额
#quota -uv /data //启动/data里面的用户磁盘配额设置
3.6. quotaoff
-a:全部文件系统的磁盘配额都关闭
-u:关闭用户的磁盘配额
-g:关闭组的磁盘配额
#quotaoff -a //全部关闭
#quotaoff -u /data //关闭/data的用户磁盘配额设置值
‘贰’ 如何限制Linux用户的磁盘空间(ext3)
1.
修改
/etc/fstab
文件.在文件系统相应的
mount
命令行中加入限额选项(如下的例子)。/dev/hda7
/home
ext3
defaults,usrquota,grpquota
1
22.
重新装载
Linux
分区,例如:
[root@fileserver
root]#
mount
-o
remount
/home
继续。3.
在欲加
磁盘限额
的文件系统的安装点目录建立
aquota.user
和
aquota.group
文件:
[root@fileserver
root]#
cd
/home
(/home
为单个分区
/dev/hda7
的装载点)
[root@fileserver
home]#
touch
aquota.user
(为用户设置磁盘限额)
[root@fileserver
home]#
touch
aquota.group
(为
用户组
设置磁盘限额)
这时生成
的
aquota.user
和
aquota.group
是空的,不符合系统的要求。
请看下一步。4.
生成符合系统要求的
aquota.user
和
aquota.group[root@fileserver
home]#
quotacheck
/home
(生成符合系统要求
的
aquota.user)
[root@fileserver
home]#
quotacheck
-g
/home
(生成符合系统要求
的
aquota.group)
生成时,有错误提示。这不要紧。
‘叁’ linux下限制用户最多只能使用20M磁盘空间,50个文件。
假如你要设置用户user,在/dev/sda1 分区使迅笑让用20M磁盘空间,50个文件,下文以/为例:
1.设亩局置/etc/fstab ,在defaults后添加usrquota:
/dev/sda1 / ext4 defaults,usrquota 0 0
2.mount -o remount / (应该要reboot)
3 .建立用户磁盘配额数据库:(可能要在单用户模式下)
quotacheck -cvua
4. 启动磁盘配额功能:
quotaon /dev/sda1
5.编辑用户磁盘配额
edquota -u user
Filesystem blocks soft hard inodes soft hard
/dev/sda1 8 20000 50
6.查看用升行户配额
requota -u user
‘肆’ Linux系统中如何限制用户的可用空间
磁盘配额从开始准备文件系统的支持,到整个设置结束的主要步骤如下:
步骤1:设置分区的文件系统支持磁盘配额参数
#vi /etc/fstab :
UUID=*** ext3 defaults,usrquota,grpquota 1 2
步骤2:生成磁盘配额的配置文件
quotacheck –cugm /home 生成磁盘配额的配置文件
在/home下生成aquota.user和aquota.group文档
参数:
a 检查任何起用了配额的在本地挂载的文档系统弊谈
b 在检查配额过程中显示周详的状态信息
u 检查用户磁盘配额信息
g 检查组群磁盘配额信息
这样就加入了磁盘配额的磁盘格式了迅卜漏。不过,由于真正的磁盘配额在读取时时读取/etc/mtab文件,这个文件需要重启之后才能用/etc/fstab的新数据,所以这个时亩烂候可以选择 重新启动 或者
#mount -o remount /data
步骤3:打开磁盘配额
#quotaon -a
步骤4:编辑磁盘配额限制值数据
现在假设想给test用户10M的硬盘配额限制,他所拥有的最大文档数不得超过100个。
#edquota -u test //test为用户名
进入编辑环境,将如下三行:
Quotas for user test:
/dev/hadx: blocks in use14,limits(soft=0, hard=0)
inodes in use: 12, limits (soft=0, hard=0)
改为:
Quotas for user test:
/dev/hdax: blocks in use: 14, limits (soft=10204, hard=10204)
inodes in use: 12, limits (soft=100, hard=100)
其中:blocks in use:用户已使用块的大小,单位是KB。inodes in use: 用户现有文档的大小。这两项都是系统自动给出,不必改变。
‘伍’ 如何限制Linux内存的使用
swap是一块磁盘空间或者一个本地文件
/proc/sys/vm/swappiness 可以设置服务器使用 swap 的积极程度。取值范围为0-100,值越大,越积极使用swap,更倾向于回收匿名页;值越小,越消极使用swap,更倾向于回收文件页。
即使swap设置为0,当剩余内存+文件页小于页高阈值( pages_high )的时候,也会发生swap
Linux有专门的内核线程 kswapd0 定期回收内存,为了衡量内存的使用情况, kswapd0 定义了三个内存阈值:页最小阈值 pages_min 、页低阈值 pages_low 和页高阈值 pages_high ,剩余内存使用 pages_free 表示。
kswapd0 定期扫描内存的使用情况,并根据剩余内存和这三个阈值的关系进行内存回收操作。
pages_free < pages_min :进程可用内存耗尽,只有内核才可以分配内存
pages_min < pages_free < pages_low :内存压力较大, kswapd0 会执行内存回收,直到剩余内存大于高阈值为止
pages_low < pages_free < pages_high :内存有一定压力,但还可以满足新内存请求
pages_free > pages_high :剩余内存较多,没有内存压力。
这些阈值可以通过内核选项来 proc/sys/vm/min_free_kbytes 间接设置。 min_free_kbytes 设置了页最小阈值( pages_min )。 pages_low=pages_min*5/4 , pages_high=pages_min*3/2
/etc/security/limits.conf
通过这个配置文件可以对每个登录的会话进行限制,这种限制不是全局的,也不是永久的,只在会话期间起作用。
通常,对单个用户的限制优先级高于对用户组的限制
可以使用以下方式限制内存使用
语法
<domain> <type> <item> <value>
详见 limits.conf(5) - Linux man page
/proc/sys/vm/overcommit_memory 控制内核使用虚拟内存的模式,可以设置为以下值
‘陆’ linux下限制用户最多只能使用20M磁盘空间,50个文件。
edquota
-u
username
/dev/sda1
x
0
20000
y
0
50假设home在/dev/sda1分区上面,其中x,
y
是与home所在分区大小有关,配置时可以不管他
‘柒’ linux用户态栈空间的大小有没有限制
当然有限制,你可以使用命令 ulimit -s 查看大小。
因为物理空间存在着大小限制,因此栈空间肯定也是有大小限制的,液拆不然程序还不崩了。
甚至,你可以测试一下,分配一个超大的栈空间(方法是,在函数中,定义一个超大空间的数组),然明埋埋后看是否可激蚂以运行,当达到一个限制的时候,程序是无法正常运行的
‘捌’ linux限定用户或组对磁盘空间的使用
安装磁盘配额支持软件
yum install quota
制作文件系统,并以支持配额功能的方式挂载文件系统
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /tmp
mount -o remount,usrquota,grpquota /dev/sdb1
查看磁盘挂载时是否启用磁盘配额技术
mount
要想永久挂载(需在配置文件里,加入usrquota,grpquota这两个参数)
vim /etc/fstab
/dev/sdb1 /tmp ext4 defaults,usrquota,grpquota 0 0
检测磁盘配额并生成配额文件(若是出错,请关闭selinux)
quotacheck -cugv /tmp #此命令会在/tmp下生成两个文件
#解释:
-c 创建配额文旅则件,
-u (-g) 扫描磁盘空间,计算每个用户(组)识裤颂别码所占用的目录和文件数,
-a 扫描在/etc/fstab文件里,有加入quota设置的分区,
-d 详细显示指令执行过程,便于排错。
-R 排除根目录所在分区
用户和组帐号的配额设置
useradd wsfnk #先创建一个用户,若有就不用创建了
edquota -u wsfnk #-g 表示 wsfnk组,在类似vim界面,编辑限制大小,
Disk quotas for user wsfnk (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 拆纯棚20 50 1 0 0
#对其中各字段解释如下:
#Filesystem下显示实现磁盘配额的分区;
#blocks下为当前已经使用的大小,不用修改;
#soft为软限制,超出后会给出警告,超出的部分默认会保存7天;
#hard为硬限制,不可超越的限制(软硬限制默认单位都是KB);
#后面的两个相同的soft、hard分别表示分区中这个用户可以创建的文件数目软硬限制;
#本例中设置,qingsword可以使用/dev/sdb1分区的软限制大小10KB,硬限制20KB,可创建的文件个数软限制是3个,硬限制5个;
edquota参数
-u :设置用户的quta,这是预设的参数
-g :设置群组的quota
-p 源用户名称 :将源用户的quota设置套用到其他用户或组
-t :设置宽限期限
激活磁盘配额
quotaon -ugv /tmp
注意:磁盘配额中的blocks,不是fdisk里看到的blocks,而是表示1k
测试是否限制会生效
写数据
mkdir /tmp/test
chmod 777 /tmp/test
切换用户wsfnk
su wsfnk
cd /tmp/test
dd if=/dev/zero of=wss.test bs=1k count=500
关闭磁盘配额
#关闭单个磁盘的磁盘配额
quotaoff /sdb1
#关闭所有已经开启的磁盘配额
quotaoff -a
#反之,开启所有磁盘配额
quotaon -a
#如果不再使用磁盘配额,可以将配置文件也删除
rm -rf /sdb1/aquota.*
#最后删除/etc/fstab中的自动挂载即可。 详情查看 网页链接
‘玖’ Linux为什么区分内核空间和用户空间
程序如果要被CPU执行,就得编译成CPU可以执行的指令,一大堆的程序就变成了一堆的指令。
一个操作系统它也是一堆程序组成的,可以想象CPU的指令是很多的,但是这么多的指令中,有些指令涉及到系统底层的东西,如果有些指令错用或者使用不当是非常危险的,比如清内存、设置时钟、修改用户访问权限、分配系统资源等等,可能导致系统崩溃。
CPU将这些指令进行了分类,分为 特权指令 和 非特权指令 ,不让所有程序都能使用所有指令,如果所有程序都能使用,那系统崩溃就会变得非常常见了。
操作系统的核心是内核,它是独立于普通的应用程序,负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性,所以一定要埋悄铅保证内核的安全。
为了保护内核的安全,操作系统一般都限制用户进程不能直接操作内核,在32位操作系统总的地址空间4G(2^32 = 4GB),实现这个限制的方式就是操作系统将总的地址空间分为两个部分,对于Linux操作系统:
《 你该知道你写的程序的内存布局 》
总之,有1G的内核空间是每个进程共享的,剩下的3G是进程自己使用的。
在内核态下,CPU可以执行指令系统的全集,也就是说内核态进程可以调用系统的一切资源,但是特权指令只能在内核态下执行,它不直接提供给用户使用,用户态下只能使用非特权指令,也就是说用户态进程只能执行简单运算,不能直接调用系统资源。
那么CPU如何知道当前是否可以使用特权指令?
Linux操作系统通过区分内核空间和用户空间的这种设计,将操作系统代码和用户程序代码分开,这样即使在某一个应用程序出错,也不会影响到操作系统,再说,Linux操作系统是多任务系统,其它应用程弯好序不也还能运行。
现代操作系统基本上都是分内核空间和用户空间的做法,来 保护操作系统自身的安全性和稳定性,这也是区分内核空间和用户空间的本质。
你也可以继续阅读 点击 以下文运信章,下面是我推荐给大家的几篇文章:
1.《 竟然把通信协议讲的如此通俗? 》
2.《 c++如何学习?赶紧收藏这些好书 》
3.《 select和epoll的前世今生 》
4.《 彻底明白Linux硬链接和软链接 》
‘拾’ Linux用户磁盘空间配额的管理
linux用户磁盘空间配额的管理linux下要实现磁盘空间限制,需要安
quota
套件来实现。用户磁盘空间限制是以文件系统(分区)为单位的,想要限制在/home目录空间大小,那么必须为/home单独挂载一个分区。一、规划文件系统1.1、查看文件系统的容量等信息Java代码
df
-h
/
1.2、查看文件系统是否已加入quota支持Java代码
mount
|
grep
/
1.3、为文件系统添加quota支持编辑fstab文件,选择要设定
Quota
的文件系统,然后加入
usrquota
和
grpquota
选项:Java代码
vim
/etc/fstab
/dev/sda1
/
ext3
defaults,usrquota,grpquota
1
1
其中
/dev/sda1
可以用
uuid
标识信息来代替Java代码
UUID=a8454012-1fff-4d33-baa5-b57fb7d3e1e2
/
ext3
defaults,usrquota,grpquota
1
1
那如何查看磁盘与分区的标识信息?Java代码
ls
-all
/dev/disk/by-uuid
1.4、临时添加quota支持(选做)Java代码
mount
-o
remount,usrquota,grpquota
/
1.5、重新挂载文件系统Java代码
mount
-o
remount
/
1.6、查看文件系统挂载是否正确Java代码
mount
-a
1.7、添加新硬盘挂载到/home目录(选做)如果你/home目录没有独立挂载一个分区,后期你可能想增加一个新的分区Java代码
mkfs.ext3
/dev/sda6
#格式化并加载一个新分区
mkdir
/media/home
mount
/dev/sda1
/media/home
cp
-rf
/media/home/*
/home
#复制旧/home的内容到新/home目录
umound
/media/home
fdisk
-l
#查看硬盘数及分区情况
fdisk
/dev/sda
#操作硬盘的命令
d:删除分区、l:列出所有分区类型、m:列出帮助信息、n:添加一个分区、p:列出分区表信息、q:不保存退出、t:改变分区类型、w:把分区表写入硬盘并退出二、安装、初始化、启动、关闭
Quota2.1、安硬盘
quota
套件Java代码
aptitude
install
quota
quotatool
其中
quotatool
是一个基于命令行的磁盘配额设置和管理工具2.2、初始化
quota
规则文件quotacheck
-avugmchmod
600
/quota.*
#修改规则文件权限-a
为所有添加了quota支持的文件系统,建立
quota
规则文件-v
显示建立
quota
规则文件过程中的信息-u
建立
aquota.user
规则文件-g
建立
aquota.group
规则文件-m
强制初始化2.3、启动关闭
quota
的服务Java代码
quotaon
-avug
#启动
quota
的服务
quotaoff
-auvg
#关闭
quota
的服务
三、配置
Quota
规则3.1、为用户/组设置磁盘空间限额:Java代码
edquota
-u
username
edquota
-g
groupname
filesystem:说明该限制值是针对哪个分区,例如/或/homeblocks:使用者已使用的磁盘区块数量,该值由quota自动算出soft:单位为KB,一个非强制性磁盘空间限额hard:单位为KB,一个强制性磁盘空间限额inodes:使用者已使用的档案数目soft:非强制性的inode的限制hard:强制性的inode的限制3.2、为批量用户复制规则Java代码
edquota
-p
group1
user1,user2,user3
..
3.3、为用户/组设置宽限期通常将
hard
值设置大于
soft
值,就是为了让宽限期发挥作用,默认超额宽限期为7天。edquota
-t四、Quota
报表4.1、用户/组限额报表-s
使用1024倍数来指定单位,会显示如M
之类的单位。Java代码
quota
-uvs
user1
user2
user3
quota
-gvs
group1
group2
group3
4.2、文件系统限额报表查看所有使用者的
quota
限制情Java代码
repquota
-auvs
五、Quota
测试与管理1、切换到user1用户2、向当前目录的bigfile文件写入10次,每次1m的数据3、如果写入大小没有超过
hard
值,那么进入宽限期倒计时。4、如果写入超过hard值,那么写入失败。Java代码
su
user1
dd
if=/dev/zero
of=bigfile
bs=1M
count=10