如何更改命令以在没有超级用户权限但具有更改后的限制值的情况下运行?

如何更改命令以在没有超级用户权限但具有更改后的限制值的情况下运行?

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.htmlhttps://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\""

相关内容