**已关闭。**此问题不符合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?如有任何帮助,我们将不胜感激。
2条答案
按热度按时间hc8w905p1#
ulimit
与cd
一样是一个内置的shell,而不是一个单独的程序。sudo
查找要运行的二进制文件,但是没有ulimit
二进制文件,这就是为什么您会收到错误消息。你有几个选择:
1.在较新的linux版本上,通常有一个
prlimit
命令,它是一个二进制文件,这意味着如果需要,你可以sudo
它。快跑
字符串
以增加当前 shell 的软限制。
$$
是一个魔术,它被解释为“当前shell的进程id”。如果该命令提示“Operation not permitted”,则
sudo prlimit
在大多数情况下都可以工作。型
如果使用
sudo
仍然得到“Operation not permitted”,则可能遇到了其他内核限制,比如超过了最大允许限制。1.你以前可以依靠跑步
型
这可能仍然适用于较旧的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 来看风险要小得多,如果可用,您绝对应该使用它。
jbose2ul2#
我以前也处理过类似的问题。由于shell脚本没有setuid机制(因为它不安全),我发现编写一个简单的带有setuid的C Package 器就足够了,然后在删除特权和执行shell脚本之前使用系统调用修改正在运行的进程的ulimits。