ulimit -a 是查看当前 shell 会话所有资源软限制的命令,输出包括 open files(-n)、max user processes(-u)等各项限制值,显示格式为“资源名(单位,选项) 当前软限制”,unlimited 表示无软限制但硬限制可能仍存在。

ulimit -a 是查看当前 Shell 会话资源限制的快捷命令,它显示的是该 Shell 进程及其后续子进程所继承的软硬限制(soft/hard limits)。但要注意:它只反映当前会话的设置,不体现系统级默认值或其它会话的配置。
一、用 ulimit -a 查看当前所有限制
直接运行以下命令:
ulimit -a
输出类似:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7811
max locked memory (kbytes, -l) 16384
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) 7811
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
每行格式为:资源名(单位,选项标志) 当前软限制值。若显示 unlimited,表示该资源无软限制(但硬限制可能仍存在,需用 ulimit -Ha 单独确认)。
二、区分软限制与硬限制
每个资源都有两个阈值:
- 软限制(soft limit):进程实际生效的上限,普通用户可调高至不超过硬限制
- 硬限制(hard limit):软限制的天花板,普通用户只能降低,只有 root 可调高
常用查看方式:
- ulimit -a → 显示所有软限制
- ulimit -Ha → 显示所有硬限制
- ulimit -S → 仅显示软限制(简洁模式)
- ulimit -H → 仅显示硬限制(简洁模式)
三、临时修改当前会话的限制值
修改仅对当前 Shell 及其派生进程有效,退出即失效:
- 设软限制(如打开文件数到 4096):ulimit -n 4096
- 设硬限制(需有权限,如 root 或已提升):ulimit -Hn 8192
- 同时设软硬限制(-S 和 -H 可省略,默认设软,加 -H 才设硬):ulimit -n 4096 && ulimit -Hn 8192
- 取消某项限制(设为 unlimited):ulimit -n unlimited
⚠️ 注意:某些限制(如 -u 最大进程数、-l 锁定内存)可能受内核参数或 PAM 限制,即使 root 也需先调整底层配置才能提高硬限制。
四、永久生效需修改系统配置
ulimit 命令本身无法永久生效。要让限制在每次登录时自动应用,需配置:
-
/etc/security/limits.conf(适用于 PAM 登录,如 ssh、su、图形终端):
* soft nofile 65536
* hard nofile 65536
username soft nproc 4096 -
/etc/systemd/system.conf 或服务 unit 文件(systemd 环境下,影响 systemd 启动的服务):
DefaultLimitNOFILE=65536
DefaultLimitNPROC=4096 - Shell 初始化文件(如 ~/.bashrc、/etc/profile)中写 ulimit -n 65536 —— 仅对交互式非登录 shell 有效,且不能突破 limits.conf 设定的硬限制
修改后需重新登录或重启对应服务才能生效,部分场景还需检查 pam_limits.so 是否已在 /etc/pam.d/ 对应服务中启用。











