linux – 允许非root用户删除缓存
发布时间:2020-12-14 01:14:41 所属栏目:Linux 来源:网络整理
导读:我正在一个系统上进行性能测试,我需要确保从磁盘读取数据,并且它不仅仅是缓存(比如早期的测试).我读了 here,我可以使用命令删除缓存 echo 3 | sudo tee /proc/sys/vm/drop_caches 但请注意,即使我的帐户是管理员帐户(登录彼得),它仍然需要我的密码.我希望能
我正在一个系统上进行性能测试,我需要确保从磁盘读取数据,并且它不仅仅是缓存(比如早期的测试).我读了
here,我可以使用命令删除缓存
echo 3 | sudo tee /proc/sys/vm/drop_caches 但请注意,即使我的帐户是管理员帐户(登录彼得),它仍然需要我的密码.我希望能够在批处理脚本中运行它而无需输入密码(因为这显然是手动的) 更多research让我进入了sudoers文件.我的计划是将上面的命令放入一个名为dropCache的单行脚本中,并编辑sudoers以便我可以在不输入密码的情况下运行它.所以我添加了这条线 ALL ALL=(ALL)NOPASSWD:/home/peter/dropCache 在我的sudoers文件的末尾(使用visudo).使用我的管理员帐户,如果我运行 sudo -l 我明白了 (ALL) NOPASSWD: /home/peter/dropCache 但是,如果我运行我的dropCache脚本,我仍然会被要求输入密码 ./dropCache [sudo] password for peter: 任何有关这方面的帮助将非常感激.我正在运行Ubuntu 12.04 谢谢 解决方法
我在需要时做的是我编写了一个小程序,将编译文件的所有者更改为root,然后设置setuid位.
这是源代码: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> extern void sync(void); int main(void) { if (geteuid() != 0) { fprintf(stderr,"flush-cache: Not rootn"); exit(EXIT_FAILURE); } printf("Flushing page cache,dentries and inodes...n"); // First: the traditional three sync calls. Perhaps not needed? // For security reasons,system("sync") is not a good idea. sync(); sync(); sync(); 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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |