微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

允许非root用户删除caching

我正在一个系统上执行性能testing,我需要确保从磁盘读取数据,而不仅仅是caching(比如之前的testing)。 我在这里读到,我可以使用命令删除caching

echo 3 | sudo tee /proc/sys/vm/drop_caches

但是,请注意,即使我的帐户是一个pipe理员帐户(login彼得),它仍然需要我的密码。 我希望能够在批处理脚本中运行而不需要input密码(因为这显然是手动的)

更多的研究把我引向了sudoers文件。 我的计划是将上述命令放到一个名为dropCache的单行脚本中,并编辑sudoers,以便我可以在不input密码的情况下运行它。 所以我加了一行

ALL ALL=(ALL)nopASSWD:/home/peter/dropCache

在我sudoers文件的结尾(使用visudo)。 用我的pipe理员帐户,如果我运行

sudo -l

我明白了

(ALL) nopASSWD: /home/peter/dropCache

但是,如果我运行我的dropCache脚本,我仍然被要求input密码

./dropCache [sudo] password for peter:

任何帮助,将不胜感激。 我正在运行Ubuntu 12.04

谢谢彼得

当我需要这个时,我做了一个小小的C程序,把编译的文件的所有者改为root,并设置了setuid位。

这里是源代码包括传统的三个“同步”命令(大概可以省略):

#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> int main(void) { printf("Flushing page cache,dentries and inodes...n"); if (geteuid() != 0) { fprintf(stderr,"flush-cache: Not rootn"); exit(EXIT_FAILURE); } if (system("sync") != 0) { fprintf(stderr,"flush-cache: sync Failed (first time)n"); exit(EXIT_FAILURE); } if (system("sync") != 0) { fprintf(stderr,"flush-cache: sync Failed (second time)n"); exit(EXIT_FAILURE); } if (system("sync") != 0) { fprintf(stderr,"flush-cache: sync Failed (third time)n"); exit(EXIT_FAILURE); } FILE* f; f = fopen("/proc/sys/vm/drop_caches","w"); if (f == NULL) { fprintf(stderr,"flush-cache: Couldn't open /proc/sys/vm/drop_cachesn"); exit(EXIT_FAILURE); } if (fprintf(f,"3n") != 2) { fprintf(stderr,"flush-cache: Couldn't write 3 to /proc/sys/vm/drop_cachesn"); exit(EXIT_FAILURE); } fclose(f); printf("Done flushing.n"); return 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐