Почему эхо этих параметров с sudo не работает? [Дубликат]

9

Это предложения, приведенные powertop для экономии энергии:

echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

echo 1 > /sys/module/snd_hda_intel/parameters/power_save

Однако я не могу выполнить их с терминала даже в качестве sudo. Идеи?

    
задан dago 23.06.2011 в 18:03
источник

4 ответа

14

Ваша команда не работает, потому что перенаправление > file выполняется текущей оболочкой предшествующей для выполнения команды, поэтому до того, как sudo будет действовать.

Существует команда, называемая tee , которая записывает в файл и выводит то, что получает на своем stdin: это удобно для записи чего-либо в файл без перенаправления. Если файл может быть изменен только с помощью root, достаточно добавить sudo в tee .

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

Другой способ получить желаемый результат, поддерживающий перенаправление, - переместить перенаправление на подоболочку, выполненную root, через sudo :

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

Наконец, вы можете ввести корневую оболочку различными способами, и вы останетесь root до тех пор, пока вы не будете явно exit этой оболочки:

sudo su
sudo -s
sudo bash

Для получения дополнительной информации см. страницы руководства на sudo , su и, конечно, bash .

    
ответ дан enzotib 23.06.2011 в 18:47
источник
8

Вместо создания cronjob для установки значений, как описано @ Seppo Erviälä , вы можете использовать файлы конфигурации procps и sysfsutils .

/ Труды / 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
    
ответ дан Lekensteyn 24.06.2011 в 10:59
2

Сначала выполните команду 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 перед активацией скрипта (следовательно, #).

    
ответ дан Rinzwind 23.06.2011 в 18:11
2

EDIT: см. ответ @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

Таким образом, эти параметры энергосбережения будут включены для всех пользователей, даже до входа в систему, и не требуется пароль для авторизации их каждый раз.

    
ответ дан Seppo Erviälä 24.06.2011 в 10:43