从https://stackoverflow.com/a/17483998/156458
虽然您确实需要 root 身份才能将限制提高到 65535,但您可能不想以 root 身份运行程序。因此,在提高限制后,您应该切换回当前用户。
为此,请运行:
sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"
从为什么以下方法不会改变核心文件限制大小?,我想做以下事情:
我应该将使用新限制值的命令放在 sudo 执行的 shell 中
例如
$ sudo sh -c "ulimit -c 1024 && sleep 100" ^\Quit $ ls core
ulimit -c 1024
需要超级用户权限,而不sleep 100
需要。
如何更改我的命令,以便它sleep 100
不以超级用户权限运行,而是以更改后的限制值运行?
更新:
我尝试了Hauke重播中的命令,怀疑其失败的原因是因为它 sudo -c
在Linux上不起作用,并且仍然想知道他使用的意图sudo -c
是什么:
$ sudo sh -c "ulimit -c 1024 && sudo -u nobody -c \"sleep 100\""
[sudo] password for t:
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
我尝试了以下两个命令,但整个命令立即返回而不是运行sleep 100
。为什么?
$ sudo bash -c "ulimit -c 1024 && exec su $LOGNAME && sleep 100"
$ sudo bash -c "ulimit -c 1024 && exec bash -c \"su $LOGNAME; sleep 100\" "
$
以下命令创建一个核心文件。但第二个sudo
默认情况下不会清除限制吗?我听说sudo
经常或总是清理执行环境?
$ ulimit -c
0
$ sudo sh -c "ulimit -c 1024 && sudo -u nobody sleep 100"
我发现http://jdebp.eu./Softwares/nosh/guide/ulimit.html从https://unix.stackexchange.com/a/446619/674, 和想知道如何使用 shell 脚本实现类似的事情:
大多数 shell 都有一个内置的 ulimit 命令,该命令不链接并且具有附加的交互功能。请参阅每个 shell 的手册以了解其内置命令。此命令更常与 exec(1) 和 nosh(1) 一起使用。
谢谢。
答案1
sudo sh -c "ulimit -c 1024 && sudo -u nobody -c \"sleep 100\""