出于测试目的,我可以通过在procfs下写入Linux中的drop_caches文件来删除缓存内存。我只能以root身份执行此操作。这是在嵌入式Linux上,因此没有sudo。
sync; echo 3 > /proc/sys/vm/drop_caches
我可以通过在帖子中执行某些操作来以c ++编程方式写入文件 - > How to programmatically clear the filesystem memory cache in C++ on a Linux system?
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文件的权限?如有必要,我可以完全自定义我的内核。谢谢 -
答案 0 :(得分:3)
您可以创建一个辅助可执行文件(非常小心,它很危险),任何用户都可以使用root权限运行它。
这称为setuid。
出于安全原因,您不能setuid
一个shell脚本。
从wiki中提取如何使用它:
setuid和setgid位通常使用命令chmod by设置 将高阶八进制数设置为4(对于setuid)或2(对于 setgid的)。 “chmod 6711 file”将同时设置setuid和setgid位 (2 + 4 = 6)
正如@rici所说,您仍然需要具有执行权限来执行此过程,因此您可以从others
删除执行权限,并仅将其保留在group
上。因此,只有谁是该组的成员才能执行它。