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

dag*_*go 10 command-line sudo

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

这些是powertop给出的节能建议:

echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

echo 1 > /sys/module/snd_hda_intel/parameters/power_save
Run Code Online (Sandbox Code Playgroud)

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

enz*_*tib 15

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

有一个名为 的命令,tee可以将它在标准输入上接收到的内容写入文件和标准输出:这对于在没有重定向的情况下向文件写入内容非常方便。如果文件只能由 root 修改,则sudotee.

echo 1500 | sudo tee /proc/sys/vm/dirty_writeback_centisecs
Run Code Online (Sandbox Code Playgroud)

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

sudo sh -c 'echo 1500 > /proc/sys/vm/dirty_writeback_centisecs'
Run Code Online (Sandbox Code Playgroud)

最后,您可以通过各种方式进入 root shell,并且在您exit明确使用该 shell之前,您将保持 root身份:

sudo su
sudo -s
sudo bash
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅 的手册页sudosu当然还有bash


Lek*_*eyn 9

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

/过程/系统

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

vm.dirty_writeback_centisecs = 1500
Run Code Online (Sandbox Code Playgroud)

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

sudo sysctl -p
Run Code Online (Sandbox Code Playgroud)

/系统

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

module/snd_hda_intel/parameters/power_save = 1
Run Code Online (Sandbox Code Playgroud)

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

sudo /etc/init.d/sysfsutils restart
Run Code Online (Sandbox Code Playgroud)