我正在尝试修改我的 ati 卡的电源方法,因为它就像在房间里有一架直升机。我使用与描述相同的方法这里。
sudo bash -c echo "profile" > /sys/class/drm/card0/device/power_method
bash: /sys/class/drm/card0/device/power_method: Permission denied
我也尝试过切换到 rootsudo -i
并执行相同操作,但没有效果。有什么想法吗?
答案1
重定向运算符不是sudo
命令的一部分。换句话说,当你执行 时sudo bash -c echo "profile" > /sys/class/drm/card0/device/power_method
,实际发生的是:
- shell 执行
sudo bash -c echo "profile"
sudo
,其中设置了 setuid 位,要求输入密码,并分叉bash -c echo "profile"
EUID 设置为 0 的进程(即,该命令以 root 身份执行)- 该
bash
命令以 root 身份执行echo "profile"
并打印profile
到标准输出。 bash
终止,sudo
终止- 运行原始命令的 shell 从标准输出获取字符串并尝试将其重定向到
/sys/class/drm/card0/device/power_method
,Permission denied
由于 shell 未以 root 权限运行,因此这会为您带来麻烦。
有很多方法可以解决这个问题。一种方法是将整个字符串使用重定向运算符作为参数bash -c
:
sudo bash -c 'echo "profile" > /sys/class/drm/card0/device/power_method'
我还经常看到人们使用tee
,它看起来更好一些(并且不echo
以 root 身份执行命令):
echo "profile" | sudo tee /sys/class/drm/card0/device/power_method
tee
从标准输入读取并输出到两个都标准输出和全部您将其作为参数传递的文件。