5

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

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

我可以通过从帖子中执行某些操作在 C++ 中以编程方式写入文件 -->如何在 Linux 系统上以编程方式清除 C++ 中的文件系统内存缓存?

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 文件的权限?如有必要,我可以完全定制我的内核。谢谢 -

4

1 回答 1

3

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

这称为setuid

出于安全原因,您不能setuid使用 shell 脚本。

从wiki中提取如何使用它:

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

更新

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

于 2013-02-13T20:03:25.917 回答