为了解决 https://unix.stackexchange.com/a/446428/674 中的问题,我关注了https://stackoverflow.com/a/17483998/156458,但它没有设置核心文件限制大小?
$ sudo sh -c "ulimit -c 1024 && exec su t"
$ ulimit -c
0
这种方式是否会临时更改当前 shell 的核心文件限制大小,还是永久更改所有用户或当前用户的所有 shell?
更新:原始帖子https://stackoverflow.com/a/17483998/156458和https://unix.stackexchange.com/a/238413/674和https://unix.stackexchange.com/a/169035/674都推荐使用
sudo sh -c "ulimit -c 1024 && exec su $LOGNAME"
。但是两者ulimit -c 1024
都只exec su $LOGNAME"
影响由 创建的shellsudo
,那么该命令的目的是什么?exec su $LOGNAME"
也没有做任何有意义的事情来利用更改的限制。
注意:我关注的是为什么上述方法不起作用,尽管还有其他方法可以解决这个问题:
我应该将使用新限制值的命令放在 sudo 执行的 shell 中
例如
$ sudo sh -c "ulimit -c 1024 && sleep 100" ^\Quit $ ls core
- 我也可以尝试修改
/etc/security/limits.conf
.
根据手册页,
ulimit
“提供对 shell 可用资源和由它启动的进程的控制”。因此该ulimit
值对当前 shell 有效。您正在调用
ulimit
子shell,当它终止时,您将返回默认ulimit
值。该
ulimit
命令适用于调用它的 shell 及其后代。该命令
su
将具有您设置的限制。父外壳不受影响。我认为您缺少(或无法识别)
/etc/security/limits.conf
这是来自 Suse Linux Enterprise Server 11.4 的模板,以及我如何将堆栈大小限制全局设置为无限制而不是默认的 8KB。这是来自 SLES,
limits.conf
名称和位置可能因您的 linux 发行版而异。在这里设置值将是全局的,并且对所有/每个人都有效,而不是使用ulimit
它,如前所述,它会被限制在 shell 窗口的范围内。请注意,某些项目设置不当可能会阻止您登录系统
我想谈谈这部分:
我做了一些实验,运行后发现
ulimit -c 1024
确实修改了限制值,但只能在sudo
原shell下的shell下;exec su $LOGNAME"
将在原始外壳下给我一个外壳,并将su
限制重置为 user 的默认值。sudo
su $LOGNAME"
$LOGNAME
所以链接建议的命令不起作用。
对于核心文件大小:
对于打开文件的数量,在https://unix.stackexchange.com/a/238413/674重做实验,但设置不同的限制值
您自己的答案现在包含问题中已经需要的信息:
您的系统设置异常。
在 Solaris 上,您有以下限制和 POSIX 资源集:
在 Linux 上,您有以下典型限制:
如您所见,硬限制比您的要大得多。这就是为什么没人能理解你的问题的原因。
由于允许普通用户将软限制提高到硬限制,因此您问题中的请求不需要root权限。