以非root用户身份以编程方式删除Linuxcaching

出于testing目的,我可以通过写入procfs下的Linux中的drop_caches文件来删除caching的内存。 我只能以root身份执行此操作。 这是在embedded式Linux上,所以没有sudo。

sync; echo 3 > /proc/sys/vm/drop_caches 

我可以用c ++编写程序来编写文件 – > 如何以编程方式在Linux系统上清除C ++中的文件系统内存caching?

 sync(); std::ofstream ofs("/proc/sys/vm/drop_caches"); ofs << "3" << std::endl; 

面临的挑战是想以非root用户的身份运行应用程序。 重新启动时,权限如下所示:

 # cd /proc/sys/vm/ # ls -lrt drop_caches -rw-r--r-- 1 root root 0 Feb 13 19:50 drop_caches 

而且你似乎无法改变这些权限 – 即使是root用户:

 # chmod 777 drop_caches chmod: drop_caches: Operation not permitted # chown user:user drop_caches chown: drop_caches: Operation not permitted 

我怎么能在Linux上完成这个? 是否有可能更改procfs文件的权限? 如有必要,我可以完全自定义我的内核。 谢谢 –

您可以创建一个辅助可执行文件(非常小心,这是危险的),任何用户都可以使用root权限运行它。

这被称为setuid 。

出于安全原因,您不能设置一个shell脚本。

从wiki中提取如何使用它:

setuid和setgid位通常通过将高位八进制数字设置为4(对于setuid)或2(对于setgid)来使用命令chmod进行设置。 “chmod 6711 file”将设置setuid和setgid位(2 + 4 = 6)

更新

正如@rici指出的那样,您仍然需要拥有执行权限才能执行此过程,因此您可以删除others执行权限并仅将其保留在group 。 所以,只有谁是这个组的成员才能执行它。