“echo 3 > /proc/sys/vm/drop_caches” - 以 root 身份拒绝权限

Bra*_*one 41 linux permissions proc virtualization openvz

我目前在缓存方面遇到了一些问题。现在有点太多了,所以我想清除它。我用谷歌搜索并找到了这个小命令:sync && echo 3 > /proc/sys/vm/drop_caches.
我通过 SSH 以 root 身份登录(不使用 sudo)。这些是我所做的尝试:

root@server: ~ # ll /proc/sys/vm/drop_caches
-rw-r--r-- 1 root root 0 15. Jan 20:21 /proc/sys/vm/drop_caches

root@server: ~ # echo 3 > /proc/sys/vm/drop_caches
-bash: /proc/sys/vm/drop_caches: Permission denied

root@server: ~ # sudo su -c "echo 3 > /proc/sys/vm/drop_caches"
bash: /proc/sys/vm/drop_caches: Permission denied

root@server: ~ # echo 3 | sudo tee /proc/sys/vm/drop_caches
tee: /proc/sys/vm/drop_caches: Permission denied
3
Run Code Online (Sandbox Code Playgroud)

它是一台运行 Debian 的远程机器。据我所知,这台机器中有一些 vCore,它使用 Virtuozzo 进行虚拟化。
我真的只想清除缓存(所以我只能使用 SSH 访问它)
我也尝试将其注册为 cronjob。但它也只是失败了!

小智 58

sudo 必须覆盖整个重定向,以便它可以完全由 root 执行:

$ sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"
Run Code Online (Sandbox Code Playgroud)

  • 这实际上对我有用(回声的二进制位置正确) (7认同)
  • 或者,您可以使用 tee 代替:`echo 3 | 须藤三通/proc/sys/vm/drop_caches` (4认同)

gol*_*cks 31

我通过 SSH 以 root 身份登录...这是一台运行 Debian 的远程机器。

它实际上是一台远程机器,还是只是一个远程系统?如果这是某个地方的 VPS切片,(至少某些形式的)操作系统虚拟化(例如 openVZ)将不允许从容器内进行。你不运行机器,你只运行你的切片。

  • 就像***不可能***??? (2认同)
  • @BrainStone - 我使用 OpenVZ,这是不可能的! (2认同)

cha*_*aos 13

这是操作系统级虚拟化下的正常行为。这只能由对硬件节点具有 root 访问权限的人执行。

例如,对于OpenVZ,您没有自己的内核实例,因此被限制执行这样的命令。

所有共享相同的页面缓存,因此要仅删除您的实例的缓存,内核必须检查该页面是否属于您以及其他实例是否也没有使用该页面。

使用另一种虚拟化技术,如KVMXen,这可能会奏效。

  • 区别在于*操作系统虚拟化*(OpenVZ、LXC)和*平台虚拟化*(QEMU、Xen),两者相对而言各有优缺点。 (2认同)

mch*_*hid 12

当您需要以 root 身份回显时,您可以使用echopiped 来sudo tee允许所需的适当权限。

echo 3 | sudo tee /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

使用tee --help查看更多选项。