我使用的是Ubuntu 12.04,在上面运行ulimit -n命令,结果显示为1024。我想将我的打开文件限制从1024增加到65535,因此我尝试了以下命令:
sudo ulimit -n 65535
但我收到了以下错误:
sudo: ulimit: command not found
如何将文件限制从1024增加到65535?非常感谢您的帮助。
我使用的是Ubuntu 12.04,在上面运行ulimit -n命令,结果显示为1024。我想将我的打开文件限制从1024增加到65535,因此我尝试了以下命令:
sudo ulimit -n 65535
但我收到了以下错误:
sudo: ulimit: command not found
如何将文件限制从1024增加到65535?非常感谢您的帮助。
cd
一样的shell内置命令,而不是一个独立的程序。sudo
会寻找要运行的二进制文件,但没有ulimit
二进制文件,这就是为什么你会收到错误消息的原因。prlimit
的命令,它是一个二进制文件,这意味着如果需要的话,你可以使用sudo
来执行它。prlimit --pid=$$ --nofile=65000
。其中$$
是一个特殊符号,表示“当前shell的进程ID”。sudo prlimit
来解决:
sudo prlimit --pid=$$ --nofile=65000
如果使用sudo
仍然出现“Operation not permitted”的错误,可能是因为遇到了其他内核限制,比如超过了最大允许限制。sudo sh -c "ulimit -n 65535 && exec su $LOGNAME"
这将给你一个没有root权限但具有提高限制的新shell。exec
命令会使新的shell替换掉具有sudo
权限的进程,因此在退出该shell后,你不会意外地再次成为root用户。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"
。sudo sh -c "ulimit -c 1024 && exec su $LOGNAME"
如何解决任何问题。 - Tim我以前也遇到过这样的问题。由于 shell 脚本没有 setuid 机制(因为不安全),我发现编写一个简单的 C 包装器并使用 setuid 进行系统调用来修改正在运行进程的 ulimits,然后降低权限并执行您的 shell 脚本是足够的。