与文件系统及程序的限制关系: ulimit

ulimit


想象一个状况:我的 Linux 主机里面同时登入了十个人,这十个人不知怎么搞的, 同时开启了 100个文件,每个文件的大小约 10MBytes ,请问一下, 我的 Linux 主机的内存要有多大才够?10 10010 = 10000 MBytes = 10GBytes … 老天爷,这样,系统不挂点才有鬼哩! 为了要预防这个情况的发生,所以我们的 bash 是可以『限制用户的某些系统资源』的,包括可以开启的文件数量, 可以使用的 CPU 时间,可以使用的内存总量等等。如何设定?用 ulimit 吧!

[dmtsai@study ~]$ ulimit [-SHacdfltu] [配额]
选项与参数:
-H :hard limit ,严格的设定,必定不能超过这个设定的数值;
-S :soft limit ,警告的设定,可以超过这个设定值,但是若超过则有警告讯息。
在设定上,通常 soft 会比 hard 小,举例来说,soft 可设定为 80 而 hard
设定为 100,那么你可以使用到 90 (因为没有超过 100),但介于 80~100 之间时,
系统会有警告讯息通知你!
-a :后面不接任何选项与参数,可列出所有的限制额度;
-c :当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),
这种文件就被称为核心文件(core file)。此为限制每个核心文件的最大容量。
-f :此 shell 可以建立的最大文件容量(一般可能设定为 2GB)单位为 Kbytes
-d :程序可使用的最大断裂内存(segment)容量;
-l :可用于锁定 (lock) 的内存量
-t :可使用的最大 CPU 时间 (单位为秒)
-u :单一用户可以使用的最大程序(process)数量。







范例一:列出你目前身份(假设为一般账号)的所有限制数据数值
[dmtsai@study ~]$ ulimit -a
core file size 			(blocks, -c) 0		<==只要是 0 就代表没限制
data seg size 			(kbytes, -d) unlimited
scheduling priority		(-e) 0
file size				(blocks, -f) unlimited	<==可建立的单一文件的大小
pending signals 		(-i) 4903
max locked memory 		(kbytes, -l) 64
max memory size 		(kbytes, -m) unlimited
open files				(-n) 1024			<==同时可开启的文件数量
pipe size				(512 bytes, -p) 8
POSIX message queues	(bytes, -q) 819200
real-time priority		(-r) 0
stack size				(kbytes, -s) 8192	
cpu time				(seconds, -t) unlimited
max user processes		(-u) 4096
virtual memory			(kbytes, -v) unlimited
(-x) unlimited			file locks
范例二:限制用户仅能建立 10MBytes 以下的容量的文件
[dmtsai@study ~]$ ulimit -f 10240
[dmtsai@study ~]$ ulimit -a | grep 'file size'
core file size 			(blocks, -c) 0
file size 				(blocks, -f) 10240 <==最大量为 10240Kbyes,相当 10Mbytes
[dmtsai@study ~]$ dd if=/dev/zero of=123 bs=1M count=20
File size limit exceeded (core dumped) <==尝试建立 20MB 的文件,结果失败了!
[dmtsai@study ~]$ rm 123
<==赶快将这个文件删除啰!同时你得要注销再次的登入才能解开 10M 的限制

还记得我们在第七章 Linux 磁盘文件系统里面提到过,单一 filesystem 能够支持的单一文件大小与block 的大小有关。但是文件系统的限制容量都允许的太大了!如果想要让使用者建立的文件不要太大时, 我们是可以考虑用 ulimit 来限制使用者可以建立的文件大小喔!利用 ulimit -f 就可以来设定了!例如上面的范例二,要注意单位喔!单位是 Kbytes。 若改天你一直无法建立一个大容量的文
件,记得瞧一瞧 ulimit 的信息喔!

想要复原 ulimit 的设定最简单的方法就是注销再登入,否则就是得要重新以 ulimit 设定才行! 不过,要注意的是,一般身份使用者如果以 ulimit 设定了 -f 的文件大小, 那么他『只能继续减小文件容量,不能增加文件容量喔!』另外,若想要管控使用者的 ulimit 限值, 可以参考第十三章的 pam 的介绍。

猜你喜欢

转载自blog.csdn.net/qq_52835624/article/details/119237465