为什么用sudo回显这些参数不起作用?

可能重复:
sudo和重定向输出

这些是powertop为节省能源而给出的建议:

echo 1500 > /proc/sys/vm/dirty_writeback_centisecs echo 1 > /sys/module/snd_hda_intel/parameters/power_save 

但是,即使作为sudo,我也无法从终端执行它们。 想法?

您的命令不起作用,因为重定向> file是在执行命令之前由当前shell完成的,所以在sudo生效之前。

有一个名为tee的命令,它写入一个文件并stdout它在stdin上收到的内容:这样可以在没有重定向的情况下将某些内容写入文件。 如果文件只能由root修改,则将sudotee就足够了。

 echo 1500 | sudo tee /proc/sys/vm/dirty_writeback_centisecs 

获得所需结果的另一种方法是保持重定向,即通过sudo将重定向移动到root执行的子shell:

 sudo sh -c 'echo 1500 > /proc/sys/vm/dirty_writeback_centisecs' 

最后,您可以通过各种方式输入root shell,并且在显式exit该shell之前保持root:

 sudo su sudo -s sudo bash 

有关更多信息,请参阅sudosu以及bash的manuale页面。

您可以使用procpssysfsutils的配置文件,而不是像@SeppoErviälä所描述的那样创建用于设置值的cronjob。

的/ proc / SYS

/proc/sys值可以在文件/etc/sysctl.conf设置。 要使echo 1500 > /proc/sys/vm/dirty_writeback_centisecs持久化,请添加一行:

 vm.dirty_writeback_centisecs = 1500 

要将/etc/sysctl.conf的更改加载到当前会话,请运行:

 sudo sysctl -p 

/ SYS

要在/sys设置值,需要安装包sysfsutils 。 配置文件位于/etc/sysfs.conf 。 要使echo 1 > /sys/module/snd_hda_intel/parameters/power_save持久化,请添加一行:

 module/snd_hda_intel/parameters/power_save = 1 

要将/etc/sysfs.conf的值应用于当前会话,请运行:

 sudo /etc/init.d/sysfsutils restart 

先做一个sudo -ssudo su

在此处输入图像描述

从脚本:

 # more powersave echo 1500 > /proc/sys/vm/dirty_writeback_centisecs echo 1 > /sys/module/snd_hda_intel/parameters/power_save # ./powersave # 

最好的做法是在激活脚本之前发出sudo -s (因此#)。

编辑:请参阅@Lekensteyn的答案,了解更正确的编辑/proc/sys/sys默认值的方法。

从命令行运行这些建议只会为当前会话启用它们,并且在重新启动后它们将重置为默认值。 如果您想在每次系统启动时启用这些建议,您应该将它们变为脚本:

 #!/bin/dash echo 1500 > /proc/sys/vm/dirty_writeback_centisecs echo 1 > /sys/module/snd_hda_intel/parameters/power_save 

你可以把这个脚本放在一个方便的地方,例如。 /root/power_save.sh

然后,您希望确保每次系统启动时都以root权限运行。 这可以使用sudo crontab -e来完成,它打开root用户的基于时间的任务列表。 添加行:

 @reboot /root/power_save.sh 

不要忘记让你的脚本可执行:

 sudo chmod u+x /root/power_save.sh 

这样,即使在登录之前,也会为所有用户启用这些省电选项,并且每次都不需要密码来授权它们。