17

我目前在运行 linux perf 时遇到问题,主要是因为/proc/sys/kernel/kptr_restrict当前设置为 1。

但是,如果我尝试/proc/sys/kernel/kptr_restrict通过如下方式回显 0...

echo 0 > /proc/sys/kernel/kptr_restrict

我收到权限被拒绝错误。我认为我也不能更改它的权限。

有没有办法以某种方式直接设置它?我是超级用户。如果没有设置,我认为 perf 无法正常运行。

4

2 回答 2

29

在您的示例中,echo以 root 身份运行,但您的 shell 以您身份运行。

所以请试试这个命令:

sudo sh -c " echo 0 > /proc/sys/kernel/kptr_restrict"
于 2013-12-05T04:20:47.223 回答
22

位于的所有文件/proc/sys都只能被修改root(实际上99.9%的文件,检查ls -l)。因此,您必须使用sudo修改这些文件(或以 root 身份执行命令的首选方式)。

修改文件的正确方法/proc/sys是使用该sysctl工具。请注意,yu 应该/用点 ( ) 替换斜线 ( .) 并省略/proc/sys/前缀...阅读精美手册。

读取当前值:

$ sysctl kernel.kptr_restrict 
kernel.kptr_restrict = 1

修改值:

$ sudo sysctl -w kernel.kptr_restrict=0
sysctl kernel.kptr_restrict=1

为了使您的修改重新启动持久,您应该编辑 /etc/sysctl.conf或创建一个文件/etc/sysctl.d/50-mytest.conf(以 root 或使用编辑文件sudoedit),其中包含:

kernel.kptr_restrict=1

在这种情况下,您应该执行此命令来重新加载您的配置:

$ sysctl -p /etc/sysctl.conf

PS可以直接写入虚拟文件。https://stackoverflow.com/users/321730/cdyson37命令相当优雅:echo 0 | sudo tee /proc/sys/kernel/kptr_restrict

于 2016-03-28T13:26:27.430 回答