Por que o eco desses parâmetros com o sudo não funciona? [duplicado]

9

Estas são sugestões dadas por powertop para economizar energia:

echo 1500 > /proc/sys/vm/dirty_writeback_centisecs

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

No entanto, não posso executá-los a partir do terminal, mesmo como sudo. Idéias?

    
por dago 23.06.2011 / 20:03

4 respostas

14

Seu comando não funciona porque o redirecionamento > file é feito pelo shell atual anterior para a execução do comando, portanto, antes do sudo entrar em vigor.

Existe um comando, chamado tee , que grava em um arquivo e stdout o que ele recebe em seu stdin: isso é útil para gravar algo em um arquivo sem redirecionamento. Se o arquivo puder ser modificado apenas pela raiz, basta prefixar sudo a tee .

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

Outra maneira de obter o resultado desejado, mantendo o redirecionamento, é mover o redirecionamento para um subshell executado pelo root, através de sudo :

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

Por fim, você pode inserir um shell de raiz de várias maneiras, e você permanecerá root até que você exit explicitamente esse shell:

sudo su
sudo -s
sudo bash

Para obter mais informações, consulte as páginas do manual de sudo , su e, claro, de bash .

    
por enzotib 23.06.2011 / 20:47
8

Em vez de criar um cronjob para definir valores conforme descrito por @ Seppo Erviälä , você pode fazer uso dos arquivos de configuração de procps e sysfsutils .

/ proc / sys

Os valores para /proc/sys podem ser definidos no arquivo /etc/sysctl.conf . Para tornar echo 1500 > /proc/sys/vm/dirty_writeback_centisecs persistent, adicione uma linha com:

vm.dirty_writeback_centisecs = 1500

Para carregar as alterações em /etc/sysctl.conf na sessão atual, execute:

sudo sysctl -p

/ sys

Para definir valores em /sys , o pacote sysfsutils precisa ser instalado. O arquivo de configuração está localizado em /etc/sysfs.conf . Para tornar echo 1 > /sys/module/snd_hda_intel/parameters/power_save persistent, adicione uma linha com:

module/snd_hda_intel/parameters/power_save = 1

Para aplicar os valores em /etc/sysfs.conf à sessão atual, execute:

sudo /etc/init.d/sysfsutils restart
    
por Lekensteyn 24.06.2011 / 12:59
2

Faça um sudo -s ou um sudo su primeiro:

De um script:

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

A melhor prática seria usar o sudo -s antes de ativar o script (daí o #).

    
por Rinzwind 23.06.2011 / 20:11
2

EDIT: Veja a resposta por @Lekensteyn para uma maneira mais adequada de editar /proc/sys e /sys defaults.

A execução dessas sugestões a partir da linha de comando só as habilitará para a sessão atual e elas serão redefinidas para os padrões após a reinicialização. Se você quiser ativar essas sugestões toda vez que seu sistema for iniciado, você deve transformá-las em um script:

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

Você pode colocar esse script em algum lugar conveniente, por exemplo. /root/power_save.sh .

Em seguida, você quer ter certeza de que ele é executado com privilégios de root toda vez que o sistema for iniciado. Isso pode ser feito com sudo crontab -e , que abre a lista de tarefas baseadas em tempo para o root. Adicionar linha:

@reboot /root/power_save.sh

Não se esqueça de tornar seu script executável:

sudo chmod u+x /root/power_save.sh

Dessa forma, essas opções de economia de energia serão ativadas para todos os usuários, mesmo antes do login, e nenhuma senha será necessária para autorizá-las a cada vez.

    
por Seppo Erviälä 24.06.2011 / 12:43