Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)

一、ulimit命令

  • 功能:ulimit可用于查看一个shell启用时所占用资源资源的限制(文件数量、可以使用CPU的时间、使用的内存量等)。当然也可以来设置这些资源

格式

ulimit [选项] [配额值]
  • 选如如下:
    • -a:后面不加任何选项与参数,列出当前系统所有的限制信息
    • -H:设置硬资源限制(严格的设置)。不能超过后面的配额值的数值
    • -S:设置软资源限制(警告的设置)。可以超过这个设置值,若超过系统给出警告。(一般警告设置值比严格设置值低,这样可以起到警告作用)
    • -c  限制每个core文件的最大容量,单位kbytes。(当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),这种文件称为内核文件(core file))
    • -f  <文件大小>:此shell可以建立的最大文件容量,单位为kbytes
    • -d  <数据节区大小>:进程可使用的最大段内存容量,单位为kbytes
    • -l:最大可加锁的内存大小,单位为kbytes
    • -t:最大可占用CPU时间,单位为秒
    • -u  <程序数目>:单一使用者可以使用的最大进程数量
    • -n  <文件数目>:一个进程可以最多打开多少个文件
    • -m  <内存大小>:指定可使用内存的上限,单位为KB
    • -p  <缓冲区大小>:指定管道缓冲区的大小,单位512字节
    • -s <堆叠大小>:指定堆叠的上限,单位为KB
    • -v  <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB

注意事项

  • 一般用户,使用-f设置文件的大小,只能设置继续减小文件的容量,不能增加文件容量
  • 不同的用户,所设置的数值都不同
  • ulimit在命令行设置的值只在此次会话中生效,退出后再重新登录,数值又恢复。如果想要永久性保存配置,请参阅下面的/etc/security/limit.conf配置文件与/etc/security/limit.d/目录

演示案例

  • 查看当前使用者的各种限制数据数值:

    • core file size:内核文件大小。0代表不产生core文件
    • file size:最大可建立的文件大小。unlimited代表无限制
    • open files:同时可打开的文件数量,1024个

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第1张图片

  • 设置当前使用者仅能最大建立10M的文件:

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第2张图片

  • 设置core文件的大小为无限制:

ulimit -c unlimited

二、/etc/security/limits.conf

  • 概念:/etc/security/limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件
  • 工作原理:limits.conf是pam_limits.so的配置文件,然后/etc/pam.d/下的应用程序调用pam_***.so模块。譬如说,当用户访问服务器,服务程序将请求发送到PAM模块,PAM模块根据服务名称在/etc/pam.d目录下选择一个对应的服务文件,然后根据服务文件的内容选择具体的PAM模块进行处理

注意事项

  • ①要使 limits.conf 文件配置生效,必须要确保 pam_limits.so被加入到启动文件中。可以通过/etc/pam.d/login文件查看示范加载:

  • ②该配置文件中的配置参数只针对于用户/组,不会影响整个系统服务的资源限制。如果想要限制系统资源配置,请参阅:/etc/sysctl.conf(文章最后有链接)
  • ③与ulimit的关系:ulimit命令设置的内容只能在本次会话中生效,当会话结束之后设置就会失效,配置此文件可以使内容永久生效
  • ④/etc/security/limit.d/目录下的配置会覆盖/etc/security/limit.conf配置文件中的内容。详情参阅下面的/etc/security/limit.d/目录介绍

系统限制

  • 我们在上面提到过,/etc/security/limits.conf配置文件只针对用户/组,不会影响整个系统服务的资源限制
  • /etc/sysctl.conf是用于控制内核相关的配置参数,它的内容全部是对应/proc/sys/这个目录的子目录及文件,当我们配置/etc/security/limits.conf的时候,其配置的值不能超过/proc/sys/目录下对应的配置的值
  • 关于/etc/sysctl.conf与/proc/sys/请参阅文章最后链接

演示案例

  • /proc/sys/fs/nr_open中的配置表示单个进程打开文件句柄数上限,可以通过命令查看其值为1048576

  • 因此当我们去配置/etc/security/limits.conf文件的时候,就不能将nofile的hard limit设置超过1048576
  • 由于修改/etc/security/limits.conf文件比较麻烦,我们就不演示了。下面直接使用ulimit来修改演示,当设置超过1048576的时候报错

配置文件内容

# /etc/security/limits.conf
#
#This file sets the resource limits for the users logged in via PAM.
#该文件为通过PAM登录的用户设置资源限制

#It does not affect resource limits of the system services.
#它不影响系统服务的资源限制

#Also note that configuration files in /etc/security/limits.d directory,
#which are read in alphabetical order, override the settings in this
#file in case the domain is the same or more specific.
#请注意/etc/security/limits.d下按照字母顺序排列的配置文件会覆盖 /etc/security/limits.conf中的
#domain相同的的配置

#That means for example that setting a limit for wildcard domain here
#can be overriden with a wildcard setting in a config file in the
#subdirectory, but a user specific setting here can be overriden only
#with a user specific setting in the subdirectory.
#这意味着,例如使用通配符的domain会被子目录中相同的通配符配置所覆盖,但是某一用户的特定配置
#只能被字母路中用户的配置所覆盖。其实就是某一用户A如果在/etc/security/limits.conf有配置,当
#/etc/security/limits.d子目录下配置文件也有用户A的配置时,那么A中某些配置会被覆盖。最终取的值是 #/etc/security/limits.d 下的配置文件的配置

#
#Each line describes a limit for a user in the form:
#每一行描述一个用户配置
#   

#Where:
# can be:
# - a user name    一个用户名
# - a group name, with @group syntax    用户组格式为@GROUP_NAME
# - the wildcard *, for default entry    默认配置为*,代表所有用户
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit 
#
# can have the two values:
# - "soft" for enforcing the soft limits 
# - "hard" for enforcing hard limits
#有soft,hard和-,soft指的是当前系统生效的设置值,软限制也可以理解为警告值。
#hard表明系统中所能设定的最大值。soft的限制不能比hard限制高,用-表名同时设置了soft和hard的值。

# can be one of the following:    可以使以下选项中的一个
# - core - limits the core file size (KB)    限制内核文件的大小。
# - data - max data size (KB)    最大数据大小
# - fsize - maximum filesize (KB)    最大文件大小
# - memlock - max locked-in-memory address space (KB)    最大锁定内存地址空间
# - nofile - max number of open file descriptors 最大打开的文件数(以文件描叙符,file descripter计数) 
# - rss - max resident set size (KB) 最大持久设置大小
# - stack - max stack size (KB) 最大栈大小
# - cpu - max CPU time (MIN)    最多CPU占用时间,单位为MIN分钟
# - nproc - max number of processes 进程的最大数目
# - as - address space limit (KB) 地址空间限制 
# - maxlogins - max number of logins for this user    此用户允许登录的最大数目
# - maxsyslogins - max number of logins on the system    系统最大同时在线用户数
# - priority - the priority to run user process with    运行用户进程的优先级
# - locks - max number of file locks the user can hold    用户可以持有的文件锁的最大数量
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to values: [-20, 19] max nice优先级允许提升到值
# - rtprio - max realtime pr iority
#
#   
#

#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@st

配置格式

  • 格式如下:
   
  • domain,可以取得值如下:
    • 用户名
    • 组名,要以@开头
    • *:表示所有用户
    • %:也用于组匹配,for maxlogin limit
  • domain注意事项:
    • 组和通配符的设置不对root用户起作用
    • 如果想要对root用户施加限制,必须显式指定
  • type,可以取得值如下:
    • hard:设置硬资源限制(严格的设置),不能超过后面的配额值的数值。相当于ulimit的-H选项
    • soft:设置软资源限制(警告的设置),可以超过这个设置值,若超过系统给出警告(一般警告设置值比严格设置值低,这样可以起到警告作用)。相当于ulimit的-S选项
  • item,可以取得值如下:
    • core:限制内核文件的大小(KB)
    • data :最大数据大小(KB)
    • fsize:最大文件大小(KB)
    • memlock:最大锁定内存地址空间(KB)
    • nofile:最大打开的文件数(以文件描叙符,file descripter计数)
    • rss:最大持久设置大小(KB)
    • stack:最大栈大小(KB)
    • cpu:最多CPU占用时间 (MIN)
    • nproc:进程的最大数目
    • as:地址空间限制 (KB)
    • maxlogins:此用户允许登录的最大数目
    • maxsyslogins:系统最大同时在线用户数
    • priority:运行用户进程的优先级
    • locks:用户可以持有的文件锁的最大数量
    • sigpending - max number of pending signals
    • msgqueue - max memory used by POSIX message queues (bytes)
    • nice:max nice priority设置,可取值的范围为:[-20,19]
    • rtprio:max realtime priority
    • chroot:change root to directory (Debian-specific)
  • value:要设置的值。如果设置为unlimited表示无限制

配置的几点注意事项

  • ①不能将nofile设置为unlimited,noproc可以
  • ②当把nofile设置为unlimited之后,就无法使用ssh登录
  • ③soft的配置的值不能大于hard
  • ④对于某一特定选项,soft和hard都设置才能生效,只配置一项不会生效(重点)
  • ⑤配置之后,需要退出当前会话重新登录,或者重新启动才生效

配置演示案例

  • 第一步:我们使用ulimit将文件描述符的值设置为1048576

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第3张图片

  • 第二步:现在我们退出当前会话重新登录,发现原先设置的值消失

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第4张图片

  • 第三步:现在我们修改/etc/security/limits.conf文件,添加下面的内容,设置所有用户可打开的最大文件描述符数量为1048576

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第5张图片

  • 第四步:然后退出当前会话重新登录,再次查看,看见设置成功

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第6张图片

三、/etc/security/limit.d/

  • 我们也可以在/etc/security/limits.d/目录下建立配置文件,然后在配置文件里面设置配置参数,其功能与/etc/security/limits.conf是一样的
  • 覆盖注意事项:如果/etc/security/limits.conf文件中配置了相关参数,/etc/security/limit.d/目录下的配置文件中也配置了相关参数,那么/etc/security/limit.d/目录下的配置文件中的内容会覆盖/etc/security/limits.conf文件中的内容

覆盖演示案例

  • 第一步:查看系统当前系统用户可打开的最大文件数量为1024个

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第7张图片

  • 第二步:现在我们修改/etc/security/limits.conf文件,添加下面的内容,设置所有用户可打开的最大文件描述符数量为1048576

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第8张图片

  • 第三步:然后退出当前会话重新登录,再次查看,看见成功设置为1048576个

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第9张图片

  • 第四步:现在我们来到/etc/security/limits.d/目录,在目录下添加一个*-nofile.conf配置文件,设置所有用户可打开的最大文件描述符数量为1000000个

  • 第五步:然后退出当前会话重新登录,再次查看,可以看到open-files被设置为了100000个,说明/etc/security/limit.d/目录下配置文件的内容会覆盖/etc/security/limits.conf配置文件中的内容

Linux(入门基础):57---文件系统及程序的限制(ulimit命令、/etc/security/limits.conf、/etc/security/limit.d/)_第10张图片

四、附加

  • /etc/sysctl.conf配置文件、sysctl命令、 /proc/sys/目录,请参阅:https://blog.csdn.net/qq_41453285/article/details/106973982

你可能感兴趣的:(Linux(入门基础))