当我尝试为另一个用户编写解决方案时,我注意到 sudo ulimit -c 返回“未找到命令”。因此我尝试了这个:
$ sudo ulimit -c
sudo: ulimit: command not found
$ ulimit -c
0
$ sudo -i
# ulimit -c
0
所以... 它以 root 身份运行,并且不使用 sudo 也可以运行,但使用 sudo 则不行。这是一个错误吗?
答案1
ulimit
是 shell 内置命令,例如cd
您不能使用:
sudo cd /test/
同样你不能使用
sudo ulimit -c
这不是一个单独的程序。sudo
寻找要运行的二进制文件,但没有ulimit
二进制文件。
如果您想更改限制,则可以在文件中定义限制。这些限制在或limits.conf
中定义。您可以从中获取帮助/etc/security/limits.conf
/etc/security/limits.d/
这个问题
或者
使用如下的 shell:
sudo sh -c "ulimit -c"
sudo bash -c "ulimit -c"
sudo bash -c ulimit
sudo sh -c "ulimit -n"
答案2
这是一个错误吗?
不。 sudo
不了解各种 shell 中内置的命令,例如ulimit
和cd
。
我们已经向您介绍了两种解决此问题的方法 — 使用 shell 作为中介并在命令行之外调整限制。下面是第三种方法,适用于尝试使用此类命令修改进程状态而不是显示进程状态的情况。
如果可以运行 shell 内置命令或sudo ulimit …
来sudo cd …
实际修改进程状态,那将不是特别有用。在限制或工作目录已更改的进程中,之后不会运行任何其他操作。只需调整进程限制或工作目录即可立即退出进程。
但有一些工具集具有这些功能的链式加载外部命令。它们的作用与 shell 内置命令相同,但是还链负载其他完成此操作后,即可开始编程。
他们是各种 daemontools 系列工具集— daemontools、daemontools-encore、nosh、perp、s6、freedt 和 runit。
设置限制然后链接加载到另一个程序的工具有多种softlimit
(daemontools)、softlimit
(freedt)、softlimit
(daemontools-encore)softlimit
(吃),s6-softlimit
(s6),chpst
(runit),以及runlimit
(perp)。因此,可以使用 daemontools、daemontools-encore、nosh 或 freedt 使用以下命令运行改变核心文件大小限制的 vim:
sudo 软限制-c 0 vim
nosh 也有类似的ulimit
命令使用不同的单位大小来表示与 一起使用的各种限制softlimit
:
sudo ulimit -c 0 vim
更改目录也一样,可以使用 noshchdir
外部链加载命令:
sudo chdir /etc/vim rc.local
sudo /command/cd /etc vim rc.local