为了解决这个问题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
。
答案1
根据联机帮助页,ulimit
“提供对 shell 及其启动的进程可用资源的控制”。所以该ulimit
值对于当前 shell 有效。
您正在ulimit
子 shell 中调用,当它终止时,您将返回到默认ulimit
值。
[root@centos7 ~]# ulimit -c
0
[root@centos7 ~]# ulimit -c 1024
[root@centos7 ~]# ulimit -c
1024
答案2
该ulimit
命令适用于调用它的 shell 及其后代。
该命令su
将具有您设置的限制。父 shell 不受影响。
答案3
我很困惑,想知道我是否错过了什么
我认为您错过了(或没有认识到)/etc/security/limits.conf
这是来自 Suse Linux Enterprise Server 11.4 的模板,以及我如何将堆栈大小限制全局设置为无限制,而不是默认的 8KB。
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
#
#Where:
#<domain> can be:
# - an user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> 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 files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (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]
# - rtprio - max realtime priority
#
* hard stack unlimited
* soft stack unlimited
* hard nofile 100000
* soft nofile 100000
这是来自 SLES,limits.conf
名称和位置可能会有所不同,具体取决于您的 Linux 发行版。此处设置的值将是全局的,并且对所有内容/每个人都有效,而不是ulimit
像所描述的那样仅限于 shell 窗口的范围。
请注意,某些项目设置不当可能会导致您无法登录系统
答案4
您自己的答案现在包含问题中已经需要的信息:
您的系统有一个不寻常的设置。
在 Solaris 上,您有以下限制和 POSIX 资源集:
LC_ALL=C ulimit -aHS
-t: time(seconds) unlimited:unlimited
-f: file(blocks) unlimited:unlimited
-d: data(kbytes) unlimited:unlimited
-s: stack(kbytes) 10240:unlimited
-c: coredump(blocks) unlimited:unlimited
-n: nofiles(descriptors) 256:65536
-v: memory(kbytes) unlimited:unlimited
在 Linux 上,您有以下典型限制:
ulimit -aSH
-t: time(seconds) unlimited:unlimited
-f: file(blocks) unlimited:unlimited
-d: data(kbytes) unlimited:unlimited
-s: stack(kbytes) 8192:unlimited
-c: coredump(blocks) 0:unlimited
-m: memoryuse(kbytes) unlimited:unlimited
-u: processes(count) 26633:26633
-n: nofiles(descriptors) 1024:1048576
-l: memlock(kbytes) 64:64
-M: addressspace(kbytes) unlimited:unlimited
-L: locks(count) unlimited:unlimited
-i: sigpending(count) 26633:26633
-q: messagequeues(count) 819200:819200
-e: schedpriority(nice) 0:0
-r: rtpriority(nice) 0:0
-R: rttime(usec) unlimited:unlimited
如您所见,硬限制比您的大得多。这就是为什么没人能理解你的问题的原因。
由于允许普通用户将软限制提高到硬限制,因此您问题中的请求不需要 root 权限。