为什么用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修改,则将sudo
到tee
就足够了。
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
有关更多信息,请参阅sudo
, su
以及bash
的manuale页面。
您可以使用procps
和sysfsutils
的配置文件,而不是像@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 -s
或sudo 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
这样,即使在登录之前,也会为所有用户启用这些省电选项,并且每次都不需要密码来授权它们。