sudo 无法给出 ulimit 命令?

sudo 无法给出 ulimit 命令?

当我尝试为另一个用户编写解决方案时,我注意到 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 中内置的命令,例如ulimitcd

我们已经向您介绍了两种解决此问题的方法 — 使用 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

cd外部命令来自执行程序

sudo /command/cd /etc vim rc.local

相关内容