shell 使用sudo ulimit [closed]时未找到命令

7eumitmz  于 2023-08-07  发布在  Shell
关注(0)|答案(2)|浏览(118)

**已关闭。**此问题不符合Stack Overflow guidelines。它目前不接受回答。

这个问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为该问题与another Stack Exchange site上的主题相符,您可以发表评论,说明在何处可以回答该问题。
10年前就关门了。
Improve this question
我使用的是ubuntu 12.04,在上面运行ulimit -n,显示1024,我想将打开文件的限制从1024增加到65535,所以我尝试了以下命令:

sudo ulimit -n 65535

字符串
但我得到以下错误:

sudo: ulimit: command not found


如何将文件限制从1024增加到65535?如有任何帮助,我们将不胜感激。

hc8w905p

hc8w905p1#

ulimitcd一样是一个内置的shell,而不是一个单独的程序。sudo查找要运行的二进制文件,但是没有ulimit二进制文件,这就是为什么您会收到错误消息。
你有几个选择:
1.在较新的linux版本上,通常有一个prlimit命令,它是一个二进制文件,这意味着如果需要,你可以sudo它。
快跑

prlimit --pid=$$ --nofile=65000:

字符串
以增加当前 shell 的软限制。$$是一个魔术,它被解释为“当前shell的进程id”。
如果该命令提示“Operation not permitted”,则sudo prlimit在大多数情况下都可以工作。

sudo prlimit --pid=$$ --nofile=65000


如果使用sudo仍然得到“Operation not permitted”,则可能遇到了其他内核限制,比如超过了最大允许限制。
1.你以前可以依靠跑步

sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"


这可能仍然适用于较旧的Linux安装。它会给予你一个新的shell,没有root权限,但有更高的限制。exec会导致新的shell使用sudo权限替换该进程,因此在退出该shell后,您不会意外地再次成为root用户。
然而,这似乎并不可靠地工作在较新的(2022+?)发行版,其中su重新应用默认限制。
prlimit方法要好得多,因为您不必担心运行root shell或从root shell派生的进程的安全性。如果你感到绝望,一个似乎在较新发行版上工作的危险变体是怪物sudo -E sh -c "ulimit -n 65000 && exec setpriv --reuid=$(id -u) --regid=$(id -g) --inh-caps=-all --groups=$(groups|tr ' ' ,) -- env USER=\"$USER\" LOGNAME=\"$LOGNAME\" \"$SHELL\" --login"
然而,选项#1要简单得多,从安全Angular 来看风险要小得多,如果可用,您绝对应该使用它。

jbose2ul

jbose2ul2#

我以前也处理过类似的问题。由于shell脚本没有setuid机制(因为它不安全),我发现编写一个简单的带有setuid的C Package 器就足够了,然后在删除特权和执行shell脚本之前使用系统调用修改正在运行的进程的ulimits。

相关问题