与档案系统及程序的限制关系: ulimit
想像一个状况:我的 Linux 主机里面同时登入了十个人,这十个人不知怎么搞的, 同时开启了 100 个档案,每个档案的大小约 10MBytes ,请问一下, 我的 Linux 主机的记忆体要有多大才够? 10*100*10 = 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 file locks (-x) unlimited 范例二:限制使用者仅能建立 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 的限制 |
单一 filesystem 能够支援的单一档案大小与 block 的大小有关。但是档案系统的限制容量都允许的太大了!如果想要让使用者建立的档案不要太大时, 我们是可以考虑用 ulimit 来限制使用者可以建立的档案大小喔!利用 ulimit -f 就可以来设定了!例如上面的范例二,要注意单位喔!单位是 Kbytes。 若改天你一直无法建立一个大容量的档案,记得瞧一瞧 ulimit 的资讯喔!