出于测试目的,我可以通过写入 Linux 中 procfs 下的 drop_caches 文件来删除缓存内存。我只能以 root 身份执行此操作。这是在嵌入式 Linux 上,所以没有 sudo。
sync; echo 3 > /proc/sys/vm/drop_caches
我可以通过在帖子中执行一些操作,以 C++ 编程方式写入文件 -->如何在 Linux 系统上用 C++ 以编程方式清除文件系统内存缓存? https://stackoverflow.com/questions/6818606/how-to-programmatically-clear-the-filesystem-memory-cache-in-c-on-a-linux-syst/6818653#6818653
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 http://en.wikipedia.org/wiki/Setuid.
出于安全原因,您不能setuid
一个 shell 脚本。
从 wiki 中提取如何使用它:
setuid 和 setgid 位通常使用 chmod 命令设置
将高位八进制数字设置为 4(对于 setuid)或 2(对于
设置gid)。 “chmod 6711 file”将设置 setuid 和 setgid 位
(2+4=6)
Update
正如 @rici 指出的,您仍然需要具有执行权限才能执行此过程,因此您可以从others
并仅将其保持打开状态group
。因此,只有该组的成员才能执行它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)