有没有办法将kptr_restrict设置为0?

jab*_*jab 14 linux linux-kernel perf

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

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

echo 0 > /proc/sys/kernel/kptr_restrict
Run Code Online (Sandbox Code Playgroud)

我得到一个权限被拒绝错误.我认为我也不能改变它的权限.

有没有办法直接设置这个?我是超级用户.我不认为如果没有这个设置,perf将会起到可接受的作用.

小智 22

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

所以请尝试这个命令:

sudo sh -c " echo 0 > /proc/sys/kernel/kptr_restrict"
Run Code Online (Sandbox Code Playgroud)

  • 或者`echo 0 | sudo tee/proc/sys/kernel/kptr_restrict` (10认同)

Fra*_*iat 19

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

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

读取当前值:

$ sysctl kernel.kptr_restrict 
kernel.kptr_restrict = 1
Run Code Online (Sandbox Code Playgroud)

修改值:

$ sudo sysctl -w kernel.kptr_restrict=0
sysctl kernel.kptr_restrict=1
Run Code Online (Sandbox Code Playgroud)

要使修改重新持久,您应该编辑 /etc/sysctl.conf或创建文件/etc/sysctl.d/50-mytest.conf(以root或使用方式编辑文件sudoedit),包含:

kernel.kptr_restrict=1
Run Code Online (Sandbox Code Playgroud)

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

$ sysctl -p /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

PS可以直接写入虚拟文件./sf/users/22521131/命令相当优雅:echo 0 | sudo tee /proc/sys/kernel/kptr_restrict