我目前在运行Linux perf时遇到了麻烦,主要是因为/proc/sys/kernel/kptr_restrict
当前设置为1。
然而,如果我尝试像以下这样通过将0回显到其中来更改/proc/sys/kernel/kptr_restrict
...
echo 0 > /proc/sys/kernel/kptr_restrict
我遇到了权限被拒绝的错误。我不认为我能够改变它的权限。
有没有什么直接设置它的方法?我是超级用户。我不认为 perf 在没有设置这个的情况下能正常运行。
我目前在运行Linux perf时遇到了麻烦,主要是因为/proc/sys/kernel/kptr_restrict
当前设置为1。
然而,如果我尝试像以下这样通过将0回显到其中来更改/proc/sys/kernel/kptr_restrict
...
echo 0 > /proc/sys/kernel/kptr_restrict
我遇到了权限被拒绝的错误。我不认为我能够改变它的权限。
有没有什么直接设置它的方法?我是超级用户。我不认为 perf 在没有设置这个的情况下能正常运行。
在你的例子中,echo
正在以 root 权限运行,但你的 shell 是以你自己的身份运行的。
因此,请尝试执行以下命令:
sudo sh -c " echo 0 > /proc/sys/kernel/kptr_restrict"
所有位于/proc/sys
的文件只能被root
修改(实际上是99.9%的文件,可通过ls -l
进行检查)。因此,您必须使用sudo
来修改这些文件(或您喜欢的以root身份执行命令的方式)。
修改/proc/sys
中的文件的正确方法是使用sysctl
工具。请注意,您应该将斜杠(/
)替换为点号(.
),并省略/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
顺便说一下,在虚拟文件中可以直接编写。https://stackoverflow.com/users/321730/cdyson37命令非常优雅:echo 0 | sudo tee /proc/sys/kernel/kptr_restrict
echo 0 | sudo tee /proc/sys/kernel/kptr_restrict
。 - cdyson37